Skip to content

Boxes


WebGPU is not supported in your browser
Please upgrade to latest Chrome/Edge

ts
import { Engine3D, View3D, Scene3D, CameraUtil, AtmosphericComponent, webGPUContext, HoverCameraController, Object3D, DirectLight, KelvinUtil, LitMaterial, MeshRenderer, Vector3, PostProcessingComponent, GlobalFog, Color, BoxGeometry, GTAOPost, BloomPost } from '@orillusion/core'
import { Stats } from '@orillusion/stats'

class Sample_Boxes {
    view: View3D
    post: PostProcessingComponent

    async run() {
        Engine3D.setting.shadow.enable = true
        Engine3D.setting.shadow.updateFrameRate = 1
        Engine3D.setting.shadow.shadowBound = 500
        Engine3D.setting.shadow.autoUpdate = true
        Engine3D.setting.render.useLogDepth = true

        await Engine3D.init()
        this.view = new View3D()
        this.view.scene = new Scene3D()
        this.view.scene.addComponent(AtmosphericComponent)
        this.view.scene.addComponent(Stats)

        this.view.camera = CameraUtil.createCamera3DObject(this.view.scene)
        this.view.camera.perspective(60, webGPUContext.aspect, 1, 5000.0)
        this.view.camera.object3D.addComponent(HoverCameraController).setCamera(35, -20, 1000)

        Engine3D.startRenderView(this.view)

        this.post = this.view.scene.addComponent(PostProcessingComponent)
        this.post.addPost(BloomPost)
        this.createScene(this.view.scene)
    }

    private async createScene(scene: Scene3D) {
        {
            let sunObj = new Object3D()
            let sunLight = sunObj.addComponent(DirectLight)
            sunLight.lightColor = KelvinUtil.color_temperature_to_rgb(6553)
            sunLight.castShadow = true
            sunLight.intensity = 45
            sunObj.transform.rotationX = 50
            sunObj.transform.rotationY = 50
            scene.addChild(sunObj)
        }

        {
            let geometry = new BoxGeometry(5, 200, 5)
            let litMaterial = new LitMaterial()
            let w = 30
            let h = 30
            for (let i = 0; i < w; i++) {
                for (let j = 0; j < h; j++) {
                    let obj = new Object3D()
                    let mr = obj.addComponent(MeshRenderer)
                    mr.material = litMaterial
                    mr.geometry = geometry
                    obj.x = i * 10 - w * 0.5 * 10
                    obj.y = Math.random() * 100
                    obj.z = j * 10 - h * 0.5 * 10
                    scene.addChild(obj)
                }
            }

            let obj = new Object3D()
            let mr = obj.addComponent(MeshRenderer)
            mr.material = litMaterial
            mr.geometry = geometry
            obj.localScale = new Vector3(1000, 1, 1000)
            scene.addChild(obj)
        }
    }
}

new Sample_Boxes().run()