2012-03-05 4 views
1

OpenGL 2.1/GLSL 1.2를 사용하여 깊이 버퍼를 사용하여 2D 텍스처의 시각 공간에있는 입자의 깊이 값을 저장하고 싶습니다.OpenGL 2.1의 부동 소수점 렌더 타겟에 깊이 버퍼 사용

은 지금까지 나는 그러나, 나는이 BGA 구성 요소를 필요로하지 않는 colorbuffer

// create texture 
glGenTextures(1, &g_hDepthTexture); 
glBindTexture(GL_TEXTURE_2D, g_hDepthTexture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F_ARB, g_windowWidth, g_windowHeight, 0, GL_RGBA, GL_FLOAT, 0); 
// create framebuffer 
glGenFramebuffersEXT(1, &g_hFBO); 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, g_hFBO);glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, g_hDepthTexture, 0); 

를 사용하는 방법을 발견했다. 따라서, 나는 깊이 버퍼를 사용하려고했지만, 다음 코드는 1

// create texture 
glGenTextures(1, &g_hDepthTexture); 
glBindTexture(GL_TEXTURE_2D, g_hDepthTexture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, g_windowWidth, g_windowHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0); // create framebuffer 
glGenFramebuffersEXT(1, &g_hFBO); 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, g_hFBO); 

glDrawBuffer(GL_NONE); 
glReadBuffer(GL_NONE); 

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, g_hDepthTexture, 0); 
싶습니다

아마 (깊이 버퍼를 사용하는 방법을 선택하는 방법을 알고 ... 0 질감에 각 값을 클램프 올바른 내부 형식/형식)을 지정하여 텍스처 값이 고정되지 않도록해야합니다.

답변

1

정규화 된 정수 이미지 형식은 항상 고정되어 있습니다. 그래서 정규화 된 정수입니다. 클램프되지 않은 형식을 원하면 부동 소수점 값이 필요합니다.

실제 1 채널 부동 소수점 이미지 형식 (예 : GL_R32F)을 사용하는 것이 좋습니다. 아마도 GL_R16F, 얼마나 많은 정밀도가 필요한지에 달려 있습니다. GL 3.x 하드웨어가없는 경우 사용할 수있는 확장명에 따라 GL_LUMINANCE32F_EXT을 사용할 수 있습니다.

아직까지 지연 렌더링을 위해이 작업을 수행하는 경우 걱정하지 마십시오. 실제 깊이 버퍼에서 직접 눈 - 공간 점을 계산할 수 있습니다. Yes, really.