1

OpenGL ES 1.1 テクスチャを作成しようとしていますが、塗りつぶしはレンダリングされたコンテンツです。

テクスチャの準備:

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

GLuint texFrambuffer;
glGenFramebuffers(1, &texFrambuffer);
glBindFramebuffer(GL_FRAMEBUFFER, texFrambuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER) ;
if(status != GL_FRAMEBUFFER_COMPLETE) {
    NSLog(@"failed to make complete framebuffer object %x", status);
    // this message doesn't appear, thus, framebuffer is complete
}

glViewport(0, 0, 32, 32);

glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

GLfloat vertices[] = {
    10.0f, 10.0f, 0.0f,
    20.0f, 40.0f, 0.0f,
    10.0f, 30.0f, 0.0f
};
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);

glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDeleteFramebuffers(1, &texFrambuffer);

シーンへのテクスチャのレンダリング:

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
GLshort texCoord[] = {0, 0, 0, 1, 1, 0, 1, 1};
GLfloat vertices2[] = {0.0, 0.0, 0.0, 31.0f, 31.0f, 0.0f, 31.0f, 31.0f};
glVertexPointer(2, GL_FLOAT, 0, vertices2);
glTexCoordPointer(2, GL_SHORT, 0, texCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_TEXTURE_2D);

完全なソース コードは Bitbucket で入手できます: https://bitbucket.org/amjaliks/gl2/src/66ee4932e212/GL2/GL2View.m

他のコンテンツは正しくレンダリングされます。問題はこのテクスチャのみです。白い長方形としてレンダリングされます。

私は多くの例を研究しましたが、何が間違っているのかまだわかりません。何が欠けている?


更新 1:バインドされている間に設定glClearColor()して呼び出すと、これらの変更がテクスチャに保存されることに気付きました。したがって、および/または関連するものに何か問題があります。glClear()texFrambufferglDrawArrays()

マトリックス モードとプロジェクションを特に自分用に設定する必要がありますtexFrambufferか?


更新 2:glCopyTexImage2D「メイン」フレームバッファからテクスチャにコンテンツをコピーするためにも使用しようとしました。

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

glViewport(0, 0, 32, 32);

glClearColor(1.0f, 0.75f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat vertices[] = {
    0.0f, 0.0f, 0.0f,
    20.0f, 32.0f, 0.0f,
    10.0f, 30.0f, 0.0f
};
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);

glBindTexture(GL_TEXTURE_2D, texture);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 32, 32, 0);

Bitbucket で入手可能な完全なソース コード: https://bitbucket.org/amjaliks/gl2/src/b3339661650e/GL2/GL2View.m

結果は同じです。塗りつぶされた四角形のみ。私のマトリックスに間違いなく問題があるようです。

4

1 に答える 1

0

あなたの問題は行列にあります。デフォルトでは射影行列は単位です。したがって、ビューポートの (-1,-1)-(+1,+1) 座標を指定します。ほとんどの場合、(0,0)-(32,32) 平方への正投影が必要です。

于 2012-03-06T09:24:49.583 に答える