2011-12-14 9 views
2

私はopengl es 2.0プログラミングガイドからopenglを学びました。彼らは爆発のような粒子効果を持っています。頂点シェーダにmat4投影行列を追加することでサンプルコードを拡張しようとしていますが、シェーダはコンパイルして動作しますが、投影を考慮して位置を決めるのに問題があります。OpenGL esポイントに投影行列を追加するスプライト粒子効果の頂点シェーダ

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 =画面のオブジェクトを配置しているとして本当に必要ないのは、次のように私が持っているコードです。その寿命

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

は、私はまた、

にライン

gl_Position.xyz += u_centerPosition; 

を変更しようとしています

しかし、私は、私はそれが

私が何か間違ったことをやってほしいと、それは置いてもらう運がなかったですか?それとも、誰かがポイントスプライトで行うべきでないような投影行列を持っていないという理由がありますか?私はにどうあるべきかに

すべてのヘルプやポインタは

おかげ

編集理解されるであろう:あなたは私からより多くの情報が必要な場合は私に知らせてください

答えて

0

をすることによって、全体gl_Positionを掛けるについてモデルビュー投影行列は、どんな通常のジオメトリと同様ですか?

また、gl_PointSizeを計算する行を変更する必要があるかもしれません。たとえば、gl_Position.w(モデルビュープロジェクションによる乗算後)で分割するなどです。そうでなければ、スプライトはすべて同じサイズになりますあなたは修正しようとしていますか?)。

関連する問題