我一直在从 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;
但我没有运气让它按我的意愿放置
难道我做错了什么?或者这本书没有投影矩阵是有原因的,比如它不是有人应该用点精灵做的吗?
任何关于我应该研究的帮助或指示将不胜感激
谢谢
编辑:如果您需要我提供更多信息,请告诉我