1

デプスバッファに問題があります。テクスチャーに入れたいです。しかし、それは機能していないようです。

したがって、オブジェクトをレンダリングした後に実行するコードは次のとおりです。

  glGenTextures(1, (GLuint*)&_depthTexture);
  glBindTexture(GL_TEXTURE_2D, _depthTexture);

  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

  const pair<int, int> &img_size = getImageSize();
  glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, img_size.first, img_size.second, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
  glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, img_size.first, img_size.second);

  glClear( GL_DEPTH_BUFFER_BIT );

問題は(私はOpenGL 3.2以降を使用しています)、レンダリング用の画像のサイズが異なります。ほとんどの場合、サイズは2 ^ i x 2^jにはなりません。それで、それは問題ですか?

また、問題の他の部分は、次の後にフラグメントシェーダーにある可能性があります。

#version 140

uniform sampler2D depthTexture;
uniform ivec2 screenSize;

out vec4 outColor;

void main()
{
    vec2 depthCoord = gl_FragCoord.xy / screenSize.xy;
    float d = texture2D(depthTexture, depthCoord).x;
    outColor =  vec4(d, d, d, 1.0);
}

その後、2回目にいくつかのシェイプをレンダリングするときに、前の深度(テクスチャ深度バッファ)を使用して、いくつかの効果を実行したいと思います。

しかし、真剣に...デプスバッファをテクスチャに取り込むことができるコードを誰かに見せてもらえますか?テクスチャにレンダリングするのか、レンダリング後にテクスチャを抽出するのかは関係ありません。2回目のパスを実行するための深さの値を持つテクスチャがある限り...それが重要です!

4

2 に答える 2

2

http://www.joeforte.net/projects/soft-particles/

これは良い解決策かもしれません!

少なくとも、それは完全なコードです...すべての異なる部分を取得できるかもしれません!

于 2012-09-04T17:52:55.427 に答える
1

電話が必要な場合がありglReadBufferます。コンテキストがダブル バッファリングされている場合、それはglReadBuffer( GL_BACK ).

また、GL_DEPTH_COMPONENT2432ビットの深度バッファは珍しいので、試してみてください。

于 2012-08-30T21:28:10.770 に答える