【问题标题】:Adding projection matrix to opengl es point sprites particle effect vertex shader将投影矩阵添加到opengl es点精灵粒子效果顶点着色器
【发布时间】:2011-12-14 19:20:28
【问题描述】:

我一直在从 opengl es 2.0 编程指南中学习 opengl es。它们具有看起来像爆炸的粒子效果。我试图通过将 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;

但我没能按我的意愿放置它

我做错了吗?或者这本书没有投影矩阵是有原因的,比如它不应该有人用点精灵做吗?

任何关于我应该研究的帮助或指示将不胜感激

谢谢

编辑:如果您需要我提供更多信息,请告诉我

【问题讨论】:

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


    【解决方案1】:

    如何将整个 gl_Position 乘以模型视图投影矩阵,就像任何普通几何一样?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2012-03-25
      • 2015-04-11
      • 1970-01-01
      相关资源
      最近更新 更多