最近、私は惑星、太陽系、銀河などの大きなシーンをレンダリングしようとしており、フロート精度とzバッファ精度の有名な問題にぶつかってきました。私は、hereのように対数奥行きバッファを使ってzバッファの問題を緩和しました。しかし、私はまだ遠距離での浮動小数点精度の制限をどのように修正するかを考えていません。OpenGLのフレーム
私は発見した1つの一般的な方法は、ソーラーシステムと記載hereとhereとして銀河スケール= 1つのライトイヤー1つのユニット= 1 megameter例えば1ユニットに対して、異なる距離のための基準の異なるフレームを使用することです。後者のリンクでは、一人の人が具体的に示唆している
あなたは地球をメートルでモデル化し、それをキロメートルでモデル化した太陽系に付け加えることが考えられます。太陽系は、光年でモデル化されたミルキーな方法に取り付けられています。これは、数百万年前の光年で測定されたローカルクラスタに接続されています。
シーンをレンダリングすると、階層を下方向に横断し、各レベルで32ビットの浮動小数点数には十分な精度があります。
私の質問は、このメソッドを実際に実装する方法です。私は、異なる単位の測定値から移行するときに各オブジェクトをスケールするのですか?異なる座標系で描画されたオブジェクト間の相対的なサイズと距離をどのように維持するのですか?
ありがとうございました。明確にするために、各スケールの大きさをフレームバッファまたはテクスチャにレンダリングして、それらを組み合わせたフラグメントシェーダでフルスクリーンクワッドをレンダリングするだけですか? – ArcaneEnforcer
@ArcaneEnforcer:はい、テクスチャに裏打ちされたFBOを使用するのが、最近の一般的なアプローチです。しかし、別の方法は、各層によって隠された画素をマークするためにステンシルバッファを使用するのと同様に、まだ遮られていない画像領域がマスクされるようにすることです。次に、スケールの大きさがレンダリングされた後、深度バッファがクリアされ(深度バッファのみ)、次のレイヤがレンダリングされます。シーンにブレンドされたジオメトリが含まれていると、物が厄介になりますが、通常、大規模なスケールを除いてブレンドされたものは省略できます。 – datenwolf