From c531a2c89cf7150419b119dc7fddcd4f183e2a00 Mon Sep 17 00:00:00 2001 From: kovacsv Date: Wed, 9 Feb 2022 19:51:40 +0100 Subject: [PATCH] Attribute item size is not used when converting a three.js mesh #214 --- source/engine/threejs/threeutils.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/source/engine/threejs/threeutils.js b/source/engine/threejs/threeutils.js index 03f631a..e50c25e 100644 --- a/source/engine/threejs/threeutils.js +++ b/source/engine/threejs/threeutils.js @@ -106,7 +106,8 @@ export function ConvertThreeGeometryToMesh (threeGeometry, materialIndex) let mesh = new Mesh (); let vertices = threeGeometry.attributes.position.array; - for (let i = 0; i < vertices.length; i += 3) { + let vertexItemSize = threeGeometry.attributes.position.itemSize || 3; + for (let i = 0; i < vertices.length; i += vertexItemSize) { let x = vertices[i]; let y = vertices[i + 1]; let z = vertices[i + 2]; @@ -116,8 +117,8 @@ export function ConvertThreeGeometryToMesh (threeGeometry, materialIndex) let hasVertexColors = (threeGeometry.attributes.color !== undefined); if (hasVertexColors) { let colors = threeGeometry.attributes.color.array; - let itemSize = threeGeometry.attributes.color.itemSize; - for (let i = 0; i < colors.length; i += itemSize) { + let colorItemSize = threeGeometry.attributes.color.itemSize || 3; + for (let i = 0; i < colors.length; i += colorItemSize) { let threeColor = new THREE.Color (colors[i], colors[i + 1], colors[i + 2]); mesh.AddVertexColor (ConvertThreeColorToColor (threeColor)); } @@ -126,7 +127,8 @@ export function ConvertThreeGeometryToMesh (threeGeometry, materialIndex) let hasNormals = (threeGeometry.attributes.normal !== undefined); if (hasNormals) { let normals = threeGeometry.attributes.normal.array; - for (let i = 0; i < normals.length; i += 3) { + let normalItemSize = threeGeometry.attributes.normal.itemSize || 3; + for (let i = 0; i < normals.length; i += normalItemSize) { let x = normals[i]; let y = normals[i + 1]; let z = normals[i + 2]; @@ -137,7 +139,8 @@ export function ConvertThreeGeometryToMesh (threeGeometry, materialIndex) let hasUVs = (threeGeometry.attributes.uv !== undefined); if (hasUVs) { let uvs = threeGeometry.attributes.uv.array; - for (let i = 0; i < uvs.length; i += 2) { + let uvItemSize = threeGeometry.attributes.uv.itemSize || 2; + for (let i = 0; i < uvs.length; i += uvItemSize) { let x = uvs[i]; let y = uvs[i + 1]; mesh.AddTextureUV (new Coord2D (x, y));