我有一个Three.js Object3D
,我想更新它的颜色。
我最初使用MeshStandardMaterial
构造Mesh并将其添加到场景中。稍后,我通过ID查找该对象,并从场景中检索Object3D
。此时如何更新网格的颜色-可以吗?
如果我必须删除3D对象并添加一个全新的对象-是否可以从Object3D
本身检索最初用于构造3D对象的几何?我宁愿不存储原始几何图形到对象ID的映射,因为这会使代码混乱。我可以想到的一种选择是将几何存储在Object3D.UserData
上,但这又不是最佳选择,因为当前在其他位置构造了网格-然后将其添加到场景中(用户数据仅在添加到网格中后才可用。场景)。
答案 0 :(得分:0)
Object3D
可以是由Mesh
和Geometry
组成的Material
。如果要更新颜色,只需选择该材料,然后为其分配新的颜色:
object.material.color.set(0xff9900); // Sets to orange
在文档中,您可以看到.color
is a property of MeshStandardMaterial
和.material
is a property of Mesh
答案 1 :(得分:0)
我找到了将 texture
添加到 Object3D
中的方法。
您可以映射 children
属性以更新网格材料。
function onLoad(object) {
// `children` is an array of `Mesh` than contain 1 or more Meshes
object.children.forEach((mesh) => {
if (!mesh) return;
const material = mesh.material;
material.map = ghostColorTexture;
material.normalMap = ghostNormalTexture;
});
}
const objLoader = new OBJLoader();
objLoader.load(
'/models/ghost/model/ghost.obj',
onLoad,
undefined,
function (error) {
console.error('error', error);
}
);