THREE.JS 从 OBJ/MTL 文件中加载纹理到一半
THREE.JS loads the textures from an OBJ/MTL file half way
我有从 Cinema 4D
导出的 OBJ、MTL 和纹理图像。设计师给了我一个 ZIP 文件。我试图在 THREE.JS
的帮助下显示它们。我使用以下代码:
var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath('shipka-obj/');
mtlLoader.load('shipka.mtl', function (materials) {
materials.preload();
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials(materials);
objLoader.setPath('shipka-obj/');
objLoader.load('shipka.obj', function (object) {
scene.add(object);
});
});
问题是纪念碑缺少部分:
设计师说我做错了什么,但我看不出是什么?请帮忙!谢谢。
编辑:我已经将包含 obj、mtl 和纹理图像的 zip 上传到 Dropbox。这里有一个link。 https://www.dropbox.com/s/ah8yhjadgihrihr/shipka-obj.zip?dl=0
你没有做错任何事。我看了你的OBJ,看起来建模几何的人犯了一些错误:
面孔:
Three.js只能渲染三边面(三角形)。它理解四边形,它会自动将其细分为三角形,但它不知道如何处理具有五个或更多边的面。给你的 OBJ 的曲面细分很差,有八个、十二个,有时甚至是 20 个面!
如您所见,在 Three.js 中未渲染具有 4 个以上边的面,但四边形和三边形按预期渲染:
我建议您申请一个细分效果更好的网格。要求将其所有面缩小为四边形或三边形以避免此问题。
法线
在下图中,您可以看到您的结构所在的平台具有指向内部的法线:
Three.js 渲染器认为您希望面指向那个方向。这就是为什么你可以看到这个平台远处斜坡的底面,但看不到离相机最近的斜坡底面的原因:
我建议您让您的 3d 美工检查几何体并确保法线全部朝向 向外 而不是向内,这样渲染器就会了解您的面的哪一侧想要渲染。
或者,您可以要求渲染器 render the backside, or both sides of faces,但我不推荐这样做,因为您将整天都在挑选对象。此外,渲染两侧的计算成本更高。
我有从 Cinema 4D
导出的 OBJ、MTL 和纹理图像。设计师给了我一个 ZIP 文件。我试图在 THREE.JS
的帮助下显示它们。我使用以下代码:
var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath('shipka-obj/');
mtlLoader.load('shipka.mtl', function (materials) {
materials.preload();
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials(materials);
objLoader.setPath('shipka-obj/');
objLoader.load('shipka.obj', function (object) {
scene.add(object);
});
});
问题是纪念碑缺少部分:
设计师说我做错了什么,但我看不出是什么?请帮忙!谢谢。
编辑:我已经将包含 obj、mtl 和纹理图像的 zip 上传到 Dropbox。这里有一个link。 https://www.dropbox.com/s/ah8yhjadgihrihr/shipka-obj.zip?dl=0
你没有做错任何事。我看了你的OBJ,看起来建模几何的人犯了一些错误:
面孔:
Three.js只能渲染三边面(三角形)。它理解四边形,它会自动将其细分为三角形,但它不知道如何处理具有五个或更多边的面。给你的 OBJ 的曲面细分很差,有八个、十二个,有时甚至是 20 个面!
如您所见,在 Three.js 中未渲染具有 4 个以上边的面,但四边形和三边形按预期渲染:
我建议您申请一个细分效果更好的网格。要求将其所有面缩小为四边形或三边形以避免此问题。
法线
在下图中,您可以看到您的结构所在的平台具有指向内部的法线:
Three.js 渲染器认为您希望面指向那个方向。这就是为什么你可以看到这个平台远处斜坡的底面,但看不到离相机最近的斜坡底面的原因:
我建议您让您的 3d 美工检查几何体并确保法线全部朝向 向外 而不是向内,这样渲染器就会了解您的面的哪一侧想要渲染。
或者,您可以要求渲染器 render the backside, or both sides of faces,但我不推荐这样做,因为您将整天都在挑选对象。此外,渲染两侧的计算成本更高。