当前示例源码github地址:
https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/WireframeEntityTest.ts
当前示例运行效果:
此示例基于此渲染系统实现,当前示例TypeScript源码如下:
export class WireframeEntityTest {
private mRscene = new RendererScene();
initialize(): void {
this.initEvent();
this.initScene();
}
private initEvent(): void {
const rc = this.mRscene;
rc.addEventListener(MouseEvent.MOUSE_DOWN, this.mouseDown);
new MouseInteraction().initialize(rc, 0, false).setAutoRunning(true);
}
private mouseDown = (evt: MouseEvent): void => {};
private initScene(): void {
const rc = this.mRscene;
let axis = new AxisEntity();
rc.addEntity(axis);
let entities = [
new SphereEntity(),
new BoxEntity(),
new CylinderEntity({ alignYRatio: 0.0 }),
new CubeEntity({ cubeSize: 130 }),
new TorusEntity({ radius: 110, axisType: 1 }),
new PlaneEntity({ axisType: 1, extent: [-80, -80, 160, 160], doubleFace: true }),
new ConeEntity({ alignYRatio: 0.0 })
];
let ls = entities;
entities = [];
// random sorting
for (let i = 0, ln = ls.length; i < ln; ++i) {
const k = Math.round(Math.random() * 888) % ls.length;
entities.push(ls[k]);
ls.splice(k, 1);
}
let radius = 300.0;
for (let i = 0; i < entities.length; ++i) {
let rad = (2.0 * Math.PI * i) / entities.length;
let entity = entities[i].setAlbedo(new Color4().randomRGB(1.5, 0.1));
entity.arm = [1.1, Math.random() * 0.95 + 0.05, Math.random() * 0.9 + 0.1];
entity.transform.setPosition([radius * Math.cos(rad), 0, radius * Math.sin(rad)]);
rc.addEntity(entity);
}
radius += 230;
for (let i = 0; i < entities.length; ++i) {
let rad = (2.0 * Math.PI * i) / entities.length + 0.5;
let entity = entities[i].clone({ geometry: entities[i].geometry, doubleFace: true, wireframe: true });
entity.transform.setPosition([radius * Math.cos(rad), 0, radius * Math.sin(rad)]);
rc.addEntity(entity);
}
}
run(): void {
this.mRscene.run();
}
}