function updateUV(geometry) { // 据我所知,没有自动计算UV的方法。 // 你必须计算自己。计算一个平面的紫外线是相当容易的,这个网站解释如何:计算纹理坐标 // 对于一个复杂的形状,我不知道如何。也许你可以检测平面。 // 编辑 // 这是一个平面表面的示例代码,(x, y, z)其中z = 0: geometry.computeBoundingBox(); var max = geometry.boundingBox.max, min = geometry.boundingBox.min; var offset = new THREE.Vector2(0 - min.x, 0 - min.y); var range = new THREE.Vector2(max.x - min.x, max.y - min.y); var faces = geometry.faces; if (!geometry.faceVertexUvs) { geometry.faceVertexUvs = [[]]; } geometry.faceVertexUvs[0] = []; for (var i = 0; i < faces.length; i++) { var v1 = geometry.vertices[faces[i].a], v2 = geometry.vertices[faces[i].b], v3 = geometry.vertices[faces[i].c]; geometry.faceVertexUvs[0].push([ new THREE.Vector2((v1.x + offset.x) / range.x, (v1.y + offset.y) / range.y), new THREE.Vector2((v2.x + offset.x) / range.x, (v2.y + offset.y) / range.y), new THREE.Vector2((v3.x + offset.x) / range.x, (v3.y + offset.y) / range.y) ]); } geometry.uvsNeedUpdate = true; }