我有一种错误,当我使用OBJMTLLoader而不是OBJLoader时,我无法解释。 我的obj文件包含由不同子网格中的两个加载器加载的组。OBLMTLLoader网格名称为空
我有两个情况下,儿童的场景具有相同数量的孩子的THREE.Object3D的:1837年 然而,当我显示JS控制台该对象和我检查它:
- 为OBJLoader加载的第一个孩子已经得到了id 12,id为每个新网格增加一个,并用id 1848完成。这是有道理的。
- 与OBJMTLLoader相同的对象加载,一些id丢失,实际上第一个孩子有13作为id和最后的孩子有一个id等于5521.例如,这里是5个第一个孩子的ID:13 16 19 22 25
这可能不是问题,但这里是故事的棘手标准,以我的项目为目标,我使用raycaster来改变选定网格的颜色(通过单击它)。我还显示所选网格的名称:
- 使用OBJLoader时,我使用raycaster修改网格的颜色并显示名称没有任何问题。
- 但是使用OBJMTLLoader,我可以毫无困难地更改所选网格的颜色,但是网格的名称是没有任何字符的。
有趣的是,每个网格都有一个很好的名称在两种情况下导入。
唯一令人奇怪的是,当我在OBJLoader的两种情况下显示所选网格的ID时,我可以在js控制台的对象显示中找到此网格列表中的这个id,并且名称与OBJMTLLoader相对应我得到的id在Object3D中是无处可寻的...
有没有人知道问题出在哪里?
非常感谢!
UPDATE:
我已经找到了解决方案的一部分,但仍然有一些奇怪的事情,这里是当我THREE.OBJMTLLoader导入我的3D模型的结构的一个例子:
THREE.Group
[...]
children : Array[1837]
0 : THREE.Object3D
[...]
name : "the name of the part"
children : Array[2]
0: THREE.Mesh
name : ""
children : Array[0]
[...]
1: THREE.Mesh
[...]
[...]
1 : THREE.Object3D
[...]
实际上,raycaster计算与THREE.MESH的交点,并且名称是从该网格的层次n-1存储的。这就是为什么我尝试展示它时没有名字的原因。 但是为什么OBJLoader我的等级n-1不存在相同的模型3D负载?实际上与OBJLoader对象的结构是:
THREE.Group
[...]
children : Array[1837]
0 : THREE.Mesh
[...]
name : "the name of the part"
children : Array[0]
[...]
1 : THREE.Mesh
[...]
所以你说你有一个在搅拌机,最大等创建的网格,然后当你导入一些有身份证和一些不? – Careen
我已更新我的问题。 我认为我的网格来自搅拌机,它是一个.mtl文件中带纹理存储的.obj文件。 id的问题来自这样一个事实,即我在我的文章中发布的更新中所解释的,我没有在我的3D对象的结构中看到由OBJMTLLoader创建的新关卡。 –
我认为这是如何创建obj,我认为网格的子网格没有名称,除非您手动指定一个名称,比如说我有一个字符网格,那么网格就像所有顶点面的容器等,而不是编辑中的im模式并开始在网格中添加其他对象,这些im确定将是无名的... – Careen