我正在尝试使用点精灵用 OpenGL 3+ 渲染一些粒子。我刚刚意识到我的观点存在重大问题。它们的大小会根据相机距离自动增加。结果如下:
靠近粒子发射器:
而在远处,一切都显得模糊而臃肿:
在旧版本中,似乎可以使用glPointParameter
. 该函数在新的 3+ OpenGL 中仍然可用,但它只支持两个参数。GL_POINT_FADE_THRESHOLD_SIZE
似乎是我需要的,但我尝试过没有结果。我也在使用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;
}