diff --git a/examples/clip/index.html b/examples/clip/index.html
index 08f8a6a..724adb9 100644
--- a/examples/clip/index.html
+++ b/examples/clip/index.html
@@ -34,63 +34,62 @@
function _clipMeshRgb(mesh, xMin, yMin, xMax, yMax) {
const geom = mesh.geometry;
- //console.log('!! geom.parameters:', geom.parameters);
const { heightSegments, widthSegments } = geom.parameters;
const position = geom.attributes.position;
+ const uv = geom.attributes.uv;
const arr = position.array;
-
- //
+ const uvArr = uv.array;
const [ xMeshMin, yMeshMin, xMeshMax, yMeshMax ] =
- [ arr[0], arr[arr.length-2], arr[arr.length-3], arr[1] ];
- //console.log('!! xMeshMin, yMeshMin, xMeshMax, yMeshMax:', xMeshMin, yMeshMin, xMeshMax, yMeshMax);
- //console.log('!! xMin, yMin, xMax, yMax:', xMin, yMin, xMax, yMax);
+ [ arr[0], arr[arr.length-2], arr[arr.length-3], arr[1] ];
if (xMin < xMeshMin && xMeshMax < xMax && yMin < yMeshMin && yMeshMax < yMax) {
console.log('_clipMeshRgb(): all verts inside the bbox, skipping mesh:', mesh.name);
return;
}
- //
-
const hVerts = heightSegments + 1;
const wVerts = widthSegments + 1;
const rowsBbox = [];
+ const uvRowsBbox = [];
for (let j = 0; j < hVerts; j++) {
const row = [];
+ const uvRow = [];
- let idx, x, y, z;
for (let i = 0; i < wVerts; i++) {
- idx = 3 * (j * wVerts + i);
- x = arr[idx];
- y = arr[idx + 1];
- z = arr[idx + 2];
- if (xMin < x && x < xMax && yMin < y && y < yMax) { // inside bbox
+ const idx = 3 * (j * wVerts + i);
+ const uvIdx = 2 * (j * wVerts + i);
+ const x = arr[idx];
+ const y = arr[idx + 1];
+ const z = arr[idx + 2];
+ if (xMin <= x && x <= xMax && yMin <= y && y <= yMax) { // inside or on bbox
row.push(x, y, z);
+ uvRow.push(uvArr[uvIdx], uvArr[uvIdx + 1]);
}
}
if (row.length > 0) {
rowsBbox.push(row);
+ uvRowsBbox.push(uvRow);
}
}
const hVertsBbox = rowsBbox.length;
- const wVertsBbox = rowsBbox[1].length / 3;
+ const wVertsBbox = rowsBbox[0].length / 3;
- //
+ const arrBbox = rowsBbox.flat();
+ const uvArrBbox = uvRowsBbox.flat();
- const arrBbox = [];
- rowsBbox.forEach(row => arrBbox.push(...row));
if (hVertsBbox * wVertsBbox * 3 !== arrBbox.length) {
- throw new Error(`oops while processing ${mesh.name}`);
+ throw new Error(`Unexpected array length while processing ${mesh.name}`);
}
- const geomBbox = new THREE.PlaneBufferGeometry(1, 1, wVertsBbox - 1, hVertsBbox - 1);
- geomBbox.attributes.position.array = new Float32Array(arrBbox);
+ const geomBbox = new THREE.PlaneGeometry(1, 1, wVertsBbox - 1, hVertsBbox - 1);
+ geomBbox.setAttribute('position', new THREE.Float32BufferAttribute(arrBbox, 3));
+ geomBbox.setAttribute('uv', new THREE.Float32BufferAttribute(uvArrBbox, 2));
+ mesh.geometry.dispose();
mesh.geometry = geomBbox;
- position.needsUpdate = true;
}
//-------- ****