从 GL_POINT 到相机的距离确定 gl_PointSize
Posted
技术标签:
【中文标题】从 GL_POINT 到相机的距离确定 gl_PointSize【英文标题】:Determine gl_PointSize from distance of a GL_POINT to the camera 【发布时间】:2016-06-10 17:21:45 【问题描述】:我正在使用 GL_POINTS 绘制
glDrawArrays(GL_POINTS, 0, numberOfPoints)
每个点的大小在我的顶点着色器中使用gl_PointSize
设置。我从glm::lookAt(origin, eye, up)
获取视图矩阵。在顶点着色器中使用gl_Position = view * proj * vec4(position, 1.0)
设置点的xyz 位置。我希望点的大小随着与相机原点的距离的减小而增加,并且随着与相机原点的距离的增加而减小。就像正常的视角一样。我如何确定一个点的大小,从它到相机的距离?
【问题讨论】:
这取决于。你想要它有多大?这里没有正确的答案;你的问题不是很具体。 编辑了问题。 【参考方案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
是点的初始大小和最大大小
cameraeye
是 vec3
相机的世界位置
可以删除model
矩阵。我在实现中使用恒等矩阵值。
【讨论】:
很好,但是如何处理相机视野,因为如果我改变视野,点大小仍然相同,但看到的其他物体会改变,谢谢 @Abojemyeg 好问题。我认为您可以从view
矩阵中提取近或远值,然后将其添加到点大小方程中。
能否请您用新方程式更新答案,因为我什至不明白远近与视野的关系,甚至视野如何影响屏幕上的对象大小跨度>
【参考方案2】:
只需将点大小设置为ref / ptCoord.z
,ref
是距离1.0
时所需的点大小。
【讨论】:
请注意,点具有实现定义的最大大小。以上是关于从 GL_POINT 到相机的距离确定 gl_PointSize的主要内容,如果未能解决你的问题,请参考以下文章