我的程序是爲了在屏幕上繪製一個簡單的紋理立方體,但是,我無法讓它呈現除了清晰顏色以外的其他任何東西。這是我的繪製函數:OpenGL問題:無法在屏幕上渲染幾何圖形
void testRender() {
glClearColor(.25f, 0.35f, 0.15f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUniformMatrix4fv(resources.uniforms.m4ModelViewProjection, 1, GL_FALSE, (const GLfloat*)resources.modelviewProjection.modelViewProjection);
glEnableVertexAttribArray(resources.attributes.vTexCoord);
glEnableVertexAttribArray(resources.attributes.vVertex);
//deal with vTexCoord first
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,resources.hiBuffer);
glBindBuffer(GL_ARRAY_BUFFER, resources.htcBuffer);
glVertexAttribPointer(resources.attributes.vTexCoord,2,GL_FLOAT,GL_FALSE,sizeof(GLfloat)*2,(void*)0);
//now the other one
glBindBuffer(GL_ARRAY_BUFFER,resources.hvBuffer);
glVertexAttribPointer(resources.attributes.vVertex,3,GL_FLOAT,GL_FALSE,sizeof(GLfloat)*3,(void*)0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, resources.htextures[0]);
glUniform1i(resources.uniforms.colorMap, 0);
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, (void*)0);
//clean up a bit
};
另外,這裏是頂點着色器:
#version 330
in vec3 vVertex;
in vec2 vTexCoord;
uniform mat4 m4ModelViewProjection;
smooth out vec2 vVarryingTexCoord;
void main(void) {
vVarryingTexCoord = vTexCoord;
gl_Position = m4ModelViewProjection * vec4(vVertex, 1.0);
};
和片段着色器(我已經放棄了紋理現在):
#version 330
uniform sampler2D colorMap;
in vec2 vVarryingTexCoord;
out vec4 vVaryingFragColor;
void main(void) {
vVaryingFragColor = texture(colorMap, vVarryingTexCoord);
vVaryingFragColor = vec4(1.0,1.0,1.0,1.0);
};
位置座標的頂點數組緩衝區構成一個簡單的立方體(所有座標都是帶符號的0.25),而模型視圖投影只是應用於視角的逆攝像機矩陣(向後移動兩倍) ve矩陣。但是,即使沒有矩陣轉換,我也無法在屏幕上看到任何東西。最初,我有兩個不同的緩衝區,需要兩個不同的元素索引列表,但現在兩個緩衝區(包含頂點和紋理座標數據)的長度和順序相同。代碼本身來自Durian Software Tutorial和最新的OpenGL Superbible。其餘的代碼是here。
在這一點上,我嘗試了幾乎所有我能想到的。這段代碼是否遠程關閉?如果是這樣,爲什麼我不能在屏幕上顯示任何東西?
你說得對,它是深度緩衝區。關於glGetError;我以前曾經通過一些OpenGL調試器來運行這個錯誤,並且沒有任何結果。但是,它也顯示深度緩衝區完全是「黑色」。深度緩衝區是否始終以這種方式初始化? – Louie
如果初始值已定義,我並不積極,但您可以使用glClearDepth設置清除值。默認值爲1,這意味着在清除之後,任何深度小於1的東西(全部)將通過深度測試。如果你說緩衝區是黑色的,那聽起來像是0的值,這意味着什麼都不能通過深度測試。這聽起來與你所看到的一致。 – Tim