![](/img/trans.png)
[英]Phong material on a .obj model not reacting to area light in three.js
[英]Change obj model material in three.js
我有一個在Blender中創建的帶有UV貼圖的3D模型。 我以僅將紋理應用於模型一側的方式應用了UV貼圖。 我將模型導出為obj
和mtl
。 當我在three.js
上導入此模型時,它會按預期工作,並且加載程序會自動將mtl
文件中定義的圖像用作紋理。
現在,我想在three.js
以編程方式更改此紋理。 該模型具有多種材質(我認為是因為存在多個面孔)。 如何重新應用保持UV貼圖並僅更改所應用紋理的材質? 我想將map
和envMap
應用於模型。
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];
經過反復試驗后,應用m
和m2
位置。 應用了紋理,但最終看起來與原始外觀不同。 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.