2011-12-14 44 views
2

我一直在學習opengl es 2.0編程指南中的opengl es。它們具有看起來像爆炸的粒子效應。我試圖通過向頂點着色器添加mat4投影矩陣來增強它們的示例代碼,着色器編譯和工作,但我在獲取將投影考慮在內的位置效果時遇到問題。我的代碼如下所示將投影矩陣添加到opengl es sprites粒子效果頂點着色器

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; 

gl_Position += Projection * u_centerPosition; 

但我有沒有運氣得到它的地方,因爲我想它

難道我做錯了什麼?還是有沒有一個原因,這本書沒有投影矩陣,例如它不是有人應該使用點精靈?

任何幫助或指針我應該考慮可以理解

感謝

編輯的內容:請讓我知道如果你需要從我

回答

0

有關整個GL_POSITION乘以什麼更多信息模型視圖投影矩陣,與任何常規幾何?另外,你可能需要修改計算gl_PointSize的那一行,例如嘗試用gl_Position.w(在與modelview-projection相乘之後)分割它,否則精靈將會有相同的大小(是什麼你正試圖修復?)。