未定义的vertexUv警告

Sae*_*ian 12 three.js

我将一个3D模型从sketchup导出到collada并使用Threejs Collada加载器加载它.但我得到以下警告:

THREE.DirectGeometry.fromGeometry(): Undefined vertexUv 2
Run Code Online (Sandbox Code Playgroud)

看来我的collada模型中的一些网格有4个面,但只有2个UV值.关于collada缺少UV值的任何想法?在装载这些模型的Threejs中是否有解决方法?

在threejs库的71版本中,这曾经只是一个警告,但在版本72中,这会在使用pick时导致以下错误:

Uncaught TypeError: Cannot read property '0' of undefined (12:59:20:764 | error, javascript)
    at raycast (public_html/libs/three.js:17237:19)
    at intersectObject (public_html/libs/three.js:7678:10)
    at intersectObject (public_html/libs/three.js:7686:5)
    at intersectObject (public_html/libs/three.js:7686:5)
    at intersectObject (public_html/libs/three.js:7686:5)
    at THREE.Raycaster.intersectObject (public_html/libs/three.js:7734:4)
    at adjustCameraPositionForCollision (public_html/PointerLockControls.js:302:86)
    at update (public_html/PointerLockControls.js:257:14)
    at render (public_html/simbuilding.js:113:24)
Run Code Online (Sandbox Code Playgroud)

小智 0

您可以尝试将 Uvs 分配给您的几何体

  assignUVs(geometry) {
    geometry.computeFaceNormals();
    geometry.mergeVertices();
    geometry.faceVertexUvs[0] = [];
    geometry.faces.forEach((face) => {
      const components = ['x', 'y', 'z'].sort((a, b) => {
        return Math.abs(face.normal[a]) > Math.abs(face.normal[b]);
      });
      const v1 = geometry.vertices[face.a];
      const v2 = geometry.vertices[face.b];
      const v3 = geometry.vertices[face.c];
      geometry.faceVertexUvs[0].push([
        new THREE.Vector2(v1[components[0]], v1[components[1]]),
        new THREE.Vector2(v2[components[0]], v2[components[1]]),
        new THREE.Vector2(v3[components[0]], v3[components[1]])
      ]);
    });
    geometry.uvsNeedUpdate = true;
    return geometry;
  }

Run Code Online (Sandbox Code Playgroud)