私のプログラムは、単純なテクスチャ付き立方体を画面に描画することを目的としていましたが、クリア カラー以外をレンダリングすることはできません。これは私の描画機能です:
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 を使用) を作成しますが、モデルビューの投影は、遠近法マトリックスに適用された逆カメラ マトリックス (2 倍に移動) にすぎません。ただし、マトリックス変換がなくても、画面に何も表示されません。もともと、2 つの異なる要素インデックス リストを必要とする 2 つの異なるバッファーがありましたが、現在は両方のバッファー (頂点とテクスチャの座標データを含む) が同じ長さで、順番に並んでいます。コード自体は、Durian Software Tutorialと最新の OpenGL Superbible から派生しています。残りのコードはここにあります。
この時点で、考えられるほぼすべてのことを試しました。このコードは遠く離れたところにありますか? もしそうなら、なぜ私は画面上にレンダリングするものを手に入れることができないのですか?