問題タブ [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.

0 投票する
0 に答える
4258 参照

opengl - GLSL フォン シェーディングが機能しない

このチュートリアルをフラグメントごとのシェーディングに使用して、それを GLSL #version 140 に適合させようとしています。取得した結果は明らかに正しくありません。同じ平面上で互いに隣り合っているいくつかの三角形で明暗が直接変化するため、提供された法線で何か間違っているように思えます。

ここに画像の説明を入力

頂点シェーダー コード:

フラグメント シェーダー:

C++ コード (ユニフォーム):

0 投票する
0 に答える
2178 参照

three.js - ThreeJS: Phong マテリアルのバンプマップは UV マッピングを使用しますか?

ThreeJS (r61) の PhongMaterial でbumpMap を使用しようとして夢中になりました。拡散と法線は正常に機能しています。これが私のコードです:

極端にバンプスケールを変更しようとしましたが、まったく変化がありませんでした。

バンプ マップは、デフォルトでオブジェクトのロードされた UV マップを使用しますか? 平面や球などのプリミティブ ジオメトリを使用した例しか見つかりませんでした。

テクスチャ オブジェクトの UVMapping プロパティは何に役立ちますか?

どんなヒントでも大歓迎です!ありがとう。

0 投票する
0 に答える
316 参照

c++ - ASSIMP と Phong シェーディングを使用して 3D モデルが大きすぎる (円柱) 場合の拡散法線反転

現在、Blender で作成し、次のオプションを設定して assimp を介してロードした 3D シーンでいくつかの照明を設定しています。

現在、私は自分のプログラムで本当に奇妙な不具合に悩まされています。次のプロパティを使用して、照明用のフラグメント シェーダーにPhong シェーディングを実装しています。

  1. 各モデルにはテクスチャが設定されています。
  2. 各モデルには、モデルから読み込まれた法線ベクトルがあります (おそらく aiProcess_GenSmoothNormals フラグのため、いくつかの事前計算が行われています)。
  3. 鏡面反射光はすべてのオブジェクトに作用します。
  4. 拡散色は正常に機能します。

ただし、パイプ オブジェクトは異なります。拡散反射光の色は常にパイプの反対側にあり、鏡面反射光は正しい側にあります。鏡面反射光は正常に機能しているのに、拡散成分は常に反対側にあるため、これは奇妙なことです。ブレンダーで円柱オブジェクトを特定のポイントを超えてスケ​​ーリングすると、この効果に気付きました (より小さいスケーリングされた円柱は正常に機能します)。特定のしきい値を超えて円柱オブジェクトをスケーリングすると、おそらく何か関係があります。

私のシーンでは、パイプのようなオブジェクトには鏡面反射光コンポーネントが機能していますが、拡散色は光源の反対側にあります。 拡散法線は機能しませんが、スペキュラーは機能します

ブレンダーで見た法線 ブレンダーで見た法線

私の最初の推測では、それは法線スケーリングと関係があるということでしたが、頂点シェーダーでその目的のために既に法線マトリックスを使用しており、シーン内の他のオブジェクトは問題なく動作します。

頂点シェーダー:

フラグメント シェーダー:


編集

デバッグ目的で、2 番目の描画パスですべての頂点法線を表示するジオメトリ シェーダーを追加しました。ただし、法線を表示すると、カメラの動きに合わせてわずかに動いてしまいますが、これは行うべきではありません。これがおそらく前述の問題の原因であると推測しています。

通常の動きを説明する小さなビデオを作成しました:通常の動きの問題を表示する Youtube ビデオ。

このビデオは、カメラが移動するにつれて方向を変えるピンクの法線を示しています。これはあってはならないことであり、その理由はわかりません。法線行列が正しくないのでしょうか、それとも assimp が法線を正しくロードしないのでしょうか?

0 投票する
2 に答える
1985 参照

opengl - 鏡面ハイライトはカメラの距離に依存します

鏡面ハイライトを実装してみました。問題は、サーフェスから遠くに移動すると、ハイライトがどんどん強くなり、ハイライトのエッジが非常に粗くなることです。表面に近づきすぎると、ハイライトが完全に消えます。

これは私のフラグメント シェーダーの関連部分です。すべての計算はビュー空間にあります。指向性太陽光を使用しています。

これは私の照明バッファのスクリーンショットです。一番前のバレルにはスペキュラー ハイライトがまったくなく、遠くにあるバレルは非常に強く輝いていることがわかります。真ん中のバレルは思い通りに点灯。

遠ハイライトが強すぎて近ハイライトが消える

私は何を間違っていますか?

0 投票する
1 に答える
1385 参照

javascript - Three.js で 3D 法線マップが正しく機能しない

法線マップをメッシュに追加したいのですが、法線マップを適用すると、モデルがスムーズではなくフラットにレンダリングされ、必要な効果が得られません。

ここに私の材料コードがあります:

法線マップを正しく設定するにはどうすればよいですか?

それが何かを意味する場合、法線マップはTIFにあります。(無いとは思いますが念のため)

0 投票する
2 に答える
945 参照

android - 頂点シェーダーのフォン ライティング

Android 用の OpenGL ES 2.0 を使用して、法線と色を含む単純な立方体を表示しようとしています。そのために、次のようにシェーダー プログラムを作成し、頂点シェーダーとフラグメント シェーダーをアタッチし、プログラムをリンクします。

そして、最後にクラッシュし、LogCatに出力されglUseProgram: glError 1281ます。ドキュメントを確認すると、glError 1281、つまりGL_INVALID_VALUE、プログラムが 0 でも OpenGL によって生成された値でもない場合に生成されます。

これを約 10 時間グーグルで調べた後、StackOverflow に支援を求めることにしました。glUseProgram をこのように動作させるために、頂点シェーダー コードで何が問題になる可能性がありますか?

これが私の頂点シェーダーコードであり、フォンライティングを実装しようとする私の試みです:

0 投票する
1 に答える
514 参照

graphics - 小規模なグーロー シェーディングを例で理解する

私はコンピュータ グラフィックスのコースにいて、フォンとグーロー シェーディングに関する講義に合格したところです。私は何が言われているのかよく分からなかったので、明確にするために教科書に目を向け、私を助けるかもしれない実行可能な例を見つけました. この例について皆さんと議論したいと思います。

例は次のように述べています。

頂点には次の RGB カラーがあります。

ポイント (a.) (30,30) とポイント (b.) (45, 30) の RGB カラーは何ですか?

のために)

A と B の R と B の値を想定します。それらは同じであり、30 は 10 と 50 の間にあるため、G の A と B の色値の平均をとります。

したがって、(25, 135, 30) はポイントのカラー値です。この値を次の問題で使用します。つまり、点 M と呼びましょう。

(b) の場合

y 座標として 30 を持つ唯一の点は C です。点 M は (30,30) にあります。したがって、(30,30) と (60,30) は同じ R 値と B 値を持っているため、(45, 30) の値も同じであると仮定します。45 はちょうど 30 と 60 の間にあるので、ここでも G 値を平均化します。

したがって、答えは (25, 125, 30) です。

だから私の質問は - これは正しいですか?もしそうなら-これは補間とは何を意味するのですか-この種の...平均化ですか?フォン シェーディングはこれとどう違うのですか?

0 投票する
1 に答える
5426 参照

c++ - レイ トレーシング - 反射

現在、レイ トレーサー、反射部分の作業を行っています。影のある球を作成するなど、すべてが正しく機能しています。今、私は反射部分を実装しています。しかし、私はそれを得ることができませんでした。私のアルゴリズムは以下の通りです:

反射を取得しようとしましたが、取得できませんでした。traceRay 関数のアルゴリズムが正しいかどうか誰か教えてください。