[Direct3D 9.0]第七章 混合

混合


像素的混合,将几种像素合成新的像素。

如书中木箱和透明茶壶的图。

方法就是通过一定的公式,将前后两个像素值混合为一个新的像素值。该公式如下

上面的所有变量都是一个4D 颜色向量(r,g,b,a),并且符号是表示分量相乘。

  • OutputPixel----混合后的像素值

  • SourcePixel-----通常被计算的像素,它是利用在后缓存中的像素来被混合的。

  • SourceBlendFactor----在[0,
    1]范围内的的一个值,它指定源像素在混合中的百分比。

  • DestPixel----在后缓存中的像素。

  • DestBlendFactor----在[0,
    1]范围内的一个值,他指定目的像素在混合中的百分比。

混合默认是被关闭的;你能够通过设置D3DRS_ALPHABLENDENABLE渲染状态为true来开启它:

通过设置设置D3DRS_SRCBLEND和D3DRS_DESTBLEND渲染状态来分别设置源混合要素和目的混合要素。

这里Source和Destination能够使用下面混合要素中的一个:

  • D3DBLEND_ZERO——blendFactor=(0, 0, 0,
    0)

  • D3DBLEND_ONE——blendFactor=(1, 1, 1,
    1)

  • D3DBLEND_SRCCOLOR——blendFactor=(rs, gs,
    bs, as)

  • D3DBLEND_INVSRCCOLOR——blendFactor=(1-rs,
    1-gs, 1-bs, 1-as)

  • D3DBLEND_SRCALPHA——blendFactor=(as, as,
    as, as)

  • D3DBLEND_INVSRCALPHA——blendFactor=(1-as,
    1-as, 1-as, 1-as)

  • D3DBLEND_DESTALPHA——blendFactor=(ad, ad,
    ad, ad)

  • D3DBLEND_INVDESTALPHA——blendFactor=(1-ad,
    1-ad, 1-ad, 1-ad)

  • D3DBLEND_DESTCOLOR——blendFactor=(rd, gd,
    bd, ad)

  • D3DBLEND_INVDESTCOLOR——blendFactor=(1-rd,
    1-gd, 1-bd, 1-ad)

  • D3DBLEND_SRCALPHASAT——blendFactor=(f, f,
    f, 1) , f=min(as, 1 – ad)

  • D3DBLEND_BOTHINVSRCALPHA——这种混合模式设置源混合要素为(1-as,
    1-as, 1-as,
    1-as,)以及目的混合要素为(as,as,as,as)。这种混合模式仅对D3DRS_SRCBLEND有效。

源和目的混合要素的默认值分别是D3DBLEND_SRCALPHA和D3DBLEND_INVSRCALPHA。

透明度

在以前的章节中我们忽略了颜色顶点和材质中的alpha
部分,那是因为当时它并不是必须的。现在它首先被用在混合中。Alpha 部分主要是用来指定像素的透明等级。我们为每个像素的alpha 部分保留8 位,alpha
的有效值在[0,255]范围内,[0,255]代表不透明度[0%,100%]。因此,像素的alpha 为0 时,表示完全透明,像素的alpha 为128
时,表示50%透明,像素的alpha 为255
时,表示完全不透明。为了让alpha部分描述像素的透明等级,我们必须设置源混合要素为D3DBLEND_SRCALPHA以及目的混合要素为D3DBLEND_INVSRCALPHA。这些值碰巧也是被默认设置的。

指定Alpha资源

默认情况下,假如设置一个有alpha 通道的纹理,alpha 值从在alpha
通道中获得。假如没有alpha通道,那么alpha 值是通过顶点颜色获得。然而,你能够通过下面的渲染状态来指定使用哪一个资源:

时间: 2024-08-11 00:21:39

[Direct3D 9.0]第七章 混合的相关文章

深入浅出Zabbix 3.0 -- 第七章 模板配置与管理

第七章  模板配置与管理 我们在主机中不仅可以添加很多需要监控的指标(即监控项),还可以添加图形.触发器.监控项组.展示屏.Web scenarios和low-level Discovery,如果在每个主机中添加这些对象,尤其是在一个大型环境中,其工作量是不可想象的,何况需要监控的主机有很多具有相同的监控属性,需要重复相同的配置工作,如果手工完成这些配置任务几乎是不可能的.好在Zabbix为我们提供了模板,通过在不同的模板中添加监控项.触发器.图形等配置并应用到任意数量的主机上.当然对于特殊的监

