深度テストが無効になると Java OpenGL カラー マテリアルが暗くなります

StackOverflow https://stackoverflow.com/questions/2520641

質問

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

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

ありがとう、ジェフ

役に立ちましたか?

解決

これまでのところ回答が得られていないので、実際に少し推測してしまいますが、試してみます。

私が想像できる理由としては、なぜこのような効果が起こるのかが考えられます。

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

  • もしかしたら光の減衰も関係しているのでしょうか?光の減衰が使用される場合、OpenGL は光が目に到達するまでに移動する必要がある距離を計算します (または、光とオブジェクトの間の距離を計算するだけで単純化されますか?)よくわからない。)

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

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