56 lines
No EOL
1.4 KiB
TypeScript
56 lines
No EOL
1.4 KiB
TypeScript
import * as THREE from 'three';
|
|
import Renderer from "../Renderer";
|
|
import AbstractScene from "./AbstractScene";
|
|
import fragmentShader from '../shaders/antsDiscretize.frag';
|
|
import vertexShader from '../shaders/antsDiscretize.vert';
|
|
|
|
export default class AntsDiscretizeScene extends AbstractScene {
|
|
public readonly camera: THREE.OrthographicCamera = new THREE.OrthographicCamera();
|
|
public readonly material: THREE.RawShaderMaterial;
|
|
public mesh: THREE.InstancedMesh;
|
|
|
|
constructor(renderer: Renderer) {
|
|
super(renderer);
|
|
|
|
this.material = new THREE.RawShaderMaterial({
|
|
uniforms: {
|
|
tDataCurrent: {value: null},
|
|
tDataLast: {value: null},
|
|
},
|
|
vertexShader,
|
|
fragmentShader,
|
|
defines: this.renderer.getCommonMaterialDefines(),
|
|
glslVersion: THREE.GLSL3
|
|
});
|
|
|
|
this.createMesh();
|
|
}
|
|
|
|
private createMesh() {
|
|
if (this.mesh) {
|
|
this.remove(this.mesh);
|
|
this.mesh.dispose();
|
|
}
|
|
|
|
this.mesh = new THREE.InstancedMesh(
|
|
new THREE.BoxBufferGeometry(1, 1, 1),
|
|
this.material,
|
|
this.renderer.resources.antsDataRenderTarget0.width * this.renderer.resources.antsDataRenderTarget0.height
|
|
);
|
|
this.add(this.mesh);
|
|
}
|
|
|
|
public recompileMaterials() {
|
|
this.material.defines = this.renderer.getCommonMaterialDefines();
|
|
this.material.needsUpdate = true;
|
|
this.createMesh();
|
|
}
|
|
|
|
public resize(width: number, height: number) {
|
|
|
|
}
|
|
|
|
public update(deltaTime: number) {
|
|
|
|
}
|
|
} |