2011-01-09 19 views
1

私はOpenGLのためのNeHeチュートリアルを行っています...私はレッスン8(ブレンドして立方体を描く)です。私は私が変更初心者の透明度/ OpenGLの不透明度

...そこに半透明の面の反対が不透明なものに常にあるとキューブを回転することができるように不透明に顔の半分を実験して変更したいhttp://nehe.gamedev.net/data/lessons/lesson.asp?lesson=08

コードを少し、全体のソースがあります:http://pastebin.com/uzfSk2wB 私はいくつかのことを変更:

  • はデフォルトでブレンド可能とglBlendFunc(GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA)にブレンディング機能を設定します。
  • は、各面の面と色を描画する順序を変更しました。私は私がすべて透明の顔今

を描く

  • デプステストを無効に私はすべての不透明な顔
  • を描くデプステスト
  • を設定
    • 、それは正確に伝えるのは難しいです何が間違っているのですか、間違いなく正しいとは思いますが、透明なものに比べてどのような顔が不透明であるのか分かりません。いくつかの顔は描かれないようです...

      背中と比較して正面の顔を計算したような感じはしませんが(確かに可能ですが)、そうする必要はないと思っています。

      私のコードで何が間違っているのか、これが最初のことを行う正しい方法ではないかどうかを調べます。

  • +0

    写真を掲載してください。また、あなたが間違って見えるものを説明してください。 – Bahbar

    +0

    ちょうどいいことに、あなたは今、OpenGLの非常に時代遅れで効果のないバージョンを学んでいます。あなたが気に入ったら、新しいOpenGLバージョンのためのいくつかのリソースをSOでブラウズしてください。より新しいバージョンも便利です! – Kos

    答えて

    4

    透明面を描画する前に深度テストを無効にすると、正しいz順序に関係なく描画されます。おそらく透明な顔が他のすべての顔の上に描かれているように見えます。深度テストをオンのままにします。

    +1

    不透明なジオメトリが透明なジオメトリを遮蔽できるようにするには、実際に深度テストを残す必要があります。 一般的には、glDepthMask(GL_FALSE)を使用して「深度書き込み」をオフにして、透明なジオメトリがそれ自身を閉塞しないようにします。 あなたの場合、立方体は凸であるので、何も変わらないでしょう。 – rotoglup

    +1

    また、透明な面を前面に並べ替える必要があります。なぜなら、ブレンドが有効になっていると、立方体のように凸面の場合にPainters Algorithm http://en.wikipedia.org/wiki/Painter's_algorithmを組み込む必要があるからです:glEnable(GL_CULL_FACE); glCullFace(GL_FRONT); draw_cube_transparent_faces(); glCullFace(GL_BACK); draw_cube_transparent_faces(); - 適切な深さの並べ替えを実装する場合は、深度の書き込みでもあなたを傷つけることはありません。 – datenwolf

    +0

    ありがとう!私はrotoglupが "積み重ねられた"透明な顔を見ることができるように追加しなければなりませんでした。私は間違っていましたが、現在うまくいきます... – Matthieu

    関連する問題