Three.js threejs线框不适用于OBJMTLLoader
当我使用OBJMTLLoader以三个JS加载我的对象时,线框控件对于OBJLoader是单独工作的,但是对于OBJMTLLoader它不工作Three.js threejs线框不适用于OBJMTLLoader,three.js,Three.js,当我使用OBJMTLLoader以三个JS加载我的对象时,线框控件对于OBJLoader是单独工作的,但是对于OBJMTLLoader它不工作 var loader = new THREE.OBJMTLLoader(); loader.load( 'obj/male02/male02.obj', 'obj/male02/male02_dds.mtl', function ( object ) { object.children[
var loader = new THREE.OBJMTLLoader();
loader.load( 'obj/male02/male02.obj', 'obj/male02/male02_dds.mtl', function ( object ) {
object.children[0].geometry.computeFaceNormals();
var geometry = object.children[0].geometry;
console.log(geometry);
THREE.GeometryUtils.center(geometry);
geometry.dynamic = true;
var material = new THREE.MeshLambertMaterial({color: 0xffffff, shading: THREE.FlatShading, vertexColors: THREE.VertexColors });
mesh = new THREE.Mesh(geometry, material);
scene.add( mesh );
} );
function wireframe(){
//alert('hhhhhh');
mesh.material.wireframe = true;
mesh.material.color = new THREE.Color( 0x6893DE );
}
但它会导致以下错误,因此我的模型不会显示在查看器上,
所以这里我想知道我们可以在任何类型的3d模型上创建线框
对象。子对象[0]。几何体未定义
即使
objmtloader
返回一个THREE.Object3D
对象,该对象没有.children
,也不应假定.children
类型为THREE.Mesh
。因此,为了找到THREE.Mesh
,实际上应该traverse()
三个.Object3D
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh )
// do something with the geometry
} );
Hi@gaitat现在我没有任何错误,但我应用了几何体和网格,但线框仍然不起作用,下面是代码对象。遍历(函数(child){if(child instanceof THREE.mesh){child.geometry.computeFaceNormals();var geometry=child.geometry;geometry.dynamic=true;}); var material=new THREE.MeshLambertMaterial({color:0xffffff,shading:THREE.FlatShading,VertexColor:THREE.VertexColor});网格=新的三个网格(几何体、材质);场景。添加(网格);在
traverse()
函数内定义几何体
,然后在函数外使用它。这是一个范围问题。如果我在内部遍历()上使用几何体,我会得到相同的结果,如果(三个.Mesh的子实例){child.geometry.computeFaceNormals();var geometry=child.geometry;console.log(geometry);geometry.dynamic=true;var material=new THREE.MeshLambertMaterial();网格=新的三个。网格(几何体、材质);};在此JSFIDLE中,您可以更改useWireFrame
的值以查看效果。最初,我为球体设置了材质,然后使用traverse()
将该材质更改为线框。嘿,这很好,非常感谢您的回答,这里我们使用了MeshNormalMaterial,我们可以使用线框对象上使用的默认材质吗??