4

私はOpenGL(JOGL)の深度バッファーを使用して、深度バッファーを無効にすることで特定のアイテムが他のアイテムの前にレンダリングされるようにしています(前の質問Java OpenGLの深度バッファーの保存で詳しく説明しています)。

これは、深度テストが無効になっているときに描画されるアイテムの色を設定した場合を除いて、機能しますが、マテリアルの光沢は表示されません。アイテムは元の色の暗いバージョンとしてレンダリングされます(実際には照明効果が適用されていないようです)。これが起こる理由はありますか?どうすればこれを防ぐことができますか?

ありがとう、ジェフ

4

1 に答える 1

2

今のところ答えがないので、少し推測しますが、試してみます。

私が想像できるいくつかの理由、あなたが見る効果が起こる理由:

  • 照明モデルの周囲および拡散コンポーネントとは対照的に、鏡面反射コンポーネントは、オブジェクトおよび光源に対する目の位置を考慮する必要があります。したがって、OpenGLが深度バッファを使用する場合、これはおそらくより高速になります。このように(描画されるすべてのピクセルに対して)、深度値を使用して、zコンポーネントで目の座標を完成させることができると思います。

  • 多分それは光の減衰にも関係していますか?光の減衰を使用する場合、OpenGLは、光が目に到達するまでに移動する必要のある距離を計算します(または、光とオブジェクトの間の距離を計算するだけで簡略化できますか?わかりません)。

したがって、深度バッファなしでは照明を正しく使用することはできないと思います。他の投稿で、アプリケーションの他の部分に干渉するため、デプスバッファをクリアすることはできないとおっしゃっていたと思いますか?http://www.glprogramming.com/red/chapter10.htmlの「例10-1:ステンシルテストの使用」のようなステンシルを使用した解決策があるはずだと思います(Cで書かれていますが、 JOGLでも同様です)。ステンシルは、残りのアプリケーションが貴重なピクセルを描画するのを妨げるだけです。

于 2010-03-26T16:20:07.747 に答える