使用现代OpenGL的点精灵大小衰减

问题描述 投票:5回答:2

我正在尝试使用点精灵在OpenGL 3+中渲染某些粒子。我刚刚意识到我在这些观点上有重大问题。它们的尺寸会根据相机距离自动增加。结果如下:

靠近粒子发射器:

“

当距离很远时,一切看起来都模糊不清:

“

在旧版本中,似乎可以使用glPointParameter来调整点大小比例。该功能在新的3+ OpenGL中仍然可用,但仅支持两个参数。 glPointParameter看起来像我需要的,但我尝试了一下却没有结果。我也在使用GL_POINT_FADE_THRESHOLD_SIZE

还有其他方法可以避免根据相机距离自动缩放点吗?我宁愿不必更改代码以使用由三角形制成的标准广告牌。

不确定当前是否相关,但这是我正在使用的顶点着色器:

GL_POINT_FADE_THRESHOLD_SIZE
opengl glsl particle-system point-sprites
2个回答
12
投票

因此事实证明,我的问题是由于我对glEnable(GL_PROGRAM_POINT_SIZE);的误解。如评论中所指出并在文档中明确指出的那样,layout(location = 0) in vec4 a_position_size; // Point size in w coord layout(location = 1) in vec4 a_color; // RGBA color modulated with texture layout(location = 0) out vec4 v_color; uniform mat4 u_MVPMatrix; void main() { gl_Position = u_MVPMatrix * vec4(a_position_size.xyz, 1.0); gl_PointSize = a_position_size.w; v_color = a_color; } 包含光栅化点的大小,以像素为单位。因此,一旦我们远离它们,点精灵就会看起来更大,但这不是因为它们正在缩放,而是因为当3D场景的其余部分根据透视投影进行缩放时,它们仍然占据相同的屏幕空间。

我对顶点着色器进行了一些调整,以根据与查看器的距离实际缩放点的大小来解决该问题:

gl_PointSize

5
投票

在将three.js与GLSL一起使用时遇到了同样的问题。根据glampert的答案解决了它,但首先,这三种.js都需要使用某些gl_PointSize

© www.soinside.com 2019 - 2024. All rights reserved.