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 ...
随机推荐
- 《数据结构与算法分析——C语言描述》ADT实现(NO.04) : AVL树(AVL-Tree)
上次我们已经实现了普通的二叉查找树.利用二叉查找树,可以用O(logN)高度的树状结构存储和查找数据,提高了存储和查找的效率. 然而,考虑一种极端情形:依次插入1,2,3,4,5,6,7,8,9九个元 ...
- 2018-10-19-C#-序列类为-xml-可以使用的特性大全
title author date CreateTime categories C# 序列类为 xml 可以使用的特性大全 lindexi 2018-10-19 9:9:47 +0800 2018-6 ...
- nulls_hlist原理 和 tcp连接查找
原文链接 http://abcdxyzk.github.io/blog/2018/09/28/kernel-sk_lookup/
- Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接
# kingadmin.py # ————————04PerfectCRM实现King_admin注册功能———————— from crm import models #print("ki ...
- ie浏览器将网页转成pdf
今天同事让我帮他将网页转成pdf,学了一个.先推荐一个超图的数据库使用指南:http://support.supermap.com.cn/DataWarehouse/WebDocHelp/6.1.1/ ...
- MATLAB---fopen、fprintf函数
1 概述 fopen()是个将数据按指定格式读入到matlab中的函数. fprintf()是个将数据按指定格式写入到文本文件中的函数. 2 用法 2.1 fopen函数 matlab中fopen函数 ...
- sqoop的数据抽取过程记录
今天公司抽取了4千万的表大概十几G 用sqoop抽取是30--40分钟 开了两个map.模型是oracle----hdfs(hive).以前只抽过几十万级别,所以千万级别感觉还是spilt做好切分和定 ...
- [NOI OJ]6044:鸣人和佐助
6044:鸣人和佐助 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示) ...
- LOJ 6497 图
LOJ 6497 图 题意 有图\(n\)点,每点可为黑或白,其中一些点颜色已定. 初时图无边,于每对\(i<j\),可由\(i\)向\(j\)连有向边,或不连. 称黑白相间之路径为交错路径. ...
- ubuntu16.04环境编译gSOAP
一.gSOAP简介 SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换.或者更简单地说:SOAP 是用于访问网络服务的协议. SOAP 提供了一种标准的方法,使得运行在 ...