Windows 8 Directx 开发学习笔记(十二)利用混合实现浮在水面的木箱

在场景中绘制多个不透明物体时很简单,哪个物体离得近,看到的就是哪个物体。但如果加入一个透明的物体,像玻璃,如何渲染就有些麻烦。拿一块红色的玻璃挡住眼睛,看到的物体都偏红,换成蓝色的玻璃,物体都偏蓝。DirectX中的“混合(Blending)”技术可以解决这个问题。混合技术其实也不难,但是通过不同运算方式和系数的组合,它能实现很多效果。它的基本原理就是混合方程:


其中乘号表示向量对应元素相乘,C和A分别表示颜色和Alpha的混合结果,其它参数可以自由指定。详细的介绍可以看DirectX 10游戏编程入门,虽然版本不同,但是原理没有区别。继续拿玻璃做例子,个人感觉混合技术就像一个调色板,只有两种颜料,分别是玻璃的颜色Csrc和它后面对应位置的物体颜色Cdst,而最终的颜色C是两种颜料按不同比例混合后的颜色,其中Fsrc控制玻璃的颜料比例,Fdst控制物体的颜料比例。Alpha通道的混合原理与颜色混合类似,不过少了两个分量。

因为Csrc和Cdst随物体不同而变化,所以实际使用混合时每个方程需要指定三个参数:混合方式、Fsrc和Fdst。在DirectX 11中,与混合相关的结构体定义如下:

typedef struct D3D11_BLEND_DESC
{
BOOL AlphaToCoverageEnable;
    BOOLIndependentBlendEnable;
    D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[ 8 ];
}   D3D11_BLEND_DESC;

typedef struct D3D11_RENDER_TARGET_BLEND_DESC
{
    BOOL BlendEnable;
    D3D11_BLEND SrcBlend;   // Csrc
    D3D11_BLEND DestBlend;  // Cdst
    D3D11_BLEND_OP BlendOp; // 颜色混合方式
    D3D11_BLEND SrcBlendAlpha;  // Fsrc
    D3D11_BLEND DestBlendAlpha; // Fdst
    D3D11_BLEND_OP BlendOpAlpha;   // Alpha混合方式
UINT8 RenderTargetWriteMask;
}   D3D11_RENDER_TARGET_BLEND_DESC;

其他参数的说明可以参照MSDN

http://msdn.mi

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值