OpenGL ES 2.0, iOS 용 간단한 3D 응용 프로그램을 만들고 있습니다.Open GL ES 2.0의 깊이 버퍼에서 검정색 얻기
내가 원하는 것은 프래그먼트 셰이더의 깊이 버퍼에서 장면의 깊이 값을 가져오고 싶습니다.
따라서, I는 2D 텍스처
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, size.x, size.y, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
self.Dimension = IVVec3I_Make(size.x, size.y, 0);
self.BufferObjID = texture;
으로 깊이 버퍼를 생성 및 깊이 첨부 프레임 버퍼에 부착.
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, pRD.BufferObjID,0);
내 장면을 렌더링 할 때 깊이 버퍼가 올바르게 작동합니다 (깊이 테스트 및 깊이 쓰기 모두 완벽하게 작동 함).
그러나 쉐이더의 샘플러에 깊이 버퍼를 지정하고 전체 화면의 쿼드 플레인을 사용하여 화면에 깊이 버퍼를 렌더링하면 모두 검은 색입니다. 그리고 쉐이더 그 자체는 샘플러에 또 다른 일반 텍스처를 지정할 때 텍스처를 올바르게 렌더링하기 때문에 아무런 문제가 없습니다.
이것은 조각 셰이더입니다. I에서 OpenGL ES 프레임을 캡처하여 깊이 버퍼를 검사
uniform sampler2D DepthBuffer;
void main()
{
highp vec2 tex_coord = vec2(gl_FragCoord.x/1024.0,gl_FragCoord.y/768.0);
tex_coord.y = 1.0-tex_coord.y;
gl_FragColor = texture2D(DepthBuffer, tex_coord);
}
는 디버거 (거의 모든 깊이 값이 1.0에 매우 근접하기 때문에 정확한) 모두 백인 깊이 버퍼를 나타낸다.
그래서 여기에 무슨 문제가있을 수 있습니까?
고마워. 하지만, 그들은 도움이되지 않았다 : (그리고 내 지식에 따라, glReadPixels는 ES 2의 Depth Attachment에 대해 작동하지 않습니다.0 –
glReadPixels의 좋은 점. 아직 텍스처 데이터를 검사하는 데 궁금 할 것입니다. 렌더링하는 FB를 깊이 텍스처에 바인딩 한 다음 glCopyTexImage2D를 사용하여 더미 컬러 텍스처로 복사 할 수 있습니다. 그리고 그걸 읽을 수 있습니다! –