Direct3D9 中的Gamma矫正

纹理内容常常是存在sRGB格式中的。关于这个格式的细节是可以被找到的。通常,像素管线假定颜色是线性的以便融合(blending)操作可以在线性空间中进行。因为sRGB中的内容是Gamma较正,所以融合操作在线性空间中处理会导致错误的结果。显卡在读到有关sRGB内容的时候便会取消Gamma较正以避免错误的发生。然后当输出像素的时候再将像素信息写回sRGB格式中。在这种情况下,所有像素管线中的操作就可以都在心线性空间中进行。

Gamma校正
在D3D9中。
     可以指明一张纹理是不是Gamma 2.2(sRGB) 较正.驱动程序将会在SetTexture的时候将其转换到线性的Gamma以进行融合操作。或者采样器将会在查询的时候将其变为线性数据。
     可以指明像素管线在输出到渲染目标的时候是否将Gamma校正变换回sRGB空间。

所有其它颜色(clear color, material color, vertex color, etc)都被假定为线性空间中。应用程序可以用像素着色器指令对写入到帧缓存中的颜色进行Gamma校正。线性化操作只对RGB通道有效,忽略ALPHA通道。

不是所有的表面格式都可以线性化。只有通过 IDirect3D9::CheckDeviceFormat检测(参数为D3DUSAGE_QUERY_SRGBREAD )的格式才可以被线性化。除此之外,采样状态D3DSAMP_SRGBTEXTURE 也会被忽略。只有无符号纹理格式支持这种变换。无符号纹理格式是指仅包含有R G B 和 L成分的纹理格式。如果包含ALPHA通道,那它将被忽略。如果混合的格式支持sRGB线性化,那么只有无符号通道有效。理想情况是硬件在纹理过滤前实现线性化。但在D3D9中,硬件只有在纹理过滤后才允许线性化。

不是所有的表面都可以被写进sRGB空间,只有通过用D3DUSAGE_QUERY_SRGBWRITE进行IDirect3D9::CheckDeviceFormat 测试的表面格式才能进行线性化。另外,渲染状态中的D3DRS_SRGBWRITEENABLE标志将会被忽略。每个通道8位的无符号RGB格式是比较适合的格式。
理想地,硬件将会在线性空间上进行帧缓存融合操作。但实际上硬件只能在像素管线处理后,帧缓存融合前进行。这意味着在sRGB中进行帧缓存融合操作会导致错误的结果。当清除渲染目标时。D3DRS_SRGBWRITEENABLE 标志 is Honored.对于硬件支持多渲染目标或多元素纹理的情况,只有第一个渲染目标和第一个元素会被写入缓存。

API变化

API Changes

// New sampler state (DWORD) 新的采样器状态// If this is nonzero, the texture is linearized on lookup.
如果它非0,纹理在查询是线性化。D3DSAMP_SRGBTEXTURE       // Default FALSE   默认为假// New render state (DWORD)
新的渲染状态D3DRS_SRGBWRITEENABLE     // Default FALSE 默认为假// New usage flags
新的使用标志D3DUSAGE_QUERY_SRGBWRITED3DUSAGE_QUERY_SRGBREAD
 
窗口下的交换链
为了进行正确的融合操作,应用程序保存他们的交换链在线性空间中的后台缓冲区是非常必要的。因为桌面通常情况下是不在线性空间的。所以需要在后台缓冲区内容显示前进行Gamma校正。
应用程序可以通过新增额外的缓冲区来自我校正,并把他自已正确的结果从线性空间复制到后台缓冲区。当驱动将Gamma校正作为部分显示的时候,是可以避免使用额外的缓冲区的。

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/archive/2010/04/24/1940518.html

时间: 2024-10-21 12:00:08

Direct3D9 中的Gamma矫正的相关文章

使用DirectDraw的Gamma控制形成淡出效果

为什么要使用DDRAW中的Gamma控制功能来做淡出呢?有两个主要原因:第一个是因为简单:第二是因为使用Gamma淡出,你不会丢失任何存储在主表面中的信息. 既然这样,在实现这种技术之前,有些不显眼的小事情我们必须给予注意.首先,你的主表面必须是16Bit色或更高:第二个是这种淡出只能在你的主表面上来做,因为这是在调整你的显卡的gamma设置. 让我们认真考虑一下:在DirectDraw库中包含一个结构DDGAMMARAMP.这个结构由3个包含256个字的数组组成,分别是Red,Green和Bl

17岁“黑客”懵懂中犯案

