normals helper

This commit is contained in:
Seth Trowbridge 2022-04-10 16:58:27 -04:00
parent d62a1e7357
commit 594c6ac8dc

28
app.js
View File

@ -1,7 +1,7 @@
// @ts-check // @ts-check
import * as T from 'three'; import * as T from 'three';
//import { FaceNormalsHelper } from 'three/examples/jsm/helpers/FaceNormalsHelper.js'; import { VertexNormalsHelper } from 'three/examples/jsm/helpers/VertexNormalsHelper.js';
import { Scene } from './scene.js'; import { Scene } from './scene.js';
import Region from "./region.js"; import Region from "./region.js";
@ -12,10 +12,11 @@ voxels[Region.I(0, 0, 0)] = true;
let surfaceCubeGeometry = new T.BufferGeometry(); let surfaceCubeGeometry = new T.BufferGeometry();
let surfaceCubeObject = new T.Mesh( let surfaceCubeObject = new T.Mesh(
surfaceCubeGeometry, surfaceCubeGeometry,
new T.MeshPhongMaterial({color:0x666666, wireframe:false, flatShading:true, side:T.BackSide}) new T.MeshPhongMaterial({color:0x666666, wireframe:false, flatShading:true, side:T.DoubleSide})
); );
//var vnh = new FaceNormalsHelper( surfaceCubeObject, 1, 0xff0000 );
let surfaceCubeNormalHelper;
let rebuildSurface = inVoxels => let rebuildSurface = inVoxels =>
{ {
@ -23,9 +24,21 @@ let rebuildSurface = inVoxels =>
surfaceCubeGeometry.setAttribute("position", new T.BufferAttribute(pos, 3)); surfaceCubeGeometry.setAttribute("position", new T.BufferAttribute(pos, 3));
surfaceCubeGeometry.setIndex(ind); surfaceCubeGeometry.setIndex(ind);
surfaceCubeGeometry.computeVertexNormals();
if(surfaceCubeNormalHelper) surfaceCubeNormalHelper.update();
}; };
rebuildSurface(voxels); rebuildSurface(voxels);
surfaceCubeNormalHelper = new VertexNormalsHelper( surfaceCubeObject, -0.2 );
const hitHelper = new T.Mesh
(
new T.BoxGeometry( 0.2, 0.2, 0.2 ),
new T.MeshBasicMaterial( {color: 0x00ff00} )
);
Scene({ Scene({
DOM:"canvas", DOM:"canvas",
@ -33,10 +46,15 @@ Scene({
{ {
let light = new T.PointLight(0xffffff, 1, 100) let light = new T.PointLight(0xffffff, 1, 100)
light.position.set(5, 5, -5); light.position.set(5, 5, -5);
inScene.add(light) inScene.add(light);
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( surfaceCubeNormalHelper );
}, },
Update(inScene, inScreen, inDelta) Update(inScene, inScreen, inDelta)
{ {
@ -52,11 +70,13 @@ Scene({
if(hits[i].distance < hit.distance) if(hits[i].distance < hit.distance)
{ {
hit = hits[i]; hit = hits[i];
} }
} }
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);
hitHelper.position.set(hit.point.x, hit.point.y, hit.point.z);
console.log(index, hit); console.log(index, hit);
} }
} }