2011-12-28 3 views
2

OpenGLとグラフィックスプログラミングの多くの初心者の方には、の値をzNearzFarに設定するのに問題があります。私のシーンがどれくらい大きいかを知っているとすれば、近くの平面を近づけすぎると深度バッファの問題が起こる可能性があることを考慮すると、これらのパラメータを正しく設定するにはどうすればよいですか?境界球の特定の半径に対してgluPerspective()のzNear値とzFar値を設定するにはどうすればよいですか?

ほとんどの言葉で、シーンの境界球の半径を知っていれば、どのようにして投影を適切に設定できますか?

答えて

0

多分それは簡単である:= centre.z周辺境界球

  • の(Z軸)に

    1. 検索中心 - 半径
    2. 遠い= centre.z +半径

    もちろん、その中心を見つけるには、可視オブジェクト全体を反復するか、シーン階層を使用する必要があります。

  • +0

    次に、視野角はどのようになりますか? – danielperaza

    +0

    我々は球を扱っているので、視界は90度に設定することができます。または、 "atan2"関数を使用して、非球面バウンディングボックスの正確な値を計算することもできます。 – fen

    1

    オブジェクトをカメラから妥当な距離に保つ限り、深度バッファの精度を失うことについてあまり心配する必要はありません。

    失われたビットは、zFar/zNearの基本2対数です。言い換えれば、奥行きバッファ精度の各ビットを犠牲にして、zFarを二重にするか、zNearを二分することができます。対数増殖は感謝するものです。さらに、を二重にした場合、zNearzFarの両方を追加すると、深度バッファ精度の追加ビットは犠牲になりません。

    zNear=1およびzFar=1024は、9ビットの深さのバッファ精度しか必要としません。それはとても快適な空間です。

    See this FAQ for details

    ブルーブックの記述が 関係を指摘で良いですが、それはやや不正確です。比率(zFar/zNear)が増加するにつれて、深度の後ろの近くで利用可能な精度がより低くなります。 バッファーと深さの正面に近い精度が利用可能です。 バッファー。したがって、プリミティブは、ビューアからさらに遠くにある場合は、Zで相互作用する可能性が高くなります( )。

    視野角は90-70付近にあります。

    関連する問題