分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
微软在2009年8月的DirectXSDK中发布了DirectX的正式版本。基于对DirectX的一贯兴趣,我把DirectX Graphics的文档边看边译为中文。也算是一份学习笔记吧。
众所周知,Direct3D是在Windows平台上开发实时3D应用的软件开发接口。随着Windows操作系统的升级,Direct3D的版本也随着升级。WindowsXP对应Direct3D9的各个版本,Vista对应D3D10,10.1,Windows7则对应D3D11。所以在XP平台上是没法做D3D10及以上的开发了。不过看起来因为Win7实际上是Vista的一个升级,所以微软也准备在Vista上支持D3D11。
D3D11是D3D10的一个超集,即它包含了D3D10的所有功能,并在其渲染管线上添加了一些新的特性。根据官方的文档,D3D11的新特性包括:
ComputerShader(计算着色器)
计算着色器能把GPU当成一种通用功能的并行处理器来使用。其实在D3D9时代就已经可以应用GPU来进行GP(General-Purpose)计算了,只不过那时候需要使用一些特殊的手段来处理(比如将数据包装成“纹理”)。在D3D11中专门实现了这样一个着色器阶段来支持GP计算,应该使得开发这类应用更为方便一些了。(参考NVIDIA的CUDA 技术以及OpenCL标准)
虽然计算着色器也是通过D3DDevice进行访问的,并能和其他的图形着色器共享内存资源,但它并不直接连接到其他的着色器阶段上面。这大概是因为ComputerShader并不直接与图形渲染功能相关吧。
Dynamic Shader Linkage(动态着色器链接)
D3D11包含的SM5(Shader Model规范)支持面向对象语言的构建方式,并支持运行时的着色器链接。
多线程(Multithreading)
随着CPU的多核化趋势渐渐普及,D3DAPI对多线程的支持势在必行。D3D11对多线程提供了这样的功能支持:
- 并发的对象创建 - 可以在多个线程中并发地进行对象(资源、着色器等)的创建。
- 在多线程中创建命令列表 - 命令列表是一个记录了图形处理命令的序列。在D3D11中,可以在多个线程中创建命令列表,然后又主渲染线程来发送这个命令列表到渲染硬件。
Tessellation(细分)
细分技术使得能够用不同的精度等级(LOD,Level of detail)来渲染一个模型。GPU可以根据所需的LOD来处理输入的模型,以得到相应负责度的实际模型。这项技术可以大大减少内存带宽对三角形数量的限制。这项技术通过两个新的着色器阶段来实现:Hull Shader(壳着色器)和Domain Shader(域着色器)。
除了上面的4项主要的特性外,D3D11还支持:
- 通过在创建Device的时候指定特性等级(feature level),D3D11可以在低于等级的硬件(即不完全支持D3D11规格的硬件)上运行。
- ShaderModel 5
- 大内存支持 支持超过4GB的资源。
- …(有待深入了解)
DirectX11 不但包含了新的Direct3D 11。 还引入了两个新的图形组件: Direct2D和DirectWrite。
Direct2D是一套硬件加速的、立即模式的2D图形绘制接口。(是用来取代GDI,GDI+,DirectDraw吗?) 它能高性能、高质量地绘制2D图形、位图以及文本。D2D能与D3D及GDI良好地互操作。
DirectWrite支持高质量的文本渲染,与分辨率无关的字体轮廓线绘制,全unicode文本支持及布局处理等等。
在D3D API 中, Device(设备)是一个核心的概念,Device是对一个图形硬件的抽象,它负责创建和销毁其他的对象,渲染图元等功能。D3D11中,Device对象主要用来管理资源,而DeviceContext对象执行渲染操作。一个对象只能被创建它的Device使用。多个Device可以通过共享资源来共享数据,但这个共享的资源也只能在创建它的Device内使用。(意思就是说多个Device都可以访问共享对象里面的数据,但处了创建Device之外,其他Device不能直接把这个资源连接到渲染管线上使用)
每个Device都由一个ID3D11Device接口来代表,可以通过D3D11CreateDevice或者D3D11CreateDeviceAndSwapChain函数来创建这个接口。每个Device都可以使用一个或多个DeviceContext,这主要是用来支持多线程操作。
D3D11CreateDevice函数的原型如下:
HRESULT D3D11CreateDevice(IDXGIAdapter*pAdapter,D3D_DRIVER_TYPEDriverType,HMODULESoftware,UINT