diff --git a/index.html b/index.html
index c793b65..b40a603 100644
--- a/index.html
+++ b/index.html
@@ -25,6 +25,39 @@ import { Region } from "./region.js";
let surfaceTest = () =>
{
+ let limit = (x, y, z, ax, ay, az) =>
+ {
+ let centerX = Math.round(x);
+ let centerY = Math.round(y);
+ let centerZ = Math.round(z);
+
+ let deltaX = ax-centerX;
+ let deltaY = ay-centerY;
+ let deltaZ = az-centerZ;
+
+ let absDeltaX = Math.abs(deltaX);
+ let absDeltaY = Math.abs(deltaY);
+ let absDeltaZ = Math.abs(deltaZ);
+
+ let max = absDeltaX;
+ if(absDeltaY > max){ max = absDeltaY; }
+ if(absDeltaZ > max){ max = absDeltaZ; }
+
+ let lerp = 0.49/max;
+
+ if(lerp <= 1)
+ {
+ return [
+ centerX + deltaX*lerp,
+ centerY + deltaY*lerp,
+ centerZ + deltaZ*lerp
+ ];
+ }
+ else
+ {
+ return [ax, ay, az];
+ }
+ }
let average = (inArray, inPointInd, inOthersIndArray) =>
{
let sum = [0, 0, 0];
@@ -40,26 +73,12 @@ let surfaceTest = () =>
let pointY = inPointInd*3 + 1;
let pointZ = inPointInd*3 + 2;
let reducer = inOthersIndArray.length;
- let limit = (inCenter, inPoint) =>
- {
- var size = 0.49999;
- var limit;
- limit = inCenter - size;
- if(inPoint <= limit)
- {
- return limit;
- }
- limit = inCenter + size;
- if(inPoint >= limit)
- {
- return limit;
- }
- return inPoint;
- }
- inArray[pointX] = limit(Math.round(inArray[pointX]), sum[0]/reducer);
- inArray[pointY] = limit(Math.round(inArray[pointY]), sum[1]/reducer);
- inArray[pointZ] = limit(Math.round(inArray[pointZ]), sum[2]/reducer);
+ let limited = limit(inArray[pointX], inArray[pointY], inArray[pointZ], sum[0]/reducer, sum[1]/reducer, sum[2]/reducer);
+
+ inArray[pointX] = limited[0];
+ inArray[pointY] = limited[1];
+ inArray[pointZ] = limited[2];
};
let smooth = (inVertsArray, inNeighborsArray, inTimes) =>
{
@@ -82,6 +101,7 @@ let surfaceTest = () =>
voxels[Region.I(1, 1, 0)] = true;
voxels[Region.I(0, 2, 0)] = true;
+ /*
voxels[Region.I(0, 0, 1)] = true;
voxels[Region.I(1, 0, 1)] = true;
voxels[Region.I(2, 0, 1)] = true;
@@ -102,6 +122,7 @@ let surfaceTest = () =>
voxels[Region.I(0, 1, 3)] = true;
voxels[Region.I(1, 1, 3)] = true;
voxels[Region.I(0, 2, 3)] = true;
+ */
let surface = Region.Surface(voxels);
@@ -112,18 +133,18 @@ let surfaceTest = () =>
surfaceCubeGeometry.computeVertexNormals(true);
let surfaceCubeObject = new THREE.Mesh(
surfaceCubeGeometry,
- new THREE.MeshBasicMaterial({color:0xaa9900, wireframe:true, side:THREE.DoubleSide, shading:THREE.FlatShading})
+ new THREE.MeshBasicMaterial({color:0x666666, wireframe:true, side:THREE.DoubleSide})
);
- let vertsSmooth = new Float32Array(smooth(surface.vertices.flat(), surface.vertPointNeighbors, 5));
+ let vertsSmooth = new Float32Array(smooth(surface.vertices.flat(), surface.vertPointNeighbors, 10));
let surfaceSmoothGeometry = new THREE.BufferGeometry();
surfaceSmoothGeometry.setAttribute('position', new THREE.BufferAttribute(vertsSmooth, 3) );
surfaceSmoothGeometry.setIndex(surface.triPointVert);
surfaceSmoothGeometry.computeVertexNormals(true);
let surfaceSmoothObject = new THREE.Mesh(
surfaceSmoothGeometry,
- new THREE.MeshPhongMaterial({color:0xffffff, side:THREE.DoubleSide, shading:THREE.FlatShading})
+ new THREE.MeshBasicMaterial({color:0xffffff, wireframe:true, side:THREE.DoubleSide, flatShading:true})
);
@@ -133,13 +154,13 @@ let surfaceTest = () =>
Init(inScene)
{
let light = new THREE.PointLight(0xffffff, 1, 100)
- light.position.set(0, 2, -4);
+ light.position.set(5, 5, -5);
inScene.add(light)
inScene.add(surfaceCubeObject);
inScene.add(surfaceSmoothObject);
- //inScene.add(new THREE.GridHelper(10, 10));
- //inScene.add(new THREE.AxesHelper( 5 ));
+ inScene.add(new THREE.GridHelper(10, 10));
+ inScene.add(new THREE.AxesHelper( 5 ));
},
Update(inScene, inDelta){}
};