我想要在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];
我所得到的是這樣的 - 在這意味着我的臺詞屏幕(我畫的三角形扇意味着我可以在後面看到的樣子)的「後退」顯示我的臺詞都被吸引到了渲染,儘管我從來沒有約束過它。最重要的是,我將我的紋理繪製成一些奇怪的顏色,而不是我預期的那樣。
所以,我有兩個問題在這裏:
爲什麼我的線仍然出現在如果我不寫他們的渲染屏幕的後面?
我是否正確寫入紋理?如果是這樣,爲什麼不顯示?
您遺漏了很多重要的代碼,如glFramebuffer *電話(glFramebufferRenderbuffer等),但我真的不明白,就是如果你綁定的幀緩衝,這會使它,而不是屏幕。 另外,你爲什麼不使用FBO直接繪製紋理? – 2010-07-07 15:30:11
FBO是FramebufferObject,對吧?你能詳細說明可能涉及的內容嗎?我已經在其他地方看到過這種情況,但沒有提供可靠的代碼。 關於渲染目標,這也正是我的問題。沒有理由爲什麼應該出現在屏幕上,但它是。仍然用更簡單的例子來處理它。 – mtrc 2010-07-07 15:37:16
其實更好的問題是,你想要做什麼? – 2010-07-07 16:26:43