在three.js中,我創建了一個黃色的球體來表示太陽。我希望太陽在相機移動時保持固定在天空中相同的相對位置。在three.js中創建一個固定的背景對象
現在,當你移動時,太陽仍然在同一個地方。我創建了一個太陽隨相機移動的版本,但太陽會移動到其他物體的前面。
我想太陽留在背後,在所有其他物體後面;並保持與移動相同的相機位置。
Here是一個鏈接代碼!
在three.js中,我創建了一個黃色的球體來表示太陽。我希望太陽在相機移動時保持固定在天空中相同的相對位置。在three.js中創建一個固定的背景對象
現在,當你移動時,太陽仍然在同一個地方。我創建了一個太陽隨相機移動的版本,但太陽會移動到其他物體的前面。
我想太陽留在背後,在所有其他物體後面;並保持與移動相同的相機位置。
Here是一個鏈接代碼!
一個簡單而直觀的解決方案是將太陽移動到天空中,讓場景的視角照顧它。 (請注意,這可能是低效請參閱其他答案替代。)
例如:
// increase sun size to compensate the distance
var sungeometry = new THREE.SphereGeometry(15.875, 12, 12);
sun.position.y=200;
sun.position.z=-200;
你會看到,太陽移動對相機非常小,但在的後面切實保持現場。您可以嘗試使用大小和距離來獲得所需的效果。
在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,
此時,太陽應該呈現「後面」的一切,但它仍然可以移動,改變大小,看起來像它不是無窮遠。
你要做的下一件事是確保太陽跟隨你的相機,並以實際的視角出現在無窮遠處。您可以通過讓它跟隨攝像頭位置來做到這一點,但不能旋轉。您可以將太陽放入容器中,然後在每次打勾時將相機位置複製到容器位置。您可以將太陽物體放置在該容器內(它與攝像機相對),只要它不被剪切(在你的近距離和遠距離之間),它就可以起作用。
這不是一個好的方法,因爲你必須不必要地擴展你的視錐的範圍,這可能會導致精度問題。這是在視差之上。 – pailhead