根据 GL_POINT 到相机的距离确定 gl_PointSize

Determine gl_PointSize from distance of a GL_POINT to the camera

我正在绘制 GL_POINTS 使用 glDrawArrays(GL_POINTS, 0, numberOfPoints) 每个点的大小使用 gl_PointSize 在我的顶点着色器中设置。我从 glm::lookAt(origin, eye, up) 获取视图矩阵。在顶点着色器中使用 gl_Position = view * proj * vec4(position, 1.0) 设置点的 xyz 位置。我希望点的大小随着它到相机原点的距离的减小而增加,并且大小随着与相机原点的距离的增加而减小。就像正常的视角一样。如何根据点到相机的距离确定点的大小?

只需将点大小设置为 ref / ptCoord.z,其中 ref 是距离 1.0.

时您想要的点的大小

这是我最近创建的一个顶点着色器来实现这一点。

precision mediump float;
attribute vec3 position;

uniform mat4 model, view, projection;
uniform float pointsize;
uniform vec3 cameraeye;

void main(void) {
    gl_Position = projection * view * model * vec4(position.xyz, 1.0);
    gl_PointSize = pointsize - (distance(cameraeye, position.xyz) / pointsize);
}
  • pointsize 是点的初始大小和最大大小
  • cameraeye 是相机的 vec3 世界位置
  • 删除 model 矩阵可能没问题。我在我的实现中使用恒等值的单位矩阵。