我有以下頂點着色器:OpenGL的頂點着色器運行時問題(不使用維也納組織或紋理)
uniform mat4 uMVP;
attribute vec4 aPosition;
attribute vec4 aNormal;
attribute vec2 aTexCoord;
varying vec2 vTexCoord;
varying vec4 vPrimaryColor;
void main() {
gl_Position = uMVP * aPosition;
vPrimaryColor = vec4(1.0, 1.0, 1.0, 1.0);
vTexCoord = aTexCoord;
}
而下面的片段着色器:
uniform sampler2D sTex;
varying vec2 vTexCoord;
varying vec4 vPrimaryColor;
void main() {
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
}
注意的是,雖然我有一個vTexCoord和vPrimaryColor,它們都不用於片段着色器。 (他們之所以存在,是因爲他們最終會成爲)。
現在,我還設置uMVP爲單位矩陣現在,用下面的代碼繪製:
// Load the matrix
glUniformMatrix4fv(gvMVPHandle, 1, false, &mvPMatrix.matrix[0][0]);
// Draw the square to be textured
glVertexAttribPointer(gvPositionHandle, 2, GL_FLOAT, GL_FALSE, 0, gFullScreenQuad);
glEnableVertexAttribArray(gvPositionHandle);
glVertexAttribPointer(gvTexCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, gFullScreenQuad);
glDrawArrays(GL_QUADS, 0, 4);
其中方是:
const GLfloat PlotWidget::gFullScreenQuad[] = { -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f};
所以,當我運行這個程序,我得到一個黑屏。這看起來不像你所期望的。但是,當我改變在樹蔭行:
vTexCoord = aTexCoord;
要
vTexCoord = vec2(1.0, 1.0);
它完美。所以我會假設代碼的問題在於那行代碼,但我想不出任何會導致這種情況的opengl。另外,我爲這個項目使用了Qt,這意味着這個類正在使用QGLWidget。我從來沒有遇到OpenGL ES 2.0的這個問題。
有什麼建議嗎?
我很抱歉模糊的標題,但我甚至不知道這會是什麼類型的問題。
哪個GL版本? –
我相信我正在使用2.1,但我使用的是任何版本的Ubuntu 11.10使用(或QT,如果它明確使用不同的版本) –
不知道這是你的問題,但你已經定義你的位置屬性爲vec4在你的着色器,但您只能通過glVertexAttribPointer爲該屬性傳遞兩個組件。它可能不會傷害任何東西,但我敢打賭它會在某些時候咬你;) –