0

フレームバッファのテクスチャとして、レイヤー化された画像 (10 ~ 1000 z 解像度の 3D テクスチャ) を使用したいと考えています。次の方法でフレームバッファのテクスチャを設定します。

glGenTextures(1, &textureName);
glBindTexture(GL_TEXTURE_3D, textureName);
glTexStorage3D(GL_TEXTURE_3D, 1, GL_R32F, width, height, depth);
glBindTexture(GL_TEXTURE_3D, 0);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, textureName, 0);

次に、ジオメトリ シェーダーでレイヤーのジオメトリを作成します。

void main() {
  for (int layer = 0; layer < textureDepth; ++layer) {
    gl_Layer = layer;
    //generate and emit vertices
    EndPrimitive();
  }
}

テクスチャ深度が小さい場合 (例: 10)、これは機能しているように見えますが、数値が大きい場合は結果が間違っているようです。問題が発生する可能性がある場所はたくさんあるので、これが機能していることを確認したかったのです。

  • 私は物事を正しく設定していますか?
  • クエリを実行する必要があるレイヤーの数に制限はありますか ( glGetInteger)?
  • フレームバッファとして高度に階層化された画像のパフォーマンスに関する経験はありますか?

私の主な問題は、このトピックに関する情報の欠如であることに注意してください。ドキュメントは非常に短く、非キューブ マップ レイヤー イメージの部分はさらに短くなります。このトピック (キューブ マップの問題ではない) をカバーするチュートリアルがあれば幸いです。

4

1 に答える 1

1

この状況でヒットする可能性のある制限はいくつかありますが、最初に頭に浮かぶのはgl_MaxGeometryOutputVertices. OpenGL の実装では、1 回のジオメトリ シェーダー呼び出しで出力できる頂点数を 256 に制限することができます。この制限に達している場合は、ジオメトリ シェーダーを複数の呼び出しに分割できます。実際、階層化されたレンダリングの場合は、とにかく GS 呼び出しを使用する必要があります。

詳細、特に完全なジオメトリ シェーダーで質問を更新すると、より詳細な回答を提供できます。これに慣れていない場合は、GS 呼び出しをセットアップする方法を含めます。

于 2013-11-15T00:09:30.900 に答える