2017-05-30 1 views
0

私は、モデル別にシーンモデルをレンダリングするOpenglアプリケーションを持っています。OpenGLレンダーオーダー

たとえば、モデルを前面にレンダリングしてから、背面にモデルをレンダリングすると、背面のモデルが前面のモデルの上に表示されますか?

答えて

0

OpenGLはすべてのコマンドを、発行した順番で処理します。つまり、フロントモデルとバックモデルを描画すると、2番目のモデルはデフォルトで最初のモデルをオーバードローします。

実際に正面の部分のみを描画する場合は、depth testingglEnable(GL_DEPTH_TEST);)を有効にする必要があります。これにより、既に格納されているものよりも視聴者に近いバックバッファにそのようなピクセルだけが確実に書き込まれる。このメソッドは透明でないオブジェクトに対してのみ機能することに注意してください。

0

デプステストを有効にしたかどうかによって異なります。デプステストが有効になっている場合*の場合、オブジェクトを描画する順序は、最後のシーンに影響しません**と表示されます。したがって、setup_glや、シーンを初期化するために使用する関数が描画される前に、glEnable(GL_DEPTH_TEST);を呼び出した場合は、その順序について考える必要はありません。 *

あなたはglDepthFuncまたはいくつかの類似の機能を使用して、デプステスト機能を変更していません。あなたが持っている場合(これは通常、特殊な機能を必要とする人にのみ推奨されるので、そうしないことをお勧めします)、深度テストは異なる動作を示します。

** ...あなたがあなたのシェーダで[高価]順序に依存しない、透明度のアルゴリズムを実装する必要がある、またはオーダーWILL問題を描きますのいずれか、その場合には透明オブジェクトを、(使用している場合を除き通常、透明のために、背面から前面に描画する必要があります)。