Skip to content

Instantly share code, notes, and snippets.

@deanmlittle
Last active July 8, 2021 02:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save deanmlittle/de6d8d4223ee8017851227bea24881f5 to your computer and use it in GitHub Desktop.
Save deanmlittle/de6d8d4223ee8017851227bea24881f5 to your computer and use it in GitHub Desktop.
Angular Threejs scene starter
#rendererContainer(#rendererContainer)
import { Component, ViewChild, ElementRef, AfterViewInit, Renderer2, OnDestroy } from '@angular/core';
import { fromEvent, Observable, Subscription } from 'rxjs';
import { Scene, PerspectiveCamera, WebGLRenderer } from 'three';
@Component({
selector: 'three-scene',
templateUrl: './three-scene.component.pug',
styleUrls: ['./three-scene.component.scss']
})
export class ThreeSceneComponent implements AfterViewInit {
resizeObservable$: Observable<Event>
resizeSubscription$: Subscription
scene = new Scene()
renderer: WebGLRenderer
camera: PerspectiveCamera
@ViewChild('rendererContainer') rendererContainer: ElementRef
constructor(private ngRenderer:Renderer2){
this.renderer = new WebGLRenderer({antialias: true})
}
ngAfterViewInit(){
this.camera = new PerspectiveCamera(75, this.rendererContainer.nativeElement.clientWidth / this.rendererContainer.nativeElement.clientHeight, 0.1, 1000)
this.ngRenderer.appendChild(this.rendererContainer.nativeElement, this.renderer.domElement)
this.startScene();
}
startScene() {
this.renderer.setClearColor('#E5E5E5')
console.log(this.rendererContainer.nativeElement.clientWidth);
this.renderer.setSize(this.rendererContainer.nativeElement.clientWidth, this.rendererContainer.nativeElement.clientHeight)
this.renderer.render(this.scene, this.camera)
this.resizeObservable$ = fromEvent(window, 'resize')
this.resizeSubscription$ = this.resizeObservable$.subscribe( evt => {
this.renderer.setSize(this.rendererContainer.nativeElement.clientWidth, this.rendererContainer.nativeElement.clientHeight)
this.camera.aspect = this.rendererContainer.nativeElement.clientWidth / this.rendererContainer.nativeElement.clientHeight
this.camera.updateProjectionMatrix();
})
}
ngOnDestroy(){
this.resizeSubscription$.unsubscribe()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment