簡體   English   中英

在three.js中更改obj模型材料

[英]Change obj model material in three.js

我有一個在Blender中創建的帶有UV貼圖的3D模型。 我以僅將紋理應用於模型一側的方式應用了UV貼圖。 我將模型導出為objmtl 當我在three.js上導入此模型時,它會按預期工作,並且加載程序會自動將mtl文件中定義的圖像用作紋理。

現在,我想在three.js以編程方式更改此紋理。 該模型具有多種材質(我認為是因為存在多個面孔)。 如何重新應用保持UV貼圖並僅更改所應用紋理的材質? 我想將mapenvMap應用於模型。

                       var m = new THREE.MeshPhongMaterial({
                            envMap: cubemap,
                            reflectivity: 0.9
                        });
                        var m2 = new THREE.MeshPhongMaterial({
                            envMap: cubemap,
                            color: parseInt(material.color, 16),
                            reflectivity: 0.9,
                            map: THREE.ImageUtils.loadTexture('/textures/uv_checker large.png')
                        });

                        loadedMesh.material = [m,m,m,m,m,m2,m2,m2,m];

經過反復試驗后,應用mm2位置。 應用了紋理,但最終看起來與原始外觀不同。 II由於我的UV貼圖,我有些地方不應該有紋理,所以我的空白空間很小,甚至沒有紋理。

我該如何處理?

好吧,我找到了辦法。 我不知道這是否適用於所有模型,但我將具有map紋理的所有材質替換為我自定義材質的另一種材質,並將所有其他材質替換為另一種材質。 它運行完美,並且UV Map仍然存在。

var m1 = new THREE.MeshPhongMaterial({map: texture, ...});
var m2 = new THREE.MeshPhongMaterial({...});
for(var n = 0; n < model.material.length; ++n) {
   if(model.material[n].map) model.material[n] = m1;
   else model.material[n] = m2;
}

暫無
暫無

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

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