gpt4 book ai didi

javascript - 带有对象 Material 的threejs线框

转载 作者:行者123 更新时间:2023-11-30 12:41:16 25 4
gpt4 key购买 nike

我想获取从 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 );

});

} );

效果很好,我可以看到对象上的线框,不幸的是,这里我的对象 Material 已更改为 MeshLambertMaterial。但是我想获取加载了对象默认 Material 的对象的线框,我可以使用 threejs 文档中的各种 Material ,但没有一个给我使用默认对象 Material 的结果

最佳答案

我通过为 material 添加 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; 并且效果很好

关于javascript - 带有对象 Material 的threejs线框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24379720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com