File

projects/atft/src/lib/renderer/renderer.service.ts

Index

Properties
Methods

Constructor

constructor(statsService: StatsService)
Parameters :
Name Type Optional
statsService StatsService No

Methods

Public getCamera
getCamera()
Public getScene
getScene()
Returns : SceneComponent
Public getWebGlRenderer
getWebGlRenderer()
Returns : THREE.WebGLRenderer
Public initialize
initialize(canvas: HTMLCanvasElement, preserveDrawingBuffer: boolean)
Parameters :
Name Type Optional
canvas HTMLCanvasElement No
preserveDrawingBuffer boolean No
Returns : void
Public render
render()
Returns : void
Public resize
resize(canvas: HTMLCanvasElement, size: string)
Parameters :
Name Type Optional
canvas HTMLCanvasElement No
size string No
Returns : void
Public setCamera
setCamera(camera: AbstractCamera<any>)
Parameters :
Name Type Optional
camera AbstractCamera<any> No
Returns : void
Public setComposer
setComposer(composer: EffectComposerComponent | undefined)
Parameters :
Name Type Optional
composer EffectComposerComponent | undefined No
Returns : void
Public setScene
setScene(scene: SceneComponent)
Parameters :
Name Type Optional
scene SceneComponent No
Returns : void
Private updateAspectRatio
updateAspectRatio(canvas: HTMLCanvasElement)
Parameters :
Name Type Optional
canvas HTMLCanvasElement No
Returns : void
Private updateChildCamerasAspectRatio
updateChildCamerasAspectRatio(canvas: HTMLCanvasElement)
Parameters :
Name Type Optional
canvas HTMLCanvasElement No
Returns : void

Properties

Private aspect
Type : number
Private camera
Type : AbstractCamera<any>
Private Optional composer
Type : EffectComposerComponent
Private init
Default value : false
Private scene
Type : SceneComponent
Private webGlRenderer
Type : THREE.WebGLRenderer
import {Injectable} from '@angular/core';
import {SceneComponent} from '../object/scene.component';
import {AbstractCamera} from '../camera/abstract-camera';
import * as THREE from 'three';
import {StatsService} from '../stats/stats.service';
import {EffectComposerComponent} from '../effect';


@Injectable()
export class RendererService {

  private init = false;
  private scene!: SceneComponent;
  private camera!: AbstractCamera<any>;
  private webGlRenderer!: THREE.WebGLRenderer;
  private aspect!: number;

  private composer?: EffectComposerComponent;

  constructor(
    private statsService: StatsService,
    // TODO: private bloom: BloomService
  ) {

  }

  public setScene(scene: SceneComponent) {
    this.scene = scene;
  }

  public setCamera(camera: AbstractCamera<any>) {
    this.camera = camera;
    this.camera.updateAspectRatio(this.aspect);
  }

  public render() {
    // TODO: this.bloomInit();
    if (this.init && this.scene && this.scene.getObject() && this.camera && this.camera.camera) {
      // TODO: this.bloom.render();
      // console.log('render');
      if (this.composer) {
        this.composer.render();
        if (!this.composer.renderToScreen) {
          this.webGlRenderer.render(this.scene.getObject(), this.camera.camera);
        }
      } else {
        this.webGlRenderer.render(this.scene.getObject(), this.camera.camera);
      }
      this.statsService.update();
    }
  }

  public initialize(canvas: HTMLCanvasElement, preserveDrawingBuffer : boolean) {
    // console.log('RendererComponent.initialize');
    this.webGlRenderer = new THREE.WebGLRenderer({
      canvas: canvas,
      antialias: true,
      alpha: true,
      preserveDrawingBuffer: preserveDrawingBuffer
    });
    this.webGlRenderer.setPixelRatio(window.devicePixelRatio);
    this.webGlRenderer.setSize(canvas.clientWidth, canvas.clientHeight, true);

    // this.scene.background = this.renderTarget.texture;

    // TODO: props
    this.webGlRenderer.shadowMap.enabled = false;
    this.webGlRenderer.shadowMap.autoUpdate = false;
    this.webGlRenderer.shadowMap.type = THREE.PCFSoftShadowMap;
    this.webGlRenderer.setClearColor(0x000000, 0);
    this.webGlRenderer.autoClear = true;
    canvas.style.zIndex = '2';

    // ------------------------------ END

    this.updateChildCamerasAspectRatio(canvas);
    this.init = true;
    this.render();
  }

  /*
  protected bloomInit() {
    if (!this.bloom.initialized && this.scene && this.scene.getObject() && this.camera && this.camera.camera) {
      this.bloom.init(this.webGlRenderer, this.scene.getObject(), this.camera.camera);
    }
  }
  */

  public resize(canvas: HTMLCanvasElement, size: string) {
    canvas.style.width = size;
    canvas.style.height = size;
    canvas.style.border = 'none';
    const width = canvas.clientWidth;
    const height = canvas.clientHeight;

    this.webGlRenderer.setSize(width, height, true);

    this.updateChildCamerasAspectRatio(canvas);
    this.render();
  }

  private updateAspectRatio(canvas: HTMLCanvasElement): void  {
    const height = canvas.clientHeight;
    if (height === 0) {
      return;
    }
    this.aspect = canvas.clientWidth / canvas.clientHeight;
  }

  private updateChildCamerasAspectRatio(canvas: HTMLCanvasElement) {
    this.updateAspectRatio(canvas);
    if (this.camera) {
      this.camera.updateAspectRatio(this.aspect);
    }
  }

  public getScene() {
    return this.scene;
  }

  public getCamera() {
    return this.camera;
  }

  public getWebGlRenderer() {
    return this.webGlRenderer;
  }

  public setComposer(composer: EffectComposerComponent | undefined) {
    this.composer = composer;
  }


}

results matching ""

    No results matching ""