2012-03-05 13 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

正規化された整数イメージ形式は常にクランプされます。だから彼らは正規化された整数です。アンクランプ形式を使用する場合は、浮動小数点値が必要です。

GL_R32Fのような実際の1チャンネル浮動小数点画像フォーマットを使用することをお勧めします。たぶんGL_R16F、必要な精度に応じて。 GL 3.xハードウェアがない場合は、使用可能な拡張機能によってはGL_LUMINANCE32F_EXTを使用できる場合があります。

ところで、遅延レンダリングでこれを行っている場合は、気にしないでください。アイ・スペース・ポイントは、通常のデプス・バッファから直接計算することができます。 Yes, really

関連する問題