問題タブ [phong]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - レイトレーシングで何かがうまくいかなかった
C#(Pythonから移植)で、単純なレイトレーシング割り当てを実行しようとしています。サンプル コードが正しい図を表示するように管理できましたが、それを自分の割り当てに適応させようとすると、何かがうまくいかなくなります。
何が問題なのか分かっていれば、役立つと思われるコードをいくつか投稿しますが、どこから始めればよいかわかりません。
基本的に、私の割り当ては次のようなものを出力します:
http://i56.tinypic.com/2vcdobq.png
スペキュラ ハイライトをオンにして、
http://i53.tinypic.com/2e1r38o.png
それをオフにして。次のようになります。
http://i56.tinypic.com/2m7sxlh.png
My Phong 照明の式は次のようになります。
そして、動作するサンプル コードからコピーしたので、動作することがわかりました。
私は困惑しているので、どんな考えでも素晴らしいでしょう。
glsl - glsl (lwjgl) のフォン鏡面照明
私は現在、gsl と Phong モデルを使用して、球体に鏡面照明を作成しようとしています。
これは私のフラグメントシェーダーがどのように見えるかです:
sunPosition は移動しておらず、値 (2.0f、3.0f、-1.0f) に設定されています。
問題は、鏡面反射計算が正しかった場合に想定されるように、画像が何も見えないことです。
これはどのように見えるかです: http://i.imgur.com/Na2C6.png
このコードにアンビエント/エミッシブ/デフューズ ライティングがない理由は、スペキュラー ライトの部分を最初に動作させたいからです。
助けてくれてありがとう!
編集:@Darcy Raynerそのindeadは、まだ正しくないものであると思われます...
現在のコードは次のようになります。
頂点シェーダー:
フラグメント シェーダー:
そして、球は次のようになります。
太陽の位置: sunPosition = new Vector(12.0f, 15.0f, -1.0f);
opengl - OpenGL/GLSLのさまざまなベクトル:頂点の周りのスターバーストを回避するには?
OpenGL 2.1 では、位置と法線ベクトルを頂点シェーダーに渡しています。次に、頂点シェーダーは avarying
を法線ベクトルに設定するため、理論的には、各三角形の法線を線形補間します。(これがフォン シェーディングの基礎であると私は理解しています。)
フラグメント シェーダーでは、ランベルトの法則で法線を使用して拡散反射を計算します。頂点間の補間がおかしく見えることを除いて、これは期待どおりに機能します。具体的には、頂点間のエッジに沿って顕著な「ホット スポット」があるスター バーストの影響が見られます。
これは、私自身のレンダリングによるものではありませんが、まったく同じ効果を示す例です (ページの途中にある金の球体を参照してください): http://pages.cpsc.ucalgary.ca/~slongay/pmwiki-2.2.1/pmwiki.php ?n=CPSC453W11.Lab12
ウィキペディアによると、これはガロー シェーディングの問題です。しかし、私が理解しているように、法線を補間し、フラグメントごとに照明計算を実行することで、Gouraud ではなく Phong モデルを使用しています。そうですか?
もっと細かいメッシュを使えば、これらのスターバーストはもっと目立たなくなると思います。しかし、三角形を追加することがこの問題を解決する唯一の方法でしょうか? スターバースト効果なしでスムーズな補間を得る方法があると思います。(私は確かに、3d Studio Max などの他の場所で、粗いメッシュで完全に滑らかなシェーディングを見てきました。しかし、法線を補間するだけでなく、より洗練された何かを行っているのかもしれません。)
c++ - フォン照明とフレネル誘電体反射/透過を現実的に組み合わせるにはどうすればよいですか?
更新:どの照明モデルを使用するかについての質問に答えましたが、反射光線と透過光線のフレネル項を計算する方法を知る必要があります。
部分的に実装された C++ レイ トレーサーがあります。現在、シャドウ レイを使用した Phong ライティングは問題なく動作します。単一の色とスカラーのアンビエント/ディフューズ/スカラー係数を持つエンティティを持たないようにしました。3 つの係数にはそれぞれ RGB コンポーネントがあるため、これらのようなマテリアルを実装できます。一方、ライトは単一の RGB カラーに加えて、スカラーの拡散反射光と鏡面反射光の強度を持ちます。また、単一の RGB アンビエント ライトもあります。
この時点で、すべての光を反射または透過する完全に誘電体のエンティティを実装することもできます。反射光と屈折光の比率は、フレネル方程式によって決定されます。ただし、反射色と屈折色をフォンの色と現実的に組み合わせるにはどうすればよいでしょうか? わずかに反射する色のプラスチック、光沢のある金、完全な鏡面またはガラスの球体、ステンド グラス、正面が透明で端が緑色のガラス板などを用意したいと考えています。RGB の反射率と透過率の係数を各エンティティに追加し、エンティティの設計者に環境 + 拡散 + 鏡面反射 + 反射率 + 透過率が適切な範囲内にあることを確認させることを計画していましたが、これは恣意的なようです。物理ベースの方法はありますか?
c++ - OpenGL 3.xフォンシェーディングの実装に問題が発生しました(法線?)
フォンシェーディングを正しく表示するのに問題があります。OpenGL呼び出し、または法線の読み込み方法に問題があることは間違いありませんが、3DグラフィックスとAssimpはどちらもまだ非常に新しいため、別の問題である可能性があります。.obj / .mtlファイルを読み込もうとすると、次のような問題が発生します。
- モデルの照明が強すぎるようです(フォンスタイルが少なく、完全に色あせており、明るすぎます)。
- 照らされている面は、全体が均等に照らされているように見えます(光源の位置がモデルの真上に移動した場合にのみ表示される鏡面ハイライトを除く)
- 問題1と2のため、球は非常に間違って見えます。
そして、顔が大きいものも(それほど目立たないように)間違って見えます:
私は間違っている可能性がありますが、私にはこれは適切なフォンシェーディングのようには見えません。
関連すると思われるコードは次のとおりです(必要に応じてさらに投稿できます)。
ファイル:assimpRenderer.cpp
ファイル:shader.vert
ファイル:shader.frag
調べることがたくさんあることは知っていますが、問題がどこにあるかを想定しないように、ほとんどのコードを作成しています。
opengl - 指向性光源を使用した反射ベクトルの計算
私は単純な形式のフォン シェーディング モデルを使用しています。このシーンは、-y 方向に輝く指向性ライトで照らされ、強度 1 の単色ライトで照らされています。視点は、ベクトル (- 1、0、-1)。
この場合、シェーディング方程式は次の式で与えられます。
ここL
で、 は指向性光源、kd
、ks
両方とも0.5
とn_s = 50
この場合、どうすればR
ベクトルを計算できますか?
有限ベクトルを計算するには有限座標が必要なので、私は混乱しています。ディレクショナル ライトの場合、-y 方向に無限に離れています。
performance - Matlabはベクトルの反射を計算します
画像の鏡面ハイライト(フォン)を計算する必要があります。法線ベクトルと「光ベクトル」が与えられます。ここで、光の反射を計算する必要があります-反射光ベクトルを取得するために、光ベクトルを法線ベクトルに反転させる効率的なmatlab関数はありますか?
I spec = k s * I *(r * v)p
ここ
l
で、は光ベクトル
n
は表面の法線ベクトルです
r
反射ベクトル
v
は反射点から視聴者までのベクトルは
p
光沢です
graphics - オブジェクトを照らす方法、フォンモデル
フォンモデルを使用して照明照明で色をスケーリングする方法を理解しようとしています。たとえば、I = KaAx が与えられた場合、ka は周囲係数、Ax は周囲光の強度で、x は rb または g であり、たとえば (1,0,1) のテクスチャ カラーを持つサーフェスにそれを適用したいと考えています。 . 個々の RGB 値に I (r*Ka*Ar.r,r*Kb*Ag,r*Kg*Ab) 照度を掛けてみましたが、残念ながら、私が望むものではない色を完全に変えることができます。
opengl - GLSLのgl_LightSource減衰係数に関する問題
Phong / Blinnシェーディングモデルを使用しようとしていますが、減衰を正しく機能させるのに問題があります。何らかの理由で、ポイントライトに面しているジオメトリが完全に白くなります。(1)コードは固定機能で完全に正常に機能し(つまり、すべての減衰/位置係数が適切に設定されている)、(2)次のものを置き換えると正常に機能するためです。
と
つまり、他のすべての計算(距離、方向、正規化)は正常に機能しているように見えますが、このコード行には(どういうわけか)問題があります。必要に応じてもっと投稿させていただきますが、これが問題のようです。
PS Windows 7を実行していて、私のOpenGLバージョンは4.3として出力されます。
アップデート:
これが問題のプリントスクリーンです。
そしてそれがどのように見えるかatt = 1.0 / (1 + 0.1*dist);
java - レイ キャスティングによるフォン イルミネーションの独自の実装
レイ キャスティング技術とフォン イルミネーションを使用して球体をレンダリングするプログラムを Java でゼロから作成しようとしていますが、少し迷っています。
phong 方程式の係数の背後にある概念は理解していますが、ベクトル値を取得する方法と、これらすべてとレイ キャスティングとの関係を理解していません。
画面の中央に球体をレンダリングしたいとしましょう。その位置と半径があるので、(cx、cy、r) です。今どこから始めればいいですか?ベクトル値を正確に取得するにはどうすればよいですか? 私の考えは次のとおりです(疑似コード)
しかし、これが正しいかどうかはわかりません。正しい場合は、まず法線のベクトル値を取得するにはどうすればよいですか?
正しい方法で私を指すことができますか?何度もグーグルで試しましたが成功しませんでした、よろしくお願いします