在一个充满D3DX Sprite对象的Direct3D应用程序中,我希望能够全局调整亮度和对比度.如果可能的话,对比很重要.
我在这里看到了关于OpenGL的这个问题:在OpenGL中 调整整个场景的亮度/伽玛
但这并没有给我在DirectX环境中需要的东西.我知道这也是我可能用像素着色器做的事情,但这似乎就像用火箭筒射击飞行而我担心向后兼容旧版GPU,这些GPU必须在软件中进行任何着色.看起来这应该是可能的,我记得甚至很多老游戏,比如原版的半条命,在着色器的日子之前就有这样的设置.
编辑:此外,请注意,这不是一个全屏应用程序,所以这将需要是一个只会影响一个Direct3D设备,而不是整个监视器的全局设置.
许多游戏通过添加混合在屏幕上应用全屏聚合物来增加亮度.即
SRCBLEND = ONE
DESTBLEND = ONE
Run Code Online (Sandbox Code Playgroud)
然后应用颜色为(1,1,1,1)的纹理将每个像素的亮度(ish)增加1.
要调整对比度,您需要通过常数因子进行类似但MULTIPLY.这将需要如下混合设置
SRCBLEND = DESTCOLOR
DESTBLEND = ZERO
Run Code Online (Sandbox Code Playgroud)
这样,如果您将像素与值(2,2,2,2)混合,那么您将更改对比度.
Gamma是一个更复杂的野兽,我不知道你可以像上面那样假装它.
这些解决方案都不是完全准确的,但它们会给你一个看起来"略微"正确的结果.它做得更加复杂,但是通过使用这些方法,你会看到与你玩过的各种游戏类似的效果,这是因为它正是他们正在做的事情;)
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |