3

OpenGLで次の効果​​を達成する方法を知っている人はいますか?

  • レンダリングされたシーンの明るさを変更する
  • または、OpenGL でガンマ設定を実装する

ライトのアンビエント パラメータとライトのタイプ (指向性と無指向性) を変更してみましたが、結果は均一ではありませんでした。ティア。

助けてくれてありがとう、いくつかの追加情報: * Windows 固有の API を使用できません。* ビューごとに異なるガンマを設定する必要があるため、ガンマ設定はウィンドウ全体に影響を与えるべきではありません。

4

2 に答える 2

3

win32では、SetDeviceGammaRampを使用して、全体的な明るさ/ガンマを調整できます。ただし、これはディスプレイ全体に影響するため、アプリがフルスクリーンでない限り、これはお勧めできません。

ポータブルな代替手段は、シーン全体を明るくまたは暗くする(面倒です)か、フルスクリーンのアルファブレンドクワッドをシーン全体に叩きつけて、必要に応じて明るくしたり暗くしたりすることです。これらのアプローチはどちらもガンマカーブに影響を与えることはできず、全体的な明るさにのみ影響を与えます。ガンマを調整するには、シーン全体をテクスチャに取り込み、各テクセルをガンマ関数で実行するピクセルシェーダーを介して画面にレンダリングし直す必要があります。

更新された質問を読んだら、必要なのは、その下のすべてを暗くしたり明るくしたりするように設定されたブレンディングを備えたクワッドです。例えば。

if( brightness > 1 )
{
    glBlendFunc( GL_DEST_COLOR, GL_ONE );
    glColor3f( brightness-1, brightness-1, brightness-1 );
}
else
{
    glBlendFunc( GL_ZERO, GL_SRC_COLOR );
    glColor3f( brightness, brightness, brightness );
}
glEnable( GL_BLEND );

draw_quad();
于 2008-09-26T12:18:08.537 に答える
0

http://www.gamedev.net/community/forums/topic.asp?topic_id=435400はあなたの質問に対する答えかもしれません。それ以外の場合は、おそらくガンマ補正をピクセル シェーダーとして実装できます。

于 2008-09-26T12:14:11.137 に答える