私は詐欺師です(実際のジオメトリは立方体で、おそらくクリップされ、詐欺師のジオメトリはメンガーのスポンジです)、その深さを計算する必要があります。GLSL gl_FragCoord.z計算と設定gl_FragDepth
私はかなり簡単にワールド空間でオフセットする量を計算することができます。残念ながら、私はそれで深さを乱すことに時間を費やしました。私が行くとき
私が得ることができる唯一の正しい結果は以下のとおりです。逆変換を取る
- :
gl_FragDepth = gl_FragCoord.z
は基本的に、私は私ができるようにgl_FragCoord.zを計算する方法を知っておく必要がありますgl_FragCoord.zから目の空間へ
- 深度の摂動を追加
- この摂動深度を元のgl_FragCoord.zと同じ空間に戻します。
重複した質問のように思われる場合はお詫び申し上げます。同じようなことに対処する多くの他の記事がここにあります。しかし、それらのすべてを実装した後は、正しく動作しません。助けを求めるために1つを選ぶのではなく、この時点で、私はそれを行う完全なコードを求めています。それはちょうど数行でなければなりません。将来の参照のため
頂点シェーダーも作成しましたか?またはフラグメントシェーダーのみ? –
私は一般的な原則でコードを提供するつもりはありませんが、[OpenGL Wikiへのこのリンク](http://www.opengl.org/wiki/Compute_eye_space_from_window_space)を教えてください。同様にこれを行う方法を示す詐欺師と深度に関する私のチュートリアルへのリンク(http://www.arcsynthesis.org/gltut/Illumination/Tut13%20Deceit%20in%20Depth.html)。深さを元に戻すのは簡単です。 –
マイケル:はい、それはちょうど通過シェーダです。それが起こると、計算は世界の空間で行われるので、フラグメントプログラムで視空間を計算できます。 ニコル、私はすでにそのページを見ていました。私はそれを次のように実装します: vec4 clip_pos = gl_ProjectionMatrix * vec4(eye_pos、1.0); float ndc_depth = clip_pos.z/clip_pos.w; gl_FragDepth =(((clip_far-clip_near)* ndc_depth)+ clip_near + clip_far)/ 2.0; 残念ながら、オフセットがないにもかかわらず、奥行きが奥行き範囲外にあるように見えます。 ありがとう、 – imallett