2013-08-24 42 views
1

考慮這個簡單的房子3D模型。它有一個簡單的Cube unwrap應用幾個平鋪紋理。從點光源照明有奇怪的文物在我的模型three.js

enter image description here

當我在它前面添加一個點光源,房子看起來正常,但周圍地面(這是一個大的地形網格的一部分)是未點亮。

enter image description here

屋內網狀,照明被施加滑稽,不知何故與所述頂點而不是計算並正確地添加顏色。請注意如何照明不擴散均勻,但實際上你可以看到一個多邊形有:

enter image description here enter image description here

我想這就是爲什麼龐大的地形網格是忽略了光,是因爲多邊形是非常巨大而且只有幾個頂點。看起來光線需要附近的頂點才能顯示。

這裏是巨大的地形網格的無光照部分: enter image description here

我添加淡淡的道: enter image description here

通知光源放置怎麼不直接旁邊的一個頂點: enter image description here

當我把燈放在靠近頂點時,效果突然變得超強烈 enter image description here

當我把光在中間有勉強的效果 enter image description here

我怎樣才能讓我的模型有均勻的光無處不在,無論模型的大小與它的頂點量?

+0

在底部的圖像,是地形平坦? –

+0

你能提供一個簡單例子的實時鏈接嗎?這種行爲是「MeshLambertMaterial」的症狀。那是你正在使用的? – WestLangley

+0

@WestLangley是的,我正在使用MeshLambertMaterial!我應該用什麼來代替? – Nick

回答

2

找到它最終由於@WestLangley

我之前使用MeshLambertMaterial,現在我切換到PhongMaterial並設置material.perPixel爲true。

另外不要忘記設置material.needsUpdate爲true,如果你動態添加燈! (與我一樣)

+0

另外,對於'lambert'和'phong'在three.js中實現的確切區別,請參見[this answer](http://stackoverflow.com/questions/15801971/three-js-what-is-the-確切差蘭伯特 - 和 - 的Phong之間-/ 15809154#15809154)。 – WestLangley

+0

material.needsUpdate在添加光之後爲我做了。謝謝=] – Hobbes

2

你必須停止做每個頂點照明,並開始做每片段照明。你需要一個片段着色器來獲取點的位置和法線,以及光照位置/方向,並執行各種照明計算。