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