我將固定函數OpenGL 1.x的代碼庫移植到OpenGL 2.x - 技術上OpenGL ES 2.0,但我仍然在桌面上編碼,只是牢記在心ES 2.0強加的限制類似於3.1'新'配置文件。沒有ftransform的桌面GLSL()
問題是,它看起來像2D以外的其他任何東西,創建一個着色器在modelviewprojection矩陣中傳遞,因爲制服不起作用。通常我會看到一個黑色的屏幕,但是如果我將所有頂點的Z值設置爲0,我會得到一些東西來顯示。
把我的着色器RenderMonkey的工作時,我有ES啓用2.0模式,但在標準桌面GL它只是一個黑色屏幕(沒有編譯器錯誤/警告):
VERT着色器:
uniform mat4 mvp_matrix;
uniform mat4 obj_matrix;
uniform vec4 u_color;
attribute vec3 a_vertex;
attribute vec2 a_texcoord0;
varying vec4 v_color;
varying vec2 v_texcoord0;
void main(void)
{
v_color = u_color;
gl_Position = mvp_matrix * (obj_matrix * vec4(a_vertex, 1.0));
v_texcoord0 = a_texcoord0;
}
FRAG着色器:
uniform sampler2D t_texture0;
varying vec2 v_texcoord0;
varying vec4 v_color;
void main(void)
{
vec4 color = texture2D(t_texture0, v_texcoord0);
gl_FragColor = color * v_color;
}
我傳遞在矩陣作爲glUniformMatrix4fv(位置,如圖1所示,GL_FALSE,mvpMatrix); 這個着色器的工作原理與2D中繪製的任何東西一樣。我在這裏做錯了什麼?或者我需要在桌面GL上使用ftransform()?
什麼是「objMatrix」,它與「mvpMatrix」有什麼不同?這些矩陣的內容是什麼? –
objMatrix是任何繪製的局部變換,而mvpMatrix包含相機(模型視圖)和投影矩陣(模型* proj)的變換。在我的特殊測試中,我已經將objMatrix設置爲Identity。當投影設置爲我的glOrtho替換時,使用所有這些矩陣的轉換在2D中也可以很好地工作。但最大的問題是,我很好奇這個着色器爲什麼在ES 2.0模式下設置RenderMonkey,而不是在桌面上(也沒有編譯器錯誤或警告)。我在想這是我問題的根源。 – user1054922
P.S.我還從我的應用的舊版OpenGL 1.1版本中導出了一個有效的模型&proj矩陣,並將其直接轉儲到OpenGL ES 2.x版本中,但仍然沒有顯示。使我更加確定它是着色器的問題,還是將矩陣傳遞給着色器。 – user1054922