未定义的vertexUv警告

时间:2015-10-15 17:00:19

标签: three.js

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

THREE.DirectGeometry.fromGeometry(): Undefined vertexUv 2

我的collada模型中的某些网格看起来有4个面,但只有2个UV值。关于collada缺少UV值的任何想法?还有Threejs的解决方法是加载这样的模型吗?

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

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)

1 个答案:

答案 0 :(得分: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;
  }