[D3D9] 图元半透明&alpha混合 所需要的参数设置 (含自定义alpha、纹理自带alpha)
来源:互联网 发布:网络协议的分析 编辑:程序博客网 时间:2024/06/06 02:04
VS2013 Demo 下载
图元半透明显示,需要用到alpha混合。根据红龙书所述,alpha值的来源有两种:1、纹理自带的alpha通道值(比如png)
2、自定义alpha假设已创建了D3D9设备对象: IDirect3DDevice9* pDevice9;
如果要使用alpha混合,需要对pDevice9对象进行以下设置:
如果要显示纹理 需要设置纹理过滤
pDevice9->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
pDevice9->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
pDevice9->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
设置混合因子
pDevice9->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pDevice9->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
设置alpha通道值的来源(本处设置为使用纹理自带的通道值)
pDevice9->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); pDevice9->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
D3DTA_TEXTURE 表示使用纹理自带的alpha
D3DTA_DIFFUSE 使用自定义的alpha
启用alpha混合状态
pDevice9->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
根据红龙书所述,只有在渲染某些需要半透明效果的图元时,才应该临时启用这个状态,并且在该图元渲染结束时应随即禁用该状态。
因为启用这个状态后,D3D在渲染时会进行相关的像素计算,影响渲染速度,所以建议在不需要的时就禁用。
如果是显示纹理,需要禁用光照
pDevice9->SetRenderState(D3DRS_LIGHTING, FALSE);
如果使用纹理自带的alpha值,则后续的代码与显示普通纹理的逻辑一样。
如果使用自定义的alpha值,则需要借助D3DMATERIAL9对象(具体请参考附带的demo、及D3D的灯光):
D3DMATERIAL9 TeapotMtrl;
// init TeapotMtrl
TeapotMtrl.Diffuse.a = 0.5f; // 设置alpha值
pDevice9->SetMaterial(&TeapotMtrl);
备注》
如果会使用HLSL,也可以在像素着色器中修改alpha通道,实现纹理(包括不带alpha通道的纹理)的透明效果
如果会使用HLSL,也可以在像素着色器中修改alpha通道,实现纹理(包括不带alpha通道的纹理)的透明效果
红龙书D3D9-第七章 对应的工程》
MtrlAlpha:使用自定义的alpha通道值
texAlpha:使用图片自带的alpha通道值
0 0
- [D3D9] 图元半透明&alpha混合 所需要的参数设置 (含自定义alpha、纹理自带alpha)
- Alpha 混合:两个半透明色的叠加
- 你所不知道的Alpha混合
- Alpha混合(一)Vertex Alpha
- Alpha混合(二)Material Alpha
- Alpha 混合(三)Texture alpha
- Alpha混合
- Alpha混合
- alpha混合
- alpha混合
- Alpha混合
- Alpha混合
- alpha
- alpha
- Direct3D进行Alpha混合实现半透明效果
- 我对【纹理颜色混合】与【ALPHA混合】的理解
- 我对【纹理颜色混合】与【ALPHA混合】的理解
- 我对【纹理颜色混合】与【ALPHA混合】的理解
- SSM框架整合实例,包能用( Spring SpringMVC Mybatis )
- Linux下undefined reference to `pthread_create' 问题
- 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
- 包含min函数的栈(Java实现)
- Android开发之利用ZXing库实现二维码的扫描
- [D3D9] 图元半透明&alpha混合 所需要的参数设置 (含自定义alpha、纹理自带alpha)
- TCP和UDP的优缺点及区别
- 基于github与gitbook的在线书籍制作入门
- java 之 智力题(面试/笔试)
- POJ3169 Layout(差分约束)
- 钩子原理及实例:实现键盘钩子截获密码
- MySQL时间常用操作
- github设置添加SSH
- Activity与Fragment的转场动画.