C#本质论6.0第七章:接口

接口: 概述: 接口能将实现细节和提供的服务完全隔离开.接口既不包括实现,也不包括数据. 接口实现:(待补) 要实现的接口和基类名称以逗号分隔,基类在前,接口顺序任意.类可实现多个接口,但只能从一个基类直接派生.一旦某个类声明自己要实现接口,接口的所有成员都必须要实现.抽象类允许提供接口成员的抽象实现. 接口永远不能实例化,不能使用new创建接口,所以接口没有终结器.接口不能包含静态成员.不可以为接口成员显式的使用abstract修饰符. 显式成员实现:显式实现的方法只能通过接口本身调用:为此最

第七章 快速排序

快速排序最坏情况下时间复杂度是O(n*n),但是它平均时间复杂度是O(N*logn),并且常数因子很小,可实现就地排序,所以被作为内排序的常用排序方法. #include <iostream> using namespace std; void swap(int &i,int &j) { int temp=i; i=j; j=temp; } int partition(int *vector, int low, int high) { int pivotpos=low; int

Laxcus大数据管理系统2.0(9)- 第七章 分布任务组件

第七章 分布任务组件 Laxcus 2.0版本的分布任务组件,是在1.x版本的基础上,重新整合中间件和分布计算技术,按照新增加的功能,设计的一套新的.分布状态下运行的数据计算组件和数据构建组件,以及依此建立的新的运行框架.操作管理规范.API接口等. 新分布任务组件的改变主要体现在数据处理能力方面.经过重新调整后的运行架构,原来因为架构问题受到的诸多限制被全部取消,分布任务组件可以随着集群的不断扩充,同步提供无限制的数据处理能力.这足以满足我们当前以及未来相当长一段时间内,对各种大规模数据处理业

《从0到1》笔记 第七章 向钱看

第七章 向钱看----风险投资中的幂次法则,在公司的经营也同样有效 风险投资家的任务是鉴定那些刚起步的前景光明的公司,投资这些公司并从中获利.风投中一种错误的投资组合是:期待所投的企业的回报呈正太分布.也就是说,没有希望的公司会倒闭,这样的企业不多:中等公司会一直持平,这样的企业最多:好的公司的回报会达到两倍甚至四倍,但这们的企业也不多,却弥补了倒闭企业的亏损. 但是这种“撒网式投资,然后祈祷”是会全盘皆输的.这是因为风险投资的回报并不遵行正态分布,是是遵循幂次法则:一小部分公司的回报完胜其他所

操作系统思考 第七章 缓存

第七章 缓存 作者:Allen B. Downey 原文:Chapter 7 Caching 译者:飞龙 协议:CC BY-NC-SA 4.0 7.1 程序如何运行 为了理解缓存,你需要理解计算机如何运行程序.你应该学习计算机体系结构来深入理解这个话题.这一章中我的目标是给出一个程序执行的简单模型. 当程序启动时,代码(或者程序文本)通常位于硬盘上.操作系统创建新的进程来运行程序,之后"加载器"将代码从存储器复制到主存中,并且通过调用main来启动程序. 在程序运行之中,它的大部分数据

第七章 实验传统的兴起

第七章 实验传统的兴起 近代科学的三大传统 数理传统(希腊理性传统的再现) 孤立化.原子化.碎片化分析 实验传统 博物学传统 科学革命导致的两大主题 世界图景的机械化 自然的数学化与分析化 实验传统的三个来源 数理分析传统 炼金术传统 培根传统(新博物学传统) 7.1数理传统和炼金术传统 数理传统 数理传统的两种实验传统 演示实验 思想实验 思想实验:在内心中设想出潜在的实验条件,其结果可以根据以前的日常经验可靠的预见到.--托马斯-库恩 如伽利略的重物轻物同时落地的思想实验 帕斯卡的大气压实验

[书籍翻译] 《JavaScript并发编程》第七章 抽取并发逻辑

本文是我翻译<JavaScript Concurrency>书籍的第七章 抽取并发逻辑,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. 到本书这里,我们已经在代码中明确地模拟了并发问题.使

第七章:常用类

第七章:常用类 包装类 java中有8中基本类型,对应有八种包装类作用:包装类中封装了该类型常用的属性和方法,以方便操作.byte---->Byteshort--->Shortint--->Integerlong---->Longfloat---->Floatdouble---->Doublechar---->Characterboolean---->Boolean装箱:将基本数据类型转换成包装类,经常通过构造方法完成.Integer i = new Int