質問

2Dゲームに取り組んでいます。 XYプレーンを想像してください。あなたはキャラクターです。キャラクターが歩くと、シーンの残りの部分が表示されます。

XYプレーンが非常に大きく、現在のビューの外側に他のキャラクターがあると想像してください。

これらのオブジェクトが現在のビューの外にレンダリングされない場合、openglでの私の質問は、処理時間を浪費しますか?

また、表示されていないシーンの一部がレンダリングされるのを避けるためのいくつかのアプローチは何ですか?現在の位置から1000単位離れた立方体がある場合、そのオブジェクトをレンダリングしたくありません。 openglでレンダリングしないようにするにはどうすればよいですか。

最も簡単な方法は、位置を計算し、そのキューブ/オブジェクトが遠すぎる場合は描画しないことだと思います。

役に立ちましたか?

解決

シーングラフを正しく設定した場合、視野外のオブジェクトは表示パイプラインの早い段階で選別される必要があります。オブジェクトが不可視であることを確認するには、コード内でボックスチェックが必要になるため、処理のオーバーヘッドが多少なります(ただし、それほどではありません)。

オブジェクトを適切な階層に編成すると、1つのボックスチェックだけでシーンの大きなセクションをカリングできます。

他のヒント

OpenGLのよくある質問"クリッピング、カリング、可視性テスト&quot ;こう言う:

  

OpenGLは、特定のプリミティブが特定の視点のシーンで表示されるかどうかを直接サポートしません。最悪の場合、アプリケーションはこれらのテストを手動で実行する必要があります。前の質問には、これを行う方法に関する情報が含まれています。

先に進み、そのリンクの残りの部分を読んでください。すべて関連しています。

通常、アプリケーションはこれらの最適化を実行する必要があります-OpenGLは文字通り単なるレンダリング部分であり、オブジェクト管理などを実行しません。非表示のデータを渡す場合、関連する座標をビュースペースに変換してから、完全に画面外またはクリッププレーンの1つを超えていると判断する必要があります。

パイプラインから不可視オブジェクトを選別する方法はいくつかあります。オブジェクトがカメラの後ろにあるかどうかを確認するのは、オブジェクトごとの簡単な計算で平均してデータセットの半分を拒否できるため、おそらく最も簡単で安価な方法です。表示されていないすべてのものを拒否するために、実際のビューのフラストラムに対して同じ種類のテストを実行するのはそれほど難しくありません。

明らかに複雑なゲームでは、すべての小さなオブジェクトに対してこれを行う必要はありません。したがって、それらを階層的にグループ化するのが一般的です(たとえば、既にあなたが「それを保持するキャラクターをレンダリングしていない」、空間的に(例えば、世界をgrid / quadtree /

基礎となるドライバーは、舞台裏でいくつかのカミングを行う可能性がありますが、OpenGL標準の一部ではないため、それに頼ることはできません。あなたのコンピューターのドライバーがそれをするかもしれませんが、誰か他の人(あなたのゲームを走らせるかもしれない)がそうしないかもしれません。独自のカリングを行うのが最適です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top