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 ...
随机推荐
- vue-admin-template模板添加tagsview
参考: https://github.com/PanJiaChen/vue-admin-template/issues/349 一.从vue-element-admin复制文件: vue-admin- ...
- Angularjs 1 使用filter格式化输出href
Angularjs版本: 1.3.5 工作中,由于是多级菜单,如果上级菜单为空,就会访问Angularjs 默认的state,然后再展开菜单,我找资料之后,才知道是通过filter来格式化输出数据的, ...
- 前缀数组O(n^3)做法
前缀数组O(n^3)做法 s.substr()的应用非常方便 令string s = "; ); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789&quo ...
- md5密码入库
<?php //连接数据库 $pdo = new PDO('mysql:host=localhost;dbname=md5;charset=UTF8', 'root', ''); # 设置为fa ...
- jeecms 前台拦截器的研究与改造
jeecms 前台拦截器的研究与改造 2013年12月24日 15:23:35 xinfei0803 阅读数 3511 jeecms出发点是面向大众的,具有前台开发性,也就是说,即时是未登录(游客 ...
- vue项目打包部署到服务器,静态资源文件404
js文件404问题 原因:打包的项目静态资源的路径需要设置为绝对路径.如果是相对路径会出错 解决办法:修改config/index.js文件,将 assetsPublicPath修改为' ...
- Android中Activity和AppcompatActivity的区别(详细解析)
转载 https://blog.csdn.net/today_work/article/details/79300181 继承AppCompatActivity的界面. 如下图所示: copy界面代码 ...
- naturalWidth、naturalHeight来获取图片的真实宽高
一般在图片放大缩小,或动态插入图片时使用 function imagea(img){ var w = img.naturalWidth; var h = img.naturalHeight; } 注: ...
- 一个班六个人,学号语文、数学、英语,接收成绩(不接受学号),输出学号成绩,总分、平均分,按总分排序(原生JS)
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- jsp中 url传参到后台的参数获取
datagrid传值url方法1:<input type="hidden" id="sortid"> <table id="dg&q ...