我正在尝试使用react-three-fiber-fiber渲染3d对象。我能够导入自定义3d对象,但无法在该对象上应用自定义材料。任何帮助将非常感激。 下面是我到目前为止尝试过的代码
let mat = useLoader(MTLLoader,'/public/IronMan.mtl')
const objec = useLoader(OBJLoader,url, object =>
{
object.setMaterials(mat)
console.log(object)
})
const loader = new OBJLoader();
loader.load(url,
function(obj)
{
console.log("loaded")
// console.log(obj)
});
// const objec = useLoader(OBJLoader,url)
console.log(objec)
loader.setMaterials(mat)
// console.log(loader)
//console.log(mat)
//objec.setMaterials(mat)
//let mtlLoader = new MTLLoader();
//let objLoader = new OBJLoader();
// mtlLoader.load('/public/IronMan.mtl', (materials) => {
// materials.preload()
// objLoader.setMaterials(materials)
// objLoader.load('./test.obj', (object) => {
// scene.add(object)
// })
// })
return (
<mesh material-color='red'>
<primitive object={objec}/>
<meshBasicMaterial attach="material" color="yellow" transparent />
</mesh>
)
答案 0 :(得分:1)
OBJLoader
总是返回THREE.Group
类型的对象,该对象或多或少是用于诸如网格,点或线之类的可渲染项目的容器对象。因此,您不能对其应用材质。
在官方OBJ loader example中,对材料进行了如下修改:
object.traverse( function ( child ) {
if ( child.isMesh ) child.material.map = texture;
} );
除了分配漫反射纹理外,还可以更改整个材质。
three.js R109