我正在尝试使用可爱的Three.js上传两个OBJ及其相关的MTL文件到WebGL场景中。
我刚刚提出了一个问题,我找不到理由。我在代码中添加了一些全局变量,用于监控加载OBJ和MTL文件时发生的情况。尽管它只是一组文件,但"obj“变量来自"Group”类型,并且它确实有两个“子文件”。正如console.log()所说,它本身不是mesh的实例,而是它的子实例。然而,当我检查孩子的内部时,第一个--由geo测量--只包含顶点,"faces“数组是空的。然而,第二个子节点--通过geo1测量--拥有所有的顶点和面。当你使用obj时,仅仅使用geo1来获得相同的场景就足够了。
我关心的是这背后的逻辑。为什么对于一组OBJ和MTL文件,我们有一个带有两个子对象的对象,其中第一个子对象只有顶点,第二个子对象又有顶点和面。
这对我来说很重要,因为我想要在顶点和面上工作,以获得体素化的体积,这需要在场景对象上进行直接操作。
scapula = new THREE.OBJMTLLoader();
scapula.load('obj/scapulaTWO.obj', 'obj/scapulaTWO.mtl', function (object) {
// var material = new THREE.MeshFaceMaterial(materials);
var material = new THREE.MeshLambertMaterial({
color: 0xFFFF66
});
obj = object; //group
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
console.log(child instanceof THREE.Mesh)
geo[i] = child; //mesh
// apply custom material
child.material = material;
// enable casting shadows
child.castShadow = true;
child.receiveShadow = true;
i = i + 1;
}
});
scene.add(geo[1]);
});发布于 2015-08-09 09:27:57
在被加载程序解析后,您将在对象中找到的内容是由您的模型生成的。
你可以用文本编辑器打开你的*.obj,自己查看群组等。这不像three.js撕开顶点并将它们放在一个单独的组中。
https://stackoverflow.com/questions/31899954
复制相似问题