DirectX11笔记(二)--Direct3D初始化1之基本概念
原文:DirectX11笔记(二)--Direct3D初始化1之基本概念
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010333737/article/details/78409679
纹理( Texture )
2D纹理是一个数据元素的矩阵,2D纹理的一种使用场景是存储一张2D图片每一个像素的颜色,但是他一般都不只有这一种用途。在更高级的技术中,比如法线贴图(Normal Mapping),他还可以存储一个3D向量来表示法线信息,而不是存储颜色。纹理可以做很多事情,这些在以后会继续讨论, 但是需要注意,一个纹理只能按一种格式存储,这些格式由枚举值DXGI_FORMAT指定.
交换链( Swap Chain )
为了避免渲染场景时的闪烁, 最好是将这一帧的所有内容先画到一张离屏的纹理上( back buffer ), 当一帧结束之后一次渲染到屏幕上, 这样观察者就只会看到完整的帧而不是一帧中各个成员的绘制过程. 为了实现这一过程, 硬件会维护两个buffer, 分别称为front buffer和back buffer. front buffer存储正在画的帧, back buffer存储下一帧, 当back buffer准备完毕之后, back buffer和front buffer发生交换, 这个交换操作我们把它叫做presenting. presenting本身其实是一个效率很高的操作, 因为实际上它只是改变指针的指向.
深度缓冲( Depth Buffer )
深度缓冲便是纹理不存储图片数据的一种典型应用. 它存储了每一个像素的深度信息, 范围是0.0~1.0, 分别表示从最近到最远. 它的每一像素和back buffer是严格一一对应的.
假设我们要按照圆柱体, 球体, 圆锥体的顺序进行渲染下图的场景. 深度缓冲的工作模式是: (back buffer一般会事先被清空, 深度缓冲全部是1.0表示最远)d3 < d = 1.0 深度测试通过, P = P3, d = d3; d1 < d 深度测试通过, P = P1, d = d1; d2 > d 深度测试失败不做处理. 最终我们得到像素P的颜色为P1.
深度缓冲帮助我们找到距离视点最近的像素点. 深度缓冲也是一张贴图, 它的格式也被DXGI_FORMAT指定, 注意一个应用可以不使用模板缓冲( stencil buffer ), 但使用时一般会和深度缓冲结合使用, 称为深度模板缓冲. 在一张32bits的纹理中, 深度缓冲占24bits, 模板缓冲占8bits.
纹理资源视图( Texture Resourse View )
纹理可以通过设置特定的标记绑定到渲染管线的不同阶段, 比如作为render target和shader resource. 资源本身不会直接绑定到不同的阶段, 绑定到对应阶段的是资源视图. Direct3D要求我们在初始化阶段创建纹理资源视图, 如果要把一张纹理用作render target和shader resource便需要创建ID3D11RenderTargetView和ID3D11ShaderResourceView. 为了给资源创建特定的视图, 我们需要在创建资源时为资源绑定特定的标记. 比如为没有指定D3D11_BIND_DEPTH_STENCIL标记的资源创建ID3D11DepthStencilView视图将会报错.
纹理资源视图一般被用于以下两点:
告诉Direct3D如何使用这个资源
当资源格式在创建时是无类型格式时, 在创建资源视图时就必须指定其类型. 因此对于无类型格式的纹理, 它的元素可能被视为浮点数或者整数.
多重采样( Multisampling )
由于像素并不是绝对小的点, 所以在渲染斜线的时候必然出现阶梯状的锯齿, 这种缺陷会随着屏幕分辨率的提高减弱, 但通常不能无节制的提高分辨率, 所以我们会采取一些方法进行抗锯齿操作. 超级采样( Supersampling )便是其中的一种, 他使用两个四倍于原back buffer的纹理作为back buffer和depth buffer, 在提交back buffer之前, 用四个像素的平局值来计算一个像素. 实际上这是在软件层面提高分辨率.
但是超级采样是极其昂贵的操作, 他相比原来使用了4倍的内存, pixel 处理也是4倍. 对此, Direct3D使用了一种相对妥协的方法: 多重采样抗锯齿. 假设我们使用4倍多重采样抗锯齿, 多重采样的还是需要4倍屏幕分辨率大小的纹理, 但是他不对每一个像素进行计算, 多重采样相较于超级采样节省在先进行位置判断, 这省去了对图形内部不会产生锯齿的像素的重复计算. 他只在边缘进行了类似于超级采样的处理, 减少了抗锯齿的消耗. 但需要注意的是多重采样并没有提升图形内部的画质, 超级采样依旧具有更好的效果, 只不过他也需要更强大的硬件支持.
特征等级( Feature Level )
特征等级实际上就是Direct3D提供的一个枚举变量, 他严格的表示了当前的API等级, 我们在编程时应该注意设置特征等级, 一种好的做法是维护一个特征等级数组, API等级由高到低存储, 在用户的设备无法支持高版本API时能自动降低到低版本API.
DirectX11笔记(二)--Direct3D初始化1之基本概念的更多相关文章
- DirectX11笔记(三)--Direct3D初始化2
原文:DirectX11笔记(三)--Direct3D初始化2 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/article/ ...
- DirectX11笔记(三)--Direct3D初始化代码
原文:DirectX11笔记(三)--Direct3D初始化代码 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/article ...
- DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES
原文:DirectX11笔记(十一)--Direct3D渲染7--RENDER STATES 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010 ...
- DirectX11笔记(六)--Direct3D渲染2--VERTEX BUFFER
原文:DirectX11笔记(六)--Direct3D渲染2--VERTEX BUFFER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0103 ...
- DirectX11笔记(十)--Direct3D渲染6--PIXEL SHADER
原文:DirectX11笔记(十)--Direct3D渲染6--PIXEL SHADER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u01033 ...
- DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS
原文:DirectX11笔记(九)--Direct3D渲染5--CONSTANT BUFFERS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0 ...
- DirectX11笔记(八)--Direct3D渲染4--VERTEX SHADER
原文:DirectX11笔记(八)--Direct3D渲染4--VERTEX SHADER 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u0103 ...
- DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS
原文:DirectX11笔记(七)--Direct3D渲染3--INDICES AND INDEX BUFFERS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.cs ...
- DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS
原文:DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.c ...
随机推荐
- redux在react项目中的应用
今天想跟大家分享一下redux在react项目中的简单使用 1 1.redux使用相关的安装 yarn add redux yarn add react-redux(连接react和redux) 2. ...
- 如何将Map键值的下划线转为驼峰
本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:如何将Map键值的下划线转为驼峰: 例,将HashMap实例extMap键值下划线转为驼峰: 代码: HashMap<String ...
- Ansible 安装使用过程中遇到过的问题
1.[root@ansible ~]# ansible-doc -l [DEPRECATION WARNING]: docker is kept for backwards compatibility ...
- 廖雪峰Java10加密与安全-2加密算法-1URL编码
1.URL编码 URL编码是浏览器发送数据给服务器时使用的编码. 如通过百度搜索美女: 编码前:https://www.baidu.com/s?wd=美女 编码后:https://www.baidu. ...
- js身份证号码验证(小程序版)
参考知乎专栏文章https://zhuanlan.zhihu.com/p/22949023 <view class='bgw'> <form> ...... <view ...
- Joomla 随记
使用 joomla 开发好几个网站了,记录一下基础的东西吧~ 一.下载: 进入 joomla官网 下载: 二.安装 Joomla: 把下载好的 joomla 放到网站文件夹(图为wamp阿帕奇服务 ...
- SQL 查询--日期条件(今日、昨日、本周、本月。。。) (转)
主要用到sql 函数 DATEDIFF(datepart,startdate,enddate) sql 语句,设 有 数据库表 tableA(日期字段ddate) ——查询 今日 select * f ...
- 把char[]数组里面的内容用MessageBox显示出来
const char *q; q = mysql_get_client_info(); //获得一字符串指针 CString p(q); AfxMessageBox(p);
- hbase过滤器(1)
最近在公司做hbase就打算复习下它的过滤器以便不时之需,RowFilter根据行键(rowkey)筛选数据 public void filter() throws IOException { Fil ...
- springboot实现定时任务的方式
springboot实现定时任务的方式 a Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程 ...