本报讯 记者 卢燕 南京花季少年章程程(化名)怎么也没想到,因为窃取.贩卖信用卡信息,他最得意的"黑客"身份会被上海的犯罪分子"拉下水".迷途知返后,忐忑不安的他渴望像其他同学一样正常地学习.日前,一封来自上海的前科封存通知书挽救了小章. 上海与南京两地的公.检.法.司首次跨省合作.联手对他采取了前科封存保护制度,为他的求学"铺平"了道路.然而,其间暴露的问题也令两地执法部门深有感触:前科封存制度重在保护未成年人的长远发展,需要多部门共同配合完成

camera摄像原理之四:曝光和GAMMA【转】

转自:http://blog.csdn.net/ghostyu/article/details/7912880 从最明亮到最黑暗,假设人眼能够看到一定的范围,那么胶片(或CCD 等电子感光器件)所能表现的远比人眼看到的范围小的多,而这个有限的范围就是感光宽容度.       人眼的感光宽容度比胶片要高很多,而胶片的感光宽容度要比数码相机的ccd高出很多!对于sensor来说,又是如何来判断曝光是否正确呢?很标准的做法就是在YUV空间计算当前图像的Y值的均值.调节各种曝光参数设定(自动或手动),使

gamma函数及相关其分布

神奇的gamma函数(上) 神奇的gamma函数(下) gamma函数的定义及重要性质 \[\Gamma(x)=\int_0^{\infty}t^{x-1}e^{-t}dt\] \[\Gamma(x+1) = x \Gamma(x)\] \[\Gamma(n) = (n-1)! \] \[\Gamma(0) = 1\] \[\Gamma({1\over 2}) = 2\int_0^{+\infty}e^{-u^2}du = \sqrt\pi\] gamma函数的图像 在matlib中,我们可以方

显示器偏色问题

问:我的显示器昨天还可以正常使用,可是今天一开机,显示器显示的图像颜色变得发红,白色也变成了粉红色,请问我该怎么办? 答:你说的这个问题比较常见,属于显示器偏色.一般来说,显示器偏色有几种原因,请按下面这几种方法尝试解决. 1.显卡与显示器之间的连接信号线有可能接触不良.在关机的情况下重新拔插一下显示器接头,并仔细检查插针是否出现弯曲或变形.信号线是否出现折断等. 2.如果只是屏幕的某一部位,特别是屏幕的四个边角出现偏色,一般情况下是由于强磁场干扰而造成的.可以用显示器初始设定或显示器自带消磁工

AOP@Work: 设计切入点来避免模式密集

"JUnit Cook's Tour"中的可用性和维护性 简介:在"JUnit: A Cook's Tour"一文中,作者 Erich Gamma 和 Kent Beck 讨论了 JUnit 的设计.他们指出,与很多成熟框架中的关键抽象一样, TestCase 也有很高的模式密集,易于使用而难以修改.在 AOP@Work 系列的第四 期文章中,Wes Isberg 重温了 Cook's Tour,说明如何通过使用 AOP 切入点设 计来代替面向对象设计,在一定程度上

图像分割之(四)OpenCV的GrabCut函数使用和源码解读

     图像分割之(四)OpenCV的GrabCut函数使用和源码解读                     分类:            图像处理            计算机视觉             2013-01-23 17:19     12031人阅读     评论(33)    收藏    举报     图像分割之(四)OpenCV的GrabCut函数使用和源码解读 zouxy09@qq.com http://blog.csdn.net/zouxy09         上一文

《LDA漫游指南》——第2章 前置知识

第2章 前置知识 LDA漫游指南 本章所描述的工具和线索在后期LDA算法的采样公式推导中会全部明了.关于为什么需要使用这些知识要素,这里面有很长的一段历史渊源,比如在概率论和数理统计中,gamma函数被广泛使用,而在最终的LDA采样公式中,你会发现,gamma函数被神奇地消失了.我们在后面的章节中可以看到,LDA算法的精妙之处在于用令人屏息的洞察力作为纽带,将零散的部件全部组合在一起. 2.1 gamma函数 所谓的gamma函数其实就是阶乘的函数形式,即n!=1⋅2⋅3-n.如果我问你3的阶乘

网友反映的情况基本属实,该院存在涉嫌虚假宣传,欺骗和诱导消费者的行为

上海沪申五官科医院在其网站上自称,获选"中国航天神舟功臣近视矫治定点医院",其激光近视矫正技术被神舟功臣们亲切地称为"神舟飞秒",并特别强调"不是每一种近视激光手术都叫神舟飞秒".近日,有网友反映,上海沪申五官科医院冒充"定点医院",其自称的"神舟飞秒手术"就是普通的视力矫正手术.经记者调查求证,网友反映的情况基本属实,该院存在涉嫌虚假宣传,欺骗和诱导消费者的行为.在上海沪申五官科医院的网站上,记者看到了这