可以在无限远处绘制点或网格吗?

时间:2016-08-04 23:37:43

标签: three.js

  1. 我有兴趣使用网格点或粒子系统在THREE.js中绘制一个stardome。

  2. 我不希望相机能够靠近星球的任何部分移动,因为恒星实际上处于无限距离。

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

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

    2. 相机和stardome的动作完全相关。

    3. 有没有办法指定一个网格,点或粒子系统是在无限距离自动渲染的,所以它总是被绘制在任何前景对象后面?

2 个答案:

答案 0 :(得分:0)

我还没有使用过three.js,但我的猜测是否定的。 OpenGL相机需要一个"近剪裁平面"和#34;远剪裁平面",它有效地表示它将渲染内容的最小和最大距离。如果你已经玩了太靠近墙壁的视频游戏并开始透过它看,或看到远处的东西突然消失,当你离开时,那些可能是工作中的剪裁平面。

解决方法通常是以下两种方式之一: 1)将远剪裁平面距离设置为高,让它离开。我不知道three.js会使用什么数据类型,但我的猜测是32位浮点数。 2)在"层"中渲染它。在场景中的任何其他内容之前首先渲染所有星星。

答案 1 :(得分:0)

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

即使您使用选项1,您仍然会同步相机和天空盒的位置。

如果您没有深度剔除,请首先绘制天空盒并将其位置与相机匹配,但不要旋转。

同时禁用天空盒上的照明。相反,将氛围直接烘焙到其纹理中。

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

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