专注昆明网站建设,深圳市注册公司流程图,全屏网站 功能,html品牌网页设计论文该技术能使我们将当前要进行光栅化的像素的颜色与先前已已光栅化并处于同一位置的像素的颜色进行合成#xff0c;即将正在处理的图元颜色值与存储在后台缓存中的像素颜色值进行合成(混合)#xff0c;利用该技术我们可得到各种各样的效果#xff0c;尤其是透明效果。
在融合…该技术能使我们将当前要进行光栅化的像素的颜色与先前已已光栅化并处于同一位置的像素的颜色进行合成即将正在处理的图元颜色值与存储在后台缓存中的像素颜色值进行合成(混合)利用该技术我们可得到各种各样的效果尤其是透明效果。
在融合运算时需要遵循首先绘制那些不需要进行融合的物体然后将需要进行融合的物体按照相对于摄像机的深度值进行排序如果物体已处于观察坐标系中该运算的效率会相当高因为此时只需要对Z分量进行排序最后按照自后往前的顺序逐个绘制将要进行融合运算的物体。
融合处理公式 这个公式中每个变量都是一个4D颜色向量(r,g,b,a)中间符号表示分量逐个相乘
OutpurPixel融合后的颜色值SourcePixel当前计算得到的、用于与后台缓存中对应像素进行融合的像素颜色值SourceBlendFactor源融合因子指定了源像素的颜色值在融合中所占比例该值在区间[0,1]DestPixel当前处于后台缓存中的像素颜色值DestBlendFactor目标融合因子指定了目标像素的颜色值在融合中所占的比例该值在区间[0,1]内
源融合因子和目标融合因子使我们可以各种方式修改源像素和目标像素的颜色值从而获得各种不同的效果Direct3D中默认状态下是禁止融合运算的可将绘制状态D3DRS_ALPHABLENDENABLE设为true便启用了融合运算融合计算的开销并不低所以应该仅在必需的场合中使用当绘制完需要进行融合的几何体之后应禁止Alpha融合在对三角形单元组进行融合时最好进行批处理之后应立即绘制出来这样就可避免在每帧图像中都启用了禁止融合运算。
Device-SetRenderState(D3DRS_ALPHABLENDENABLE, true);//融合运算 Draw...Device-SetRenderState(D3DRS_ALPHABLENDENABLE, false);
融合因子
可通过设置绘制状态D3DRS_SRCBLEND和D3DRS_DESTBLEND的值来对源融合因子和目标融合因子分别进行设定。
//Source、Destination 填D3DBLEND枚举
Device-SetRenderState(D3DRS_SRCBLEND, Source);
Device-SetRenderState(D3DRS_DESTBLEND, Destination);
透明度
每个顶点颜色中的Alpha分量与颜色值类似都是沿着三角形到单元表面渐变的但它并非用于确定某像素的颜色值而是用于确定像素的Alpha分量Alpha分量主要用于指定像素的透明度假定为每个像素的Alpha分量保留8位则合法区间为[0,255]Alpha为0时元素完全透明为255则完全不透明为了能使Alpha分量来秒后苏像素的透明度必须将融合因子和目标融合因子分辨设置为D3DBLEND_SRCALLPHA和D3DBLEND_INVSRCALPHA这些值恰好也是融合因子的默认值。
Alpha通道
我们并不直接使用计算得到Alpha分量而往往是从纹理的Alpha通道中获取Alpha信息Alpha通道是保留给存储了Alpha分量的纹理元的一个额外的位集合当纹理映射到某个图元中时Alpha通道中的Alpha分量也进行了映射并成为了该图元中像素的Alpha分量。
指定Alpha来源
默认状态下如果当前设置的纹理拥有一个Alpha通道Alpha值就取自该Alpha通道如果没有Alpha通道Alpha值就取自顶点的颜色也可以用下列绘制状态来指定Alpha值的来源(漫反射颜色值或Alpha通道)
//漫反射颜色值
Device-SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
Device-SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);//纹理的Alpha通道
Device-SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
Device-SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
用DirectX Texture Tool创建Alpha通道
最常见的图像文件格式中不含有Alpha信息可以用DirectX纹理工具创建一个具有Alpha通道的DDS文件DDS文件是一种专门为DirectX应用程序和纹理设计的图像格式。可使用D3DXCreateTextureFromFile函数将DDS文件加载到纹理中。
使用该工具打开图片后会自动加载为24位的RGB纹理(红、绿、蓝分量各占8位)如果想扩展为32位的ARGB格式的纹理选择菜单中Format然后选择Change Surface Format命令选择A8R8G8B8格式并确定就创建了一幅像素颜色深度为32位的图像接下来的任务是将数据加载到Alpha通道中选择菜单File然后选择Open Onto Alpha Channel Of This Texture命令找到要加载到该Alpha通道的数据的图像文件后就完成在Alpha通道作用下的纹理图了保存后命名为xxx.dds