1

D3DXのスプライトオブジェクトで満たされたDirect3Dアプリケーションで、明るさとコントラストをグローバルに調整できるようにしたいと思います。可能であれば、コントラストは重要です。

私はここでOpenGLについてこの質問を見ました:OpenGL でシーン全体の明るさ/ガンマを微調整します

しかし、それでは、DirectXのコンテキストで必要なものは得られません。これはおそらくピクセルシェーダーでもできることですが、バズーカでハエを撮影しているようで、ソフトウェアでシェーダーを実行する必要がある古いGPUとの下位互換性について心配しています。これは可能であるように思われます。元のHalfLifeのような古いゲームでさえ、シェーダーの時代よりずっと前にこのような設定があったことを覚えています。

編集:また、これはフルスクリーンアプリケーションではないため、1つのDirect3Dデバイスに影響を与えるだけで、モニター全体のグローバル設定ではないものである必要があることに注意してください。

4

6 に答える 6

5

多くのゲームは、文字通り、アディティブブレンディングを使用して画面全体にフルスクリーンポリを適用することにより、明るさを向上させます。すなわち

SRCBLEND = ONE
DESTBLEND = ONE

次に、(1、1、1、1)の色のテクスチャを適用すると、すべてのピクセルの明るさ(ish)が1増加します。

コントラストを調整するには、同様のことを行う必要がありますが、一定の係数で乗算します。これには、次のブレンド設定が必要になります

SRCBLEND = DESTCOLOR
DESTBLEND = ZERO

このように、値が(2、2、2、2)のピクセルをブレンドすると、コントラストが変更されます。

ガンマははるかに複雑な獣であり、私はあなたが上記のようにそれを偽造することができる方法を知りません。

これらのソリューションはどちらも完全に正確ではありませんが、「わずかに」正しいように見える結果が得られます。どちらの方法でも適切に行うのははるかに複雑ですが、これらの方法を使用すると、プレイしたさまざまなゲームと非常によく似た効果が得られます。これは、まさに彼らが行っていることだからです;)

于 2009-08-27T21:05:32.647 に答える
2

XNAで作成したゲームでは、ピクセルシェーダーを使用しました。これがコードです。[免責事項]ロジックが正しいかどうかは完全にはわかりません。一部の設定は奇妙な影響を与える可能性があります(!)[/免責事項]

float offsetBrightness = 0.0f;    //can be set from my C# code, [-1, 1]
float offsetContrast   = 0.0f;    //can be set from my C# code  [-1, 1]

sampler2D screen : register(s0);  //can be set from my C# code

float4 PSBrightnessContrast(float2 inCoord : TEXCOORD0) : COLOR0
{
    return (tex2D(screen, inCoord.xy) + offsetBrightness) * (1.0 + offsetContrast);
}

technique BrightnessContrast
{
    pass Pass1 { PixelShader = compile ps_2_0 PSBrightnessContrast(); }
}
于 2009-08-28T02:15:23.233 に答える
1

もう1つのアプローチは、すべてのテクスチャを編集することです。これは基本的にガンママップと同じアプローチですが、各画像ファイルのピクセルデータに手動でランプを適用してテクスチャを生成する点が異なります。

于 2009-08-27T22:12:00.640 に答える
1

シェーダーを使用するだけです。少なくともSM2.0をサポートしていないものは、この時点では古くからあります。

于 2009-08-27T22:13:25.973 に答える
1

使用しているDirectXのバージョンを指定しなかったので、9と仮定します。おそらく、ガンマランプ機能を使用するのが最善の方法です。ランプを上下に押すと、明るさが増減します。グラデーションを増減すると、コントラストが変わります。

于 2009-08-27T09:03:08.733 に答える
0

私はこれを試したことがないので、このフォーラムの回答は役立つかもしれません。

http://social.msdn.microsoft.com/Forums/en-US/windowsdirectshowdevelopment/thread/95df6912-1e44-471d-877f-5546be0eabf2

于 2009-08-27T01:30:25.160 に答える