2012-06-28 96 views
0

我用three.js所反對觀看和挑選,我有一個問題的知名度three.js所透明材料:對象並不總是透明

我three.js所 我COLLADA裝載機加載一個COLLADA對象只是一個小與回購的不同。我加

function copyMaterial (_material) { 
    var newMaterial = new THREE.MeshLambertMaterial(); 
    for (var p in _material) { 
     if (_material.hasOwnProperty(p) && p !== "id") { 
      var obj = _material[p]; 
      newMaterial[p] = obj; 
     } 
    } 
    return newMaterial; 
} 

和裝載的材料時,我只是給它分配

這讓我改變的每一個不透明之前將它複製對象分開,即使它們使用相同的COLLADA材料。

This works great。 現在通過這樣做,我現在看到一些奇怪的行爲。 取決於我的對象的方向,某些部分透明或不透明。 截圖將更好地解釋,

we dont see the internal parts

we see the internal parts

什麼發生的事,以及如何解決它的任何想法?

感謝

回答

3

據我所知,這種情況發生在2次:

1)當你有超過1面在同一位置設置,並且一個是可見的,另一種是不。所以在渲染時,它取決於首先渲染的相機角度。

2)當你通常嘗試設置透明的對象的所有部分,但仍然希望能夠通過其他人看到一些面部。再次,這就是渲染器的工作原理。

現在,我已經找到了唯一的解決辦法是分配FrondSide和背面分離材料並把它們設置爲相同的對象(你的對象的一部分,我猜):

texture = new THREE.Texture(textureImage); 
texture.needsUpdate = true; 
material = new THREE.MeshBasicMaterial({ 
    map: texture, 
    transparent: true, 
    side: THREE.BackSide 
}); 
material2 = new THREE.MeshBasicMaterial({ 
    map: texture, 
    transparent: true 
}); 
geometry = new THREE.SphereGeometry(RADIUS, 40, 20); 
mesh = new THREE.Mesh(geometry, material); 
scene.add(mesh); 
mesh = new THREE.Mesh(geometry, material2); 
scene.add(mesh); 

https://github.com/mrdoob/three.js/issues/2476更多關於這個問題的信息

+0

非常感謝Alex的回答。解決方案似乎很重,但至少有一個! – Farfromrefuge