Add SandPhysicsScene for Margolus block CA
This commit is contained in:
parent
9e5af09476
commit
66d5f6b251
1 changed files with 43 additions and 0 deletions
43
src/scenes/SandPhysicsScene.ts
Normal file
43
src/scenes/SandPhysicsScene.ts
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
import * as THREE from "three";
|
||||||
|
import type Renderer from "../Renderer";
|
||||||
|
import fragmentShader from "../shaders/sandPhysics.frag";
|
||||||
|
import vertexShader from "../shaders/sandPhysics.vert";
|
||||||
|
import FullScreenTriangleGeometry from "../utils/FullScreenTriangleGeometry";
|
||||||
|
import AbstractScene from "./AbstractScene";
|
||||||
|
|
||||||
|
export default class SandPhysicsScene extends AbstractScene {
|
||||||
|
public readonly camera: THREE.OrthographicCamera =
|
||||||
|
new THREE.OrthographicCamera();
|
||||||
|
public readonly material: THREE.RawShaderMaterial;
|
||||||
|
|
||||||
|
constructor(renderer: Renderer) {
|
||||||
|
super(renderer);
|
||||||
|
|
||||||
|
const geometry = new FullScreenTriangleGeometry();
|
||||||
|
const material = new THREE.RawShaderMaterial({
|
||||||
|
uniforms: {
|
||||||
|
uWorld: { value: null },
|
||||||
|
uMaterialProps: { value: null },
|
||||||
|
uBlockOffset: { value: new THREE.Vector2(0, 0) },
|
||||||
|
uFrame: { value: 0 },
|
||||||
|
},
|
||||||
|
vertexShader,
|
||||||
|
fragmentShader,
|
||||||
|
defines: this.renderer.getCommonMaterialDefines(),
|
||||||
|
glslVersion: THREE.GLSL3,
|
||||||
|
});
|
||||||
|
const mesh = new THREE.Mesh(geometry, material);
|
||||||
|
this.add(mesh);
|
||||||
|
|
||||||
|
this.material = material;
|
||||||
|
}
|
||||||
|
|
||||||
|
public recompileMaterials() {
|
||||||
|
this.material.defines = this.renderer.getCommonMaterialDefines();
|
||||||
|
this.material.needsUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public resize(_width: number, _height: number) {}
|
||||||
|
|
||||||
|
public update() {}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue