【发布时间】:2017-04-19 15:36:21
【问题描述】:
我需要帮助才能在 three.js 中正确渲染 UV 纹理。我在 Blender 中创建了一个具有重复瓷砖纹理的模型。平铺纹理是使用 UV 映射应用的,如果渲染正确,它看起来像这样: Render image using Blender .然而,当它由three.js使用JSONLoader加载时,瓷砖只是被拉伸以填充每个多边形,产生如下奇怪的结果:Screenshot of render using three.js .我尝试在我的代码中设置 THREE.RepeatWrapping 但没有任何改变:
bodyLoader = new THREE.JSONLoader();
bodyLoader.load('./starofthesea_threejs.json', function(geometry, materials) {
mainBodyMaterials = new THREE.MeshFaceMaterial(materials);
console.log(materials);
mainBodyMaterials.wrapS = THREE.RepeatWrapping;
mainBodyMaterials.wrapT = THREE.RepeatWrapping;
mainBodyMaterials.needsUpdate = true;
mainBody = new THREE.Mesh(geometry, mainBodyMaterials);
mainBody.traverse ( function (child) {
if (child instanceof THREE.Mesh) {
child.castShadow = true;
child.receiveShadow = true;
}
});
mainBody.scale.x = mainBody.scale.y = mainBody.scale.z = 1;
geometry.computeBoundingBox();
geometry.computeFaceNormals();
geometry.computeFlatVertexNormals();
scene.add(mainBody);
});
我的代码中是否有任何问题,或者解决方法以使其正确呈现?非常感谢所有帮助。
【问题讨论】:
-
想一想,是否需要设置mainBodyMaterials.repeat.set(10, 10);纹理是否需要为 2 宽高的幂?
-
在材质上设置重复只会引发“未定义”错误,并且纹理的所有维度都已设置为 2 的幂