我将一个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)
答案 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;
}