問題タブ [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 に答える
495 参照

opengl - GL_FRAMEBUFFER_SRGB による OpenGL ガンマ補正

私は Blinn Phong (LearnOpenGL チュートリアル) ライティングを作成しており、ガンマ補正された色を最終結果として取得しようとしています。

ガンマ補正について掘り下げる前に、私の照明は次のようになります。

画像1

それから私は一日中sRgb色空間とその意味について読んでいます。ガンマ補正された色を使用すると、ライティングの品質が向上するという結論に達しました。

フラグメント シェーダーでガンマを手動で調整するのは面倒です。GL_FRAMEBUFFER_SRGB を有効にして、sRgb 対応のフレームバッファを要求することで、opengl にそれをさせることができます。(?)

これは、GL_FRAMEBUFFER_SRGB を有効にし、テクスチャを GL_RGB 形式でロードした場合です。

画像2

これは期待される結果です。サンプリングされたテクスチャが 2 回色補正されるため、色がより明るくなります。(?)

これは、GL_FRAMEBUFFER_SRGB を有効にし、テクスチャを GL_SRGB 形式でロードした場合です。

画像3 これは予想外の結果です。すべてが暗すぎて、拡散色が見えず、スペキュラーのみです。

私の質問は:

(LearnOpenGL チュートリアルに従って) OpenGL が独自にガンマ補正を実行できるようにするには、次のことを行う必要があります。

• SRGB をサポートするフレームバッファを持っている。

• SRGB フラグを使用してテクスチャをロードします。

何が間違っているのですか、それとも何か重要なことを見逃しているのでしょうか?

更新: GL_SRGB 形式でロードされたディフューズ テクスチャ、GL_RGB のスペキュラ。最後の画像では、拡散反射光が期待どおりにサンプリングされているのに対し、拡散反射光の色は完全に減衰 (?) されているように見えます。私の減衰関数は次のとおりです。

float attenuation = max(1.0 - distance / light.radius, 0.0);

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

java - フォンシェーディングを実装するための光源を選択する方法は?

フォン シェーディング モデルを実装しようとしていますが、光源の選択方法がわかりません。より具体的には、光源がどのように見えるべきかを理解していません。それはvec3であるべきですか?それとも、Java コードで定義したマトリックスでしょうか? また、カメラを光源にしたい場合、ビュー ワールドの別の場所など、別の光源と何が違うのでしょうか? コードだけでなく、このようなものを解決する方法についての説明やガイダンスを本当に感謝します。

これは、これまでの頂点シェーダーにあるものです。

そして、これは私のフラグメントシェーダーが現在どのように見えるかです:

コンパイルすると、黒い画面が表示されます。これはもちろん、光源を設定する必要がある周囲光と最終的な光が出ていないために発生します。