2012-09-12 59 views
1

我有一個簡單的室內場景,我從攪拌機中導出。它有一個房間,天花板上有3個球體,裏面有相應的光源。每個燈都獨立工作,但是當我將它們全部插入場景中時,其中只有一個能夠正常工作!有時和2一起工作,但從來不與三個人一起工作。 這裏是我的燈代碼:燈光問題(使用three.js)

luz_sala1 = new THREE.PointLight(0xFFFFFF,0.5, 50.0); 
luz_sala1.position = new THREE.Vector3(16.14323,2.52331,13.93375); 
scene.add(luz_sala1); 

luz_sala2 = new THREE.PointLight(0xFFFFFF, 0.5, 50.0); 
luz_sala2.position = new THREE.Vector3(27.70114,2.52331,-6.20571); 
scene.add(luz_sala2); 

luz_sala3 = new THREE.PointLight(0xFFFFFF, 0.5, 50.0); 
luz_sala3.position = new THREE.Vector3(21.50580,3.10719,-27.82775); 
scene.add(luz_sala3); 

如果我的距離設定爲0,它工作得很好,但我需要這些燈隻影響他們在該地區 我也試過有三個。 Spotlight(0xFFFFFF,0.5,50.0,Math.PI,0)但結果相同。 當它們以某種方式分享相同的距離時,它看起來像燈互相否定?

請幫忙,這很混亂。編輯:另外,我有一些聚光燈模型的房間的另一部分(我有他們約4人),但我得到着色器編譯錯誤,當我添加到場景4多聚光燈。在搜索問題後,我看到我需要在渲染器中設置maxLights屬性。我將它設置爲10,但問題仍然存在,現場不能有超過4個燈。還有什麼我可以做的嗎?

編輯2:這裏有一些圖像。作爲參考,「luz_sala1」是離電視更近的那個,「luz_sala2」是中間一個,而「luz_sala3」是更遠的一個。

這一個是與上面的代碼(所有3燈),除了0.8強度。 http://www.mediafire.com/view/?s85qr4rplhort29

這是與2和3開啓(評論了 「scene.add(luz_sala1);」): http://www.mediafire.com/view/?83qbbua9f8ee3b4

所以,你可以看到,2點燈很好地協同工作,但是有3個,他們似乎「加起來」到第一個?

+0

你在使用什麼操作系統? – mrdoob

+0

我嘗試了兩臺機器,一臺使用Windows 7與ATI HD5850,另一臺使用Windows XP(無法重新裝載卡),兩者都發生同樣的事情。我可以嘗試上傳,但代碼非常大。我會很快發佈一些圖片。 – CoreyTaylor

+0

發佈2個圖片。同樣的事情發生,如果燈是Spotlights而不是PointLights。 – CoreyTaylor

回答

0

maxLight屬性沒有任何效果很可能是由於您的硬件,驅動程序或ANGLE(將WebGL轉換爲Direct3D的庫)在着色器中不支持足夠多的變化向量 - 每個燈都需要一個或多個其他參數。這可能也是你的一般問題的背景。

爲了有更多的燈有三種選擇:

  1. 嘗試,如果它幫助,如果你讓你的瀏覽器更喜歡ANGLE本地的OpenGL(谷歌的說明)。確保你已經安裝了最新的OpenGL驅動程序。
  2. 實現延遲渲染器。這在桌面世界中現在非常普遍,但由於幀緩衝區的限制,如果不是不可能在WebGL中實現良好的性能,那就很棘手。
  3. 實現一個燈管理器,只使用一些燈,禁用其餘的燈。最簡單,儘管遠非完美的方法是選擇距離相機最近的燈。

另外值得一提的是,目前SpotLights只是將陰影投射到一個方向的PointLights。