Direct3D初始化

Objectives
1、基本理解Direct3D在3D硬件编程中的作用
2、理解COM组件在Direct3D
3、学习基本图形概念,例如2D图像的储存,交换页,深度缓冲,多重采样,CPU\GPU的相互影响
4、学习怎么去使用性能计数器函数来获取高分辨率的时间读数
5、学习如何初始化Direct3D
6、熟悉D3D常用的数据结构和DX12龙书的demo框架

纹理
纹理是一个矩阵,用来储存一组元素,GPU可以对他们进行一些特殊的操作。
DX纹理支持的格式被定义为DXGI_FORMAT。其中,例如R16G16B16A16并非特指固定的颜色通道,而是表示有4个16-bit组成。

交换链和交换页
以下为翻译Dx12龙书章节:
为了避免画面闪烁,最好的方式是画完整的动画帧到一个离屏纹理上(被称为back buffer)。然后一次性将整个帧绘制到屏幕上。为了实现整个方式,硬件中保留了两个纹理buffer,一个被称为front buffer,另一个叫做back buffer。当下一帧在被绘制在back buffer的时候,front buffer储存了当前正在被显示器显示的视频帧。当绘制完成后,front buffer 和 back buffer的任务交换:back buffer变成了front buffer,front buffer变成了back buffer准备下一帧的绘制。交换(Swapping)他们的任务的过程被叫做呈现(presenting)。Presenting是个高效的操作,只需要交换指向buffer的指针就可以了。
这里写图片描述

front and back buffer来自交换链(swap chain)。在D3D中,一个swap chain是利用接口IDXGISwapChain来实现的。这个接口储存了一个front buffer和一个back buffer,还提供了接口去resize buffer(IDXGISwapChain::ResizeBuffers)、Presenting(IDXGISwapChain::Present)。
使用两个buffer叫做双重缓冲double buffering,三个叫三重缓冲triple buffering
Note:虽然back buffer是一个纹理(所以他的元素应该被称为texel),但我们经常把他的元素称做像素。

Depth Buffering
深度缓冲是一个纹理的样例但不包含图像信息,他包含了深度信息在一些 像素附近。可能的深度信息范围是从0.0到1.0f。0.0f表示了这个物体在视锥体中离的最近,而1.0表示离得最远。这里是一个一一对应关系在depth buffer中的每一个元素和back buffer中的每一个像素。(i.e.,back buffer中的第 ij个元素,对应depth buffer中的ij个元素,所以他们是同大小的)。
当绘制时会比较当前像素深度与depth buffer中对应元素深度的大小,如果新像素的深度值比buffer中的小,则新的像素将在back buffer中代替原有的像素。这样绘制出来的最终效果将呈现正确的物理遮盖。这样的机制使得我们无需关心渲染物体的先后顺序。

depth buffer是一个纹理,所以他必须是某几个数据格式:
1、DXGI_FORMAT_D32_FLOAT_S8X24_UINT:指定一个32位浮点深度缓冲区,为映射到[0,255]范围的模板缓冲区保留8位(无符号整数),而不用于填充的24位浮点深度缓冲区。
2、DXGI_FORMAT_D32_FLOAT指定一个32-bit浮点型深度缓冲区。
3、DXGI_FORMAT_D24_UNORM_S8_UINT:指定映射到[0,1]范围的无符号24位深度缓冲区,为映射到[0,255]范围的模板缓冲区保留8位(无符号整数)。
4、DXGI_FORMAT_D16_UNORM:指定映射到[0,1]范围的无符号16位深度缓冲区。
Note:一个应用程序不是必须拥有模板缓冲,但如果他有的话,一般依附于深度缓冲。所以一般来说,深度缓冲可以更恰当的叫做:depth/stencil buffer 深度模板缓冲。(以后再解释模板缓冲stencil buffer)

Resources and Descriptors
在我们渲染期间,GPU需要读写资源。我们需要先绑定(bind)或链接(link)我们的资源到渲染管道在我们draw call之前。一些资源在每一次draw call都会被改变,所以我们需要刷新他们在每一次draw call如果必要的话。
但是,GPU资源并不直接绑定。 相反,资源通过描述符对象引用,描述符对象可以被认为是描述GPU的资

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值