4.6 总结
- Direct3D可以看做是应用程序和图形卡之间的一个媒介。例如,应用程序调用Direct3D函数来绑定资源视图到硬件渲染管线,然后输出到渲染管线,画出图像
- 在11里边,一个支持11的图形设备必须支持所有的11的指令集,只有极少数例外。
- 组件对象模型(Component Object Model (COM) )是一个能够让DirectX成为一门语言并且具有向后兼容性。Direct3D程序员不需要知道COM底层是怎么实现的,他们只需要知道怎么获得COM接口然后释放它们。
- 一个1D纹理是一个1D的数组,2D纹理是一个2D的数组,3D同理。它的元素的格式被一个DXGI_FORMAT的枚举类来描述。纹理通常会包含图像数据,但是他们也可以用来描述其他数据,比如说深度数据。
- 在Direct3D中,资源不需要被直接绑定到管线中。取而代之的,资源的视图被绑定到管线中。一个资源可能会有多个视图。这样一来,一个资源可以被绑定到渲染管线的不同阶段中。如果一个资源被创建的时候被指定为无类型的,那么在创建视图的时候就必须要指定它的类型。
- 接口ID3d11Device和ID3d11DeviceContext可以被看做我们通过软件操作图形硬件的接口。也就是说我们可以通过这两个函数来操作图形卡让它做事情。ID3D11Device负责检查版本支持和分配资源,ID3D11DeviceContext负责设置渲染阶段,绑定资源到图形管线,发出渲染命令。
- 为了避免动画中的山东,我们最好把一整幅图像都渲染好,到一个非屏幕的地方,也就是后天缓存。当这整幅图像被画好到后台缓存之后,他就整个被提交到屏幕上。这样一来,观众就不会看到图像被画出来的过程。此时,后天缓存就成了前台缓存,前台缓存就成了后台缓存。这个交换过程被称之为“提交”。前后台缓存形成了一个交换链,用IDXGISwapChain这个接口来表示。使用这两个缓存被称之为双缓冲区。
- 考虑一个不透明的物体,它靠近屏幕的点应该遮挡住更远的点。深度缓存就是决定一个点是不是离摄像机最近的技术。这样一来我们就不用考虑先渲染哪个了。
- 性能计数器是一个高分辨率的计时器,它提供了计量很小的时间差所需要的精确计时功能,比如说两帧之间的时间。性能及数字的单位叫做计数。QueryPerformanceFrequency这个函数可以输出性能计数器每秒输出的计数量,通过这个我们可以计算时间。我们用QueryPerformanceCounter来得到计数值。
- 我们统计某段时间里走过的帧数来计算帧率fps。我们可以得到某段时间t内的计数数量n,然后这段时间内的平均帧率就是 n/t。不过帧率对于性能的指示并不直观因为其实每帧的耗时(亦即fps的倒数)才是更关心的,它代表我们加工一帧图像的花费。
- 书中给的那个例子,将会给我们剩下的应用程序都提供一个稳定的接口。它包装了每个应用程序都会用到的标准初始化的代码。我们把它封装起来,以后就可以专注于其他主题了。
- 对于调试而言,用D3D11_CREATE_DEVICE_DEBUG这个flag来激活调试层。当指示了调试标记时,Direct3D就会把调试信息发送到VC++的输出窗口了。注意我们使用的库是debug的库。
翻译存疑:
backwards campatibility: 向后兼容性
high-resolution: 高分辨率
debug layer: 调试层