2016-02-12 87 views
0

在three.js中,我創建了一個黃色的球體來表示太陽。我希望太陽在相機移動時保持固定在天空中相同的相對位置。在three.js中創建一個固定的背景對象

現在,當你移動時,太陽仍然在同一個地方。我創建了一個太陽隨相機移動的版本,但太陽會移動到其他物體的前面。

我想太陽留在背後,在所有其他物體後面;並保持與移動相同的相機位置。

Here是一個鏈接代碼!

回答

0

一個簡單而直觀的解決方案是將太陽移動到天空中,讓場景的視角照顧它。 (請注意,這可能是低效請參閱其他答案替代。)

例如:

// increase sun size to compensate the distance 
var sungeometry = new THREE.SphereGeometry(15.875, 12, 12); 
sun.position.y=200; 
sun.position.z=-200; 

你會看到,太陽移動對相機非常小,但在的後面切實保持現場。您可以嘗試使用大小和距離來獲得所需的效果。

+0

這不是一個好的方法,因爲你必須不必要地擴展你的視錐的範圍,這可能會導致精度問題。這是在視差之上。 – pailhead

1

在Sun辦正在起草「無限遠」從訂單角度來看,即該

mySun.material.depthWrite = false; // to disable writing to the depth buffer 
mySun.renderOrder = -999; // to draw the sun before any other stuff 

第一線需要太陽的照顧。不管它們是否在前面,都會被繪製在太陽之前。

第二行應該照顧最先繪製的太陽(但您可能想要在天空盒之後繪製太陽)。默認情況下,所有的對象都renderOrder == 0,

此時,太陽應該呈現「後面」的一切,但它仍然可以移動,改變大小,看起來像它不是無窮遠。

你要做的下一件事是確保太陽跟隨你的相機,並以實際的視角出現在無窮遠處。您可以通過讓它跟隨攝像頭位置來做到這一點,但不能旋轉。您可以將太陽放入容器中,然後在每次打勾時將相機位置複製到容器位置。您可以將太陽物體放置在該容器內(它與攝像機相對),只要它不被剪切(在你的近距離和遠距離之間),它就可以起作用。