XGPU
Light_Sample.ts
Dragon.ts
Light.ts
LightPlugin.ts
import { GPURenderer, RenderPipeline } from "xgpu";
import { Sample } from "../HelloTriangle/Sample";
import { Dragon } from "./Dragon";
import { LightPlugin } from "./LightPlugin";
export class Light_Sample extends Sample {
protected async start(renderer: GPURenderer): Promise<void> {
const dragon = new Dragon();
dragon.model.scaleXYZ = 600;
const light = new LightPlugin(dragon, {
position: dragon.position,
normal: dragon.normal,
modelMatrix: dragon.model,
cameraMatrix: dragon.camera
}).apply() as LightPlugin;
//light.position.y = 1000;
const now = new Date().getTime();
dragon.camera.eyePosition.y = renderer.canvas.height * 0.4;
dragon.addEventListener(RenderPipeline.ON_DRAW_BEGIN, () => {
const time = (new Date().getTime() - now) / 1000;
dragon.camera.rotationY += 0.01;
light.position.z = (Math.sin(time) * 100);
})
renderer.addPipeline(dragon);
//console.log("nbPipeline = ", renderer.nbPipeline)
}
}