OpenGL:大きなシーンと小さな値によるラインジッタ

私は現在、3Dソーラーシステムを描いており、私は惑星の軌道の軌道を描こうとしています。計算されたデータは3D空間で正しいですが、私が冥王星に向かうと、カメラが完全に停止するまで、軌道線が全面に揺れます。私はこれがこの特定の惑星に固有のものだとは思わないが、カメラが移動しなければならない距離を考えれば、この範囲ではもっと目立つと思う。

私はその錐台と何かが関係していると思っていますが、各コンポーネントに値を差し込んでいます。解決策を見つけることができません。何かを見るためには、私は惑星と近くの軌道の点で非常に小さい数(E-5マグニチュード)を使用する必要がありますが、それ以上の地域ではE + 2のマグニチュードまでです(多分異なる錘台で2回描く必要がありますか?

どんな助けも大いに評価されました

2
@Banthar:ほとんどの/すべてのOpenGLの実装は単精度で内部的なので、役に立たないでしょう。
追加された 著者 genpfault,
浮動小数点精度の限界にぶつかっているように思えます。ダブルを使用してみてください。
追加された 著者 Piotr Praszmo,
深度バッファの解像度の限界を打つことができます。遠距離(1E + 2)を近距離(1E-5)で割った値は、2 ^(深度バッファのビット数)未満でなければなりません。この場合、1E + 7の範囲をカバーするには約24ビットが必要です。私のMacは16ビットです。
追加された 著者 Steve O'Connor,
@Banthar:私はこれを解決する方法は、クライアント側の頂点投影を行い、深度バッファの制限よりもカメラに近いすべての頂点を選択することです。通常の3Dパイプラインを使用して深度バッファ内にあるすべてのものを描画します。そのすべてのジオメトリが深さのために正しく描画されます。近距離以外のものは、2D投影を作成し、ポイント/エッジを描画します。私はビューポートにエッジをクリップするクライアント側のルーチンを持って、ポイントは簡単です。クワッドと三角形を描く必要がある場合は、それらをクリップし、2Dで深度バッファリングがないことを覚えておく必要があります。
追加された 著者 Steve O'Connor,
私たちは同様の理由でダブルスを使用しようとしましたが、私はこれが同様の問題を解決したとは思わない。デプスバッファの制限は、私が何度も何度もやってきています。デプスバッファの範囲をどのように拡張しますか? (私はちょうど私がこれを間違ってタグ付けしていることに気づいた - 私はアンドロイドで働いていると私はタグ付きオープンエッジを持っている必要があります)
追加された 著者 batterj2,
ちょうどそこに投げ捨ててください:これを解決する一つの方法は、カメラを半分だけ動かして、惑星を正確に同じ距離だけ動かすことですが、反対方向、つまりカメラに向けることです。
追加された 著者 batterj2,

1 答え

お返事いただきありがとうございますが、これに対する私の解決策は、惑星を描いていたのと同じ行列を描くことでした。だから、解決策は実際にはより良いコードにすることです。

0
追加された