Рендеринг для текстурирования все еще рендеринга для экранирования в OpenGLES

Я пытаюсь получить набор материала, сделанного в OpenGLES, но здесь - где я запускаю - тянущий материал к структуре, затем отображая ту структуру.

Я создаю некоторые буферы:

glGenFramebuffersOES(1, &frameBuffer);
glGenRenderbuffersOES(1, &colorRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, frameBuffer);

И затем я собрался для проведения некоторых линий к кадровому буферу.

glViewport(0, 0, backingWidth, backingHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glVertexPointer(2, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, colours);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_LINES, 0, 2000);

Я затем пытаюсь скопировать это в свежеприготовленную структуру.

glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 128, 128, 128, 128);

И затем отобразите структуру.

GLfloat vertices[] = {-1,1,1,1,-1,-1,1,-1};
GLfloat texcoords[] = { 0,1,
                            1,1,
                        0,0,
                        1,0,};

glColor4f(0.5, 0.5, 0.5, 0.1);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
GL_RENDERBUFFER_OES, colorRenderbuffer);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
[context presentRenderbuffer:GL_FRAMEBUFFER_OES];

То, что я получаю, является этим - мои строки, отображенные в 'задней части' экрана (способ, которым я тяну средства Triangle Fan, что я вижу позади него), что означает, что мои линии проводятся к renderbuffer, даже при том, что я никогда не связываю его. Вдобавок ко всему, я потянул свою структуру как некоторые странные цвета, а не мои строки, как я ожидал.

Таким образом, у меня есть две проблемы здесь:

Почему мои строки все еще появляются позади экрана, если я не пишу им в renderbuffer?

Я пишу в структуру правильно? Если так, почему это не отображение?

1
задан Rob W 17 December 2011 в 15:20
поделиться

1 ответ

Вам нужно использовать объект фреймбуфера (FBO) для рисования непосредственно в текстуру, следующие руководства должны вам помочь:

http://www.flashbang.se/archives/48

Обратите внимание, что эти руководства для OpenGL, для OpenGL ES то же самое, но EXT заменено на OES в большинстве методов и перечислений.

Также обратите внимание, что привязка фреймбуфера (glBindFramebufferEXT/OES) заставляет весь рендеринг идти в этот фреймбуфер (и его присоединенные текстуры/рендербуферы), поэтому вам нужно сначала отвязать фреймбуфер, прежде чем снова рисовать на экран, что делается:

glBindFramebuffer(GL_FRAMEBUFFER, 0);
2
ответ дан 2 September 2019 в 23:13
поделиться