将投影矩阵添加到opengl es point sprites粒子效果顶点着色器

时间:2011-12-14 19:20:29

标签: ios opengl-es-2.0 vertex-shader

我一直在学习opengl es 2.0编程指南中的opengl。它们具有看起来像爆炸的粒子效果。我试图通过向顶点着色器添加mat4投影矩阵来增强他们的示例代码,着色器编译并工作,但是我在将效果考虑到投影时遇到问题。我的代码如下

const char* ParticleExplosionVertexShader = STRINGIFY (

uniform float u_time;
uniform vec3 u_centerPosition;
uniform mat4 Projection;
attribute float a_lifetime;
attribute vec3 a_startPosition;
attribute vec3 a_endPosition;
varying float v_lifetime;

void main()
{
    if ( u_time <= a_lifetime )
    {
        gl_Position.xyz = a_startPosition + (u_time * a_endPosition);
        gl_Position.xyz += u_centerPosition;
        gl_Position.w = 1.0;
    }
    else
        gl_Position = vec4( -1000, -1000, 0, 0 );
    v_lifetime = 1.0 - ( u_time / a_lifetime );
    v_lifetime = clamp ( v_lifetime, 0.0, 1.0 );
    gl_PointSize = ( v_lifetime * v_lifetime ) * 40.0;
}

);

我可以将投影添加到该行而没有任何错误,但不幸的是,这并不是真正需要的,因为该代码在其生命周期结束时放置了d = screen的对象

gl_Position = Projection * vec4( -1000, -1000, 0, 0 );

我也尝试过更改行

gl_Position.xyz += u_centerPosition;

gl_Position += Projection * u_centerPosition;

但我没有运气,因为我想要它放置

我做错了吗?或者有没有理由这本书没有投影矩阵,例如它不是某人应该用点精灵做的事情?

任何帮助或指向我应该关注的内容都将不胜感激

由于

编辑:如果您需要我提供更多信息,请与我们联系

1 个答案:

答案 0 :(得分:0)

如何将整个gl_Position乘以模型视图 - 投影矩阵,与任何普通几何相同?

另外,您可能需要修改计算gl_PointSize的行,例如尝试将其除以gl_Position.w(在乘以modelview-projection之后),否则精灵将全部具有相同的大小(就是你的那个)正试图解决?)。