Three.js-更新Object3D的网格颜色

时间:2019-03-06 21:49:54

标签: javascript three.js

我有一个Three.js Object3D,我想更新它的颜色。

我最初使用MeshStandardMaterial构造Mesh并将其添加到场景中。稍后,我通过ID查找该对象,并从场景中检索Object3D。此时如何更新网格的颜色-可以吗?

如果我必须删除3D对象并添加一个全新的对象-是否可以从Object3D本身检索最初用于构造3D对象的几何?我宁愿不存储原始几何图形到对象ID的映射,因为这会使代码混乱。我可以想到的一种选择是将几何存储在Object3D.UserData上,但这又不是最佳选择,因为当前在其他位置构造了网格-然后将其添加到场景中(用户数据仅在添加到网格中后才可用。场景)。

2 个答案:

答案 0 :(得分:0)

Object3D可以是由MeshGeometry组成的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);
      }
    );