Add SandPhysicsScene for Margolus block CA

This commit is contained in:
Jared Miller 2026-03-11 14:10:38 -04:00
parent 9e5af09476
commit 66d5f6b251
Signed by: shmup
GPG key ID: 22B5C6D66A38B06C

View 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() {}
}