4

私は OpenGL を学んでいて、gluPerspective に問題があります。Init() で使用するコードは次のとおりです

// Calculate The Aspect Ratio Of The Window
// The parameters are:
// (view angle, aspect ration of the width to the height, 
//  The closest distance to the camera before it clips, 
// FOV, Ratio,  The farthest distance before it stops drawing)
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height, 0.5f, 3000.0f);

私のシーンは正しく機能します..しかし、オブジェクトから少し離れるとすぐに、それらは消えます (画像の赤いボールのように)。:錐台の例 グラフを取得した Web

赤いボールは視野の外にあり、表示されないことを理解しています。だから私が望むのは、描画を停止する距離を増やすことです。3000.0f を増やしてみましたが、うまくいきません!.

    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height, 0.5f, 3000000.0f);

だから私の質問は: openGLがオブジェクトの描画を停止する距離をどのように増やすことができますか?

問題に関するいくつかの写真: Pic1 Pic2

4

2 に答える 2

4

私は何が起こっているのかを理解したので、将来他の人を助けるためにこれに自分で答えます:

zfar を変更すると問題なく動作します。私が抱えていた問題 (単純化のために質問には含まれていません) は、私のスカイボックスでした。スカイボックスは小さく、オブジェクトを空で隠していました。pic2で見やすいです!

同様の問題がある場合は、スカイボックスを再確認してください。それが zfar の問題である場合は、空のテクスチャではなく、すべてを黒くする必要があります。

于 2011-03-14T17:02:09.517 に答える
3

Near 値と Far 値は、深度バッファの精度を定義します。近距離と遠距離の比率が高いほど、深度バッファーの精度エラーが大きくなります。したがって、深度バッファーは実際にはオブジェクトの描画を許可する場合がありますが、それらが小さくて互いに近い場合、それらはまだ表示されない (拒否されるか、上書きされる) 可能性があります。

3000.0f から 10000.0f に増やしても、まだ機能する可能性があります。オブジェクトの大きさは?

そもそも、なぜその大きな視聴距離が必要なのですか? あなたのニーズにより適した他のアプローチがあるかもしれません。

于 2011-03-14T16:29:21.950 に答える