0

私は自分の世界をレンダリングしました。いくつかの特定の要件に基づいて、(しばらくの間) 床にいくつかのライトが含まれています。三角形のプリミティブを使用してこれらのライトをレンダリングしています。現在、レンダリング領域をズームして制限する次のコードがあります。

            if(aspect>1)    
                gl.glOrtho(-scale*aspect, scale*aspect, -scale, scale, 0, 2);
            else
                gl.glOrtho(-scale, scale, -scale/aspect, scale/aspect, 0, 2);

この画像でわかるように、ファー プレーンは線 (B と D の間の円の線に平行) を通して光を切断しています。

ここに画像の説明を入力

シーンを回転すると問題が発生します... glOrtho「ボックス」は修正されたままです。ライトのカットラインを常に見ることで気づくことができます。B と D の間の線と平行ではなくなりました...

ここに画像の説明を入力

私の友人の 1 人がこのドキュメントを提案してくれました。基本的には、錐台面を抽出する方法を説明しています...

しかし、これは、各プリミティブが内部にあるかどうかを手動で確認する必要があることを意味します..

glOrtho 呼び出しを使用する方法はありますか?

私はこのようなものを取得したいと思います:

ここに画像の説明を入力

4

1 に答える 1

1

さて、コメントでの選択による説明の後、答えは次のとおりです。表示ボリュームクリッププレーンが何であるかについて誤解しています。

それらは、シーンに合わせたバウンディング ボックスのようなものではありません。

ニア クリッピング プレーンとファー クリッピング プレーンは、画面の世界への一種の投影であり、定義上、常にビューに合わせられます。これは OpenGL で使用される数学の基本であるため、これについてできることは何もありません。

また、OpenGL では、プリミティブを無限に拡張することもできないため、何らかの方法でジオメトリを制限する必要があります。

于 2012-07-30T23:09:12.847 に答える