消除云中点之间的间隙 - 随着距离越近,它们越大?

时间:2015-01-09 14:21:23

标签: javascript three.js glsl webgl

当我从远处观察我的点云时,所有点似乎都重叠,给人一种连续表面的印象,这就是我想要达到的效果。但是,当我靠近云时,您可以看到各个点的正方形以及它们之间的间隙。我怎样才能摆脱这些差距呢?例如,当相机变小时,使点尺寸更大?

这是working example。如果按向上箭头放大,最终会看到单个点而不是连续的"云"

顺便说一下 - 如果你想要更多的背景,那么这个问题here会有更详细的版本。

由于

尼尔

1 个答案:

答案 0 :(得分:0)

我已经在the particle vertex shader for my Cubes中完成了这项工作,可能是以不必要的冗长方式。

// Compute pixel scale for points
vec4 testPosition = eyePosition;
testPosition.x = uPixelsPerClipUnit.x / uTileSize * 1.2/*appearance fudge factor*/;
testPosition.y = 0.0;
testPosition = uPMatrix * testPosition;
gl_PointSize = testPosition.x / testPosition.w * animationScale;

这些是您需要提供的变量(以u开头的变量):

  • eyePosition是眼睛空间中的点的位置(即,恰好在应用投影矩阵之前,并且在应用模型/视图矩阵/矩阵之后)。我们实际关心的唯一部分是z轴。

  • uPixelsPerClipUnit是一个vec2,设置为视口像素尺寸的一半 - 它只是从-1到1剪辑空间比例的转换因子像素。

  • uTileSizeanimationScale只是我游戏特有的关于积分应该有多大的参数。他们不需要在两个不同的地方。

  • uPMatrix是投影矩阵。

我们在这里真正做的是获得

的产品
  • 由投影矩阵设置的眼睛空间到剪辑空间比例,在该点的z深度,
  • 剪辑空间到像素比例

并使用它来设置磅值。

(我想提供一个独立的工作示例,但我不认为我会解决它,所以你得到了片段和半生不熟的解释。)< / p>