2015-06-23 89 views
0

我試圖渲染基本三角形,即時建立視象這樣:使用OpenGL ES的怪座標

GL.Viewport(0, 0, (uint)Width, (uint)Height); 

林頂點着色器:

precision highp float; 
attribute highp vec2 a_pos; 
attribute vec3 a_col; 

varying vec3 v_col; 
void main() 
{ 
    v_col=a_col; 
    gl_Position = vec4(a_pos,0,0); 
} 

和片段着色器:

varying highp vec3 v_col; 
void main() 
{ 
    gl_FragColor = vec4(v_col,0); 
} 

但是當我嘗試使用簡單的座標繪製像

0,0,0 
0,1,0 
1,0,0 

屏幕右上部分被填滿。

我必須用座標的極端範圍,以在屏幕上得到三角:

0,0,0 
0,0.00000000000000000005f,0 
0.00000000000000000005f,0,0 

我不知道爲什麼。我使用C#所以浮動應該是32位像opengl es的用途。 視口設置正確。

從我的理解,我指定座標在規範化的設備座標系統,在兩個軸上從-1到1。我不知道爲什麼這麼緊張。

回答

0

好的,知道了。

當我將gl_Position中的最後一個座標指定爲0時,我犯了一個錯誤。 座標由最後一個值劃分了OpenGL內部裁減過程,以幫助透視變換的一部分,改變它後

gl_Position = vec4(a_pos,0.0,1.0); 

一切都按預期工作。

+0

請注意,如果使用嚴格執行標準的GLSL編譯器(其中一些供應商執行,其他供應商不執行),則此着色器代碼不會與ES 2.0一起編譯。整數常量不會自動轉換爲浮點型。因此,無論您目前使用「0」還是「1.0」,而不是「1」,都必須使用「0.0」。 –