好吧,我已经在这个问题上停留了一段时间,所以我在这里。
我有一个.obj
由我的一位同事创建的文件,我需要将其加载到 three.js 场景中。我需要能够更改所述对象的各个部分的材料和纹理。只有当我尝试.obj
在 three.js 中加载它并记录我加载的对象时,我才注意到它被合并到 1 个网格中。
我一直在寻找这个问题的答案,但我什至没有找到和我有同样问题的人。我目前正在加载.obj
,它是.mtl
这样的:
loadMTL = (mtlLoader, mtlPath, texPath, loader, objPath) => {
mtlLoader.load(
mtlPath,
mat => {
mat.preload();
loader.setMaterials(mat);
loader.load(
objPath,
object => {
console.log(object);
this.scene.add(object);
},
// called when loading is in progresses
function(xhr) {
// console.log("Obj - " + (xhr.loaded / xhr.total) * 100 + "% loaded");
},
// called when loading has errors
function(error) {
console.log("An error happened loading an OBJ");
console.log(error);
}
);
},
// called when loading is in progresses
function(xhr) {
// console.log("Mat - " + (xhr.loaded / xhr.total) * 100 + "% loaded");
},
// called when loading has errors
function(error) {
console.log("An error happened loading a MTL");
console.log(error);
}
);
};
我使用的 OBJLoader 是 Three.js OBJLoader,而不是 OBJLoader2。生成的日志输出如下:
Group {uuid: "DCA4C797-A66E-4007-ADAF-C4060FD9D886", name: "", type: "Group", parent: null, children: Array(1), …}
castShadow: false
children: Array(1)
0: Mesh {uuid: "76EA3F31-CB49-4D5F-A95C-B45A751DFBBE", name: "Kamer", type: "Mesh", parent: Group, children: Array(0), …}
length: 1
__proto__: Array(0)
frustumCulled: true
layers: Layers {mask: 1}
materialLibraries: ["Kastje1_test.mtl"]
matrix: Matrix4 {elements: Array(16)}
matrixAutoUpdate: true
matrixWorld: Matrix4 {elements: Array(16)}
matrixWorldNeedsUpdate: false
name: ""
parent: null
position: Vector3 {x: 20, y: 0, z: 0}
quaternion: Quaternion {_x: -0.7071067811865475, _y: 0, _z: 0, _w: 0.7071067811865476, _onChangeCallback: ƒ}
receiveShadow: false
renderOrder: 0
rotation: Euler {_x: -1.5707963267948966, _y: 0, _z: 0, _order: "XYZ", _onChangeCallback: ƒ}
scale: Vector3 {x: 33, y: 70, z: 55}
type: "Group"
up: Vector3 {x: 0, y: 1, z: 0}
userData: {}
uuid: "DCA4C797-A66E-4007-ADAF-C4060FD9D886"
visible: true
eulerOrder: (...)
id: 20
modelViewMatrix: Matrix4 {elements: Array(16)}
normalMatrix: Matrix3 {elements: Array(9)}
useQuaternion: (...)
__proto__: Object3D
如您所见,Group 只有 1 个子 Mesh。该网格本身没有更多的孩子。问题是我需要重新纹理对象的某些部分,因为它只有 1 个网格,并且说网格只能有 1 个纹理,据我所知,我不知道如何进行。我缺少一些 Three.js 的基本概念吗?
编辑:
经过一番搜索,我们发现出了什么问题:显然我的同事只在.obj
文件中定义了一个组。我们修复了.obj
文件,现在我确实得到了不同的网格。