簡體   English   中英

Three.js - 更新 Object3D 的網格顏色

[英]Three.js - update Mesh Colour of Object3D

我有一個 Three.js Object3D ,我想更新它的顏色。

我最初使用MeshStandardMaterial構建網格並將其添加到場景中。 后來,我通過 ID 查找這個對象並從場景中檢索一個Object3D 此時如何更新網格的顏色 - 可能嗎?

如果我必須刪除 3D 對象並添加一個全新的對象 - 有沒有辦法從Object3D本身檢索最初用於構造它的幾何圖形? 我寧願不存儲原始幾何圖形到對象 ID 的映射,因為這會使代碼變得混亂。 我能想到的一種選擇是將幾何體存儲在Object3D.UserData ,但這又是次優的,因為當前網格是在其他地方構建的 - 然后添加到場景中(用戶數據僅在添加到場景后才可用) .

我找到了一種將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);
      }
    );

Object3D可以是由GeometryMaterial組成的Mesh 如果要更新顏色,只需選擇該材質,並為其指定新顏色:

object.material.color.setHex(0xff9900); // Sets to orange

在文檔中,您可以看到.colorMeshStandardMaterial的屬性,.materialMesh的屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM