可以在无限远的地方绘制点或网格吗


  1. 我对使用网格点或粒子系统在THREE.js中绘制星群感兴趣。

  2. 我不希望相机能够更接近明星的任何部分,因为恒星实际上是在无限的距离上。

我可以想出几种方法来做到这一点:

  1. 非常大的网格(或非常大的点/粒子距离(

  2. 摄影机和明星的动作是完全联系在一起的。

是否有任何方法可以指定网格、点或粒子系统在无限距离处自动渲染,以便始终绘制在任何前景对象后面?

我没有使用过three.js,但我的猜测是没有。OpenGL相机需要一个"近剪裁平面"one_answers"远剪裁平面",这两个平面有效地表示了它将在其中渲染事物的最小和最大距离。如果你玩过视频游戏,你离墙太近并开始透过它看,或者看到远处的东西在你离开时突然消失,这些可能是工作中的裁剪平面。

解决方法通常有两种:1( 将远剪裁平面的距离设置为尽可能高。我不知道three.js会使用什么数据类型,但我猜是32位浮点。2( 在"层"中渲染它。先渲染所有星星,然后再渲染场景中的任何其他星星。

选项2是我通常使用的选项。

即使使用了选项1,仍然可以同步摄影机和skybox的位置。

如果不进行深度剔除,请先绘制天空框,并将其位置(但不匹配旋转(与摄影机相匹配。

同时禁用skybox上的照明。相反,将环境直接烘焙到其纹理中。

你不希望事物无限远离,你只希望它们不要相对于观众移动,不要出现在事物面前。做到这一点的最好方法是防止观众靠近他们,从而产生物体远离的错觉。第二件事是修改你的深度剔除功能,这样天空盒子总是被认为比你当前绘制的东西更远。

如果创建了一个非常大的网格对象,则必须将相机的远平面设置为足够大,以包括网格,这意味着您最终将绘制出真正想要剔除的东西。

最新更新