3

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

4

2 回答 2

1

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

于 2016-06-10T18:06:38.077 回答
1

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

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是点的初始大小和最大大小
  • cameraeyevec3相机的世界位置
  • model删除矩阵可能很好。我在我的实现中使用了恒等矩阵的值。
于 2019-01-12T21:03:44.597 回答