2010-07-07 9 views
1

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); 

그런 다음 텍스처를 표시하십시오. renderbuffer에 그려되고 내 라인을 의미 화면 (I는 삼각형 팬은 내가 뒤에 볼 수 있다는 것을 의미 그리는 방법)의 '뒤로'에 표시 내 라인 -

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]; 

는 내가 얻을 것이 이것이다 비록 내가 그것을 묶지 않더라도. 그 위에, 나는 기대했던대로 나의 선보다는 오히려 색이 이상한 색으로 그려진다. 여기

그래서있어 두 가지 문제 :

왜 내 라인은 여전히 ​​내가 renderbuffer로 쓰고 있지 않다 경우 화면의 뒷면에 나타나는거야?

텍스처에 올바르게 쓰고 있습니까? 그렇다면 왜 표시되지 않습니까?

+1

당신은 같은 glFramebuffer * 전화 (glFramebufferRenderbuffer 등)로, 중요한 코드를 많이 놓치고있어,하지만 난 정말 이해가 안하면 프레임 버퍼를 결합하면, 그것으로 렌더링입니다 화면에는 표시되지 않습니다. 또한 왜 FBO를 사용하여 텍스처에 직접 그리지 않습니까? –

+0

FBO는 FramebufferObject입니다. 맞습니까? 그게 포함될 수있는 것에 대해 자세히 설명해 주시겠습니까? 나는 이것에 대한 언급을 보았지만 그것을위한 확실한 코드는 없다. 렌더링 대상과 관련해서는 내 문제이기도합니다. 그게 화면에 나타나야하는 이유는 없지만 그렇습니다. 여전히 간단한 예제로 작업하고 있습니다. – mtrc

+1

실제로 더 좋은 질문은 정확히 무엇을하고 싶습니까? –

답변

2

당신은 텍스처에 직접 그릴 수있는 프레임 버퍼 개체 (FBO)를 사용할 필요가 다음 자습서 당신을 도움이 될 것입니다는 OpenGL ES가에 대한 그 자습서, OpenGL을위한 것으로

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

주 동일하지만 EXT는 대부분의 메서드와 열거 형에서 OES로 변경됩니다.

프레임 버퍼 (glBindFramebufferEXT/OES)를 바인딩하면 모든 렌더링이 해당 프레임 버퍼 (및 연결된 텍스처/렌더 버퍼)로 이동하므로 프레임 버퍼를 먼저 바인딩 해제해야 스크린에 다시 그려야합니다. :

glBindFramebuffer(GL_FRAMEBUFFER, 0); 
+0

자습서를 살펴 보았습니다. 그가 제공하는 코드는 아직 작동하지 않지만 많은 의미가 있습니다. 인내 할께, 고마워! – mtrc

관련 문제