rebuild everything works

This commit is contained in:
Seth Trowbridge 2022-04-10 18:22:48 -04:00
parent 594c6ac8dc
commit c101c2f2f8

23
app.js
View File

@ -7,26 +7,34 @@ import Region from "./region.js";
let voxels = []; let voxels = [];
voxels[Region.I(0, 0, 0)] = true; voxels[Region.I(0, 0, 0)] = true;
voxels[Region.I(1, 0, 0)] = true;
voxels[Region.I(1, 1, 0)] = true;
voxels[Region.I(1, 2, 0)] = true;
let surfaceCubeGeometry = new T.BufferGeometry(); let surfaceCubeGeometry = new T.BufferGeometry();
surfaceCubeGeometry.setAttribute("position", new T.BufferAttribute(new Float32Array(), 3));
let surfaceCubeObject = new T.Mesh( let surfaceCubeObject = new T.Mesh(
surfaceCubeGeometry, surfaceCubeGeometry,
new T.MeshPhongMaterial({color:0x666666, wireframe:false, flatShading:true, side:T.DoubleSide}) new T.MeshPhongMaterial({color:0x666666, wireframe:false, flatShading:false, side:T.BackSide})
); );
let surfaceCubeNormalHelper; let surfaceCubeNormalHelper;
let rebuildSurface = inVoxels => let rebuildSurface = inVoxels =>
{ {
let { pos, ind } = Region.Surface(inVoxels); let { pos, ind } = Region.Surface(inVoxels);
surfaceCubeGeometry.setAttribute("position", new T.BufferAttribute(pos, 3)); let surfaceCubePositions = new T.BufferAttribute(pos, 3);
surfaceCubeGeometry.setIndex(ind); surfaceCubePositions.setUsage( T.DynamicDrawUsage );
surfaceCubeGeometry.dispose();
surfaceCubeGeometry = new T.BufferGeometry();
surfaceCubeGeometry.setAttribute("position", surfaceCubePositions);
surfaceCubeGeometry.setIndex(ind);
surfaceCubeGeometry.computeVertexNormals(); surfaceCubeGeometry.computeVertexNormals();
if(surfaceCubeNormalHelper) surfaceCubeNormalHelper.update(); surfaceCubeObject.geometry = surfaceCubeGeometry;
}; };
rebuildSurface(voxels); rebuildSurface(voxels);
@ -50,7 +58,7 @@ Scene({
inScene.add(surfaceCubeObject); inScene.add(surfaceCubeObject);
inScene.add(new T.GridHelper(10, 10)); //inScene.add(new T.GridHelper(10, 10));
inScene.add(new T.AxesHelper( 5 )); inScene.add(new T.AxesHelper( 5 ));
inScene.add( hitHelper ); inScene.add( hitHelper );
@ -76,6 +84,9 @@ Scene({
index = Region.I(Math.floor(hit.point.x), Math.floor(hit.point.y), Math.floor(hit.point.z)); index = Region.I(Math.floor(hit.point.x), Math.floor(hit.point.y), Math.floor(hit.point.z));
voxels[index] = true; voxels[index] = true;
rebuildSurface(voxels); rebuildSurface(voxels);
inScene.remove(surfaceCubeNormalHelper);
surfaceCubeNormalHelper = new VertexNormalsHelper( surfaceCubeObject, -0.2 );
inScene.add(surfaceCubeNormalHelper);
hitHelper.position.set(hit.point.x, hit.point.y, hit.point.z); hitHelper.position.set(hit.point.x, hit.point.y, hit.point.z);
console.log(index, hit); console.log(index, hit);
} }