3D图形学编程基础-基于Direct3D11-学习记录(四)混合的使用
来源:互联网 发布:网络语右友是什么意思 编辑:程序博客网 时间:2024/05/01 04:49
Direct3D中的混合
1.什么是混合
为了真实实现物体之间透明度的影响。当混合状态呗开始起时,每一个像素的绘制就可能被多个片段影响,两个相互重叠的物体,前一个比较透明,那么久应该可以看到后面的物体。开启混合后,则启用了alpha值(透明度),每个像素的计算需要通过一定的混合比例进行差值。
2.混合公式的计算
涉及混合操作中,有两个对象,一个是源对象(正在绘制中的图像),一个是目标对象(已经绘制好的对象),在Direct3D中混合操作不能自己编辑,只能调用一些已有的公式。操作符(源颜色*源因子,目标颜色*目标因子)
//混合因子的值种类列举D3D11_BLEND_ZERO//因子为0,说明此颜色完全不使用D3D11_BLEND_ONE//因子为1,当另一个为0是,此值为1,说明完全使用此颜色D3D11_BLEND_SRC_ALPHA//因子为alpha通道值。比较常用的方法D3D11_BLEND_INV_SRC_ALPHA//因子为1-源颜色alpha,使用此方法时,计算公式为((源颜色*源alpha),(目标颜色*(1-源颜色alpha))
//混合操作符D3D11_BLEND_OP_ADD //源+目标D3D11_BLEND_OP_SUBTRACT //源-目标D3D11_BLEND_OP_REV_SUBTRACT //目标-源D3D11_BLEND_OP_MIN //源和目标间较小值D3D11_BLEND_OP_MAX //源和目标之间较大的值
3.混合的使用
第一步:建立一个结构体来描述混合的一些参数
第二步:创建混合状态,可创建多个不同混合方式
第三步:调用混合方式
第一步:D3D11_BLEND_DESC{ bool AlphaToCoverageEnable; //是否在多重采样时使用alpha-to-coverage技术,一般设置为false bool IndependentBlendEnable; //并行渲染时是否启用独立渲染 D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[8]; //能同时设置8个,但当第二个参数为false时,此参数只有第一个有效} RenderTarget[0].BlendEnable;//是否开启混合模式 RenderTarget[0].SrcBlend;//源因子 RenderTarget[0].DestBlend;//目标因子 RenderTarget[0].BlendOp;//混合操作符 RenderTarget[0].SrcBlendAlpha;//混合公式中源因子的百分比,一般选1 RenderTarget[0].DescBlendAlpha;//混合公式中目标因子百分比,一般选1 RenderTarget[0].BlendOpAlpha;//混合公式中混合百分比的操作。一般和混合操作一样 RnederTarget[0].RenderTargetWriteMask;//掩码,一般设置为D3D11_COLOR_WRITE_ENABLE_ALL
第二步D3D11_BLEND_DESCblendDesc;ZeroMemory(&blendDesc,sizeof(blendDesc));blendDesc.AlphaToCoverageEnable = false;blendDesc.IndependentBlendEnable = false;blendDesc.RenderTarget[0].BlendEnable = false;m_pDevice->CreateBlendState(&blendDesc,&m_pBlendNone);//混合模式1:关闭混合blendDesc.RenderTarget[0].BlendEnable = True;//开启混合blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE;//混合因子1blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_SRC_COLOR;//混合因子为源颜色blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;//混合操作符为+blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;blendDesc.RenderTarget[0].DescBlendAlpha = D3D11_BLEND_ONE;blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;blendDesc.RnederTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;m_pDevice->CreateBlendState(&blendDesc,&m_pBlendStateAdd);//混合模式2blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;//混合因子为alphablendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;//混合因子为1-ALPHAblendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA;blendDesc.RenderTarget[0].DescBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA;m_pDevice->CreateBlendState(&blendDesc,&m_pBlendStateAlpha);//混合模式3
第三步:m_pImmediateContext->OMSetBlendState(m_pBlendStateAlpha, NULL, 0xFFFFFFFF );<span style="white-space:pre"></span>//第一个参数是设置好的混合模式,当不想使用混合时,可设为NULL<span style="white-space:pre"></span>第二个参数为D3D11_BLEND_BLEND_FACTOR时起作用,表示可以重复利用混合状态,其他情况下选择NULL。
文章中内容均来自学习内容的总结
0 0
- 3D图形学编程基础-基于Direct3D11-学习记录(四)混合的使用
- 3D图形学编程基础-基于Direct3D11-学习记录(三)纹理的使用
- 3D图形学编程基础-基于Direct3D11-学习记录(二)光照模型的实现
- 3D图形学编程基础-基于Direct3D11-学习记录(一)初始化DX设备,实现立方体绘制
- 3D计算机图形学,数学基础学习笔记(常用的坐标系解析)
- [3D计算机图形学]学习笔记 第一章 计算机图形学中的数学基础
- unity关于图形学的基础知识-3D矩阵的变换(四)
- Unity3D 一些基础的3D图形学算法
- Unity3D 一些基础的3D图形学算法
- 3D数学基础 图形与游戏开发的学习 (四)[2D笛卡尔数学]
- /LGC图形渲染/图形学系列 -- 3D 图形学基础
- 3D 图形学 以 OpenGL 为例的学习
- OpenGL超级宝典学习笔记第一部分:OpenGL API基础 第1章 3D图形学的基本原理
- 基于Direct3D11的光照模型展示
- 基于UIWebView的混合编程
- 《3D游戏和图形学的数学方法》快速阅读记录...
- java学习记录----java基础(四)
- python3.6基础学习记录(四)
- yii 各大框架文件上传(文件,视频,音乐)
- Java学习提要——接口进阶
- MACOS brew 安装与卸载
- KODI make
- Android Studio中Module下的gradle文件的基本配置
- 3D图形学编程基础-基于Direct3D11-学习记录(四)混合的使用
- 字体和文本输出:CFont字体类
- 分类,回归,标注
- 几款主流数据库的详细比较
- 学习笔记之——内存溢出OOM问题
- keepalived安装与配置
- php 连接数据库存储数据
- Android开发笔记(一百二十三)下拉刷新布局SwipeRefreshLayout
- Unity3D for VR 学习(3): 暴风魔镜PC Input小改造–自己动手、丰衣足食