2016-02-12 91 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,

此时,太阳应该呈现“后面”的一切,但它仍然可以移动,改变大小,看起来像它不是无穷远。

你要做的下一件事是确保太阳跟随你的相机,并以实际的视角出现在无穷远处。您可以通过让它跟随摄像头位置来做到这一点,但不能旋转。您可以将太阳放入容器中,然后在每次打勾时将相机位置复制到容器位置。您可以将太阳物体放置在该容器内(它与摄像机相对),只要它不被剪切(在你的近距离和远距离之间),它就可以起作用。