#javascript #three.js
#javascript #three.js
Вопрос:
я хочу получить каркас объекта, из которого он загружается OBJMTLLoder
, поэтому здесь у меня есть код, как показано ниже
var loader = new THREE.OBJMTLLoader();
loader.load( 'obj/male02/male02.obj', 'obj/male02/male02_dds.mtl', function ( object ) {
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh )
{
child.geometry.computeFaceNormals();
var geometry = child.geometry;
console.log(geometry);
geometry.dynamic = true;
material = new THREE.MeshLambertMaterial();
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
var useWireFrame = true;
if (useWireFrame) {
mesh.traverse(function (child) {
if (child instanceof THREE.Mesh) child.material.wireframe = true;
});
}
}
object.position.y = - 80;
scene.add( object );
});
} );
это работает хорошо, и я вижу каркас на моем объекте, к сожалению, здесь мой материал объекта изменен MeshLambertMaterial
. но я хочу получить каркас объекта с загруженным материалом объекта по умолчанию, я могу использовать различные материалы, как в документе threejs, но ни один из них не дает мне результата с материалом объекта по умолчанию
Ответ №1:
я исправил это, добавив child.material для материала, так что вот ответ
loader.load( 'obj/male02/male02.obj', 'obj/male02/male02_dds.mtl', function ( object ) {
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh )
{
//child.geometry.computeFaceNormals();
var geometry = child.geometry;
//console.log(geometry);
//geometry.dynamic = true;
material = child.material;
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
var useWireFrame = true;
if (useWireFrame) {
mesh.traverse(function (child) {
if (child instanceof THREE.Mesh)
{
child.material.wireframe = true;
child.material.color = new THREE.Color( 0x6893DE );
}
});
}
}
object.position.y = - 80;
//scene.add( object );
});
здесь я добавил material = child.material;
как нравится geometry = child.geometry;
, и это сработало нормально