2

私のプログラムは、単純なテクスチャ付き立方体を画面に描画することを目的としていましたが、クリア カラー以外をレンダリングすることはできません。これは私の描画機能です:

    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 から派生しています。残りのコードはここにあります。

この時点で、考えられるほぼすべてのことを試しました。このコードは遠く離れたところにありますか? もしそうなら、なぜ私は画面上にレンダリングするものを手に入れることができないのですか?

4

1 に答える 1

3

あなたは今のところかなりよく見えています。

私が今目にしているのは、DEPTH_TESTが有効になっているが、深度バッファーをクリアしていないことだけです。バッファが適切な値に初期化されたとしても、深度バッファがクリアされていないため、最初のフレーム以降のすべてのフレームに空のシーンが描画されます。

glGetError()それでも問題が解決しない場合は、エラーがないことを確認できますか?エラーをクリーンにするために、未使用のテクスチャリング属性/ユニフォームをクリーンアップする必要があるかもしれませんが、それが私の次のステップになります。

于 2012-08-24T21:13:50.190 に答える