网站地图
Direct3D

由微软公司所制定的3D规格界面,与Windows 95和Windows NT操作系统兼容性好,可绕过图形显示接口(GDI)直接进行支持该API的各种硬件的底层操作,大大提高了游戏的运行速度。

Direct 3D是基于微软的通用对象模式COM(Common Object Mode)的3D图形API。它是由微软(Microsoft)一手树立的3D API规范,微软公司拥有该库版权,它所有的语法定义包含在微软提供的程序开发组件的帮助文件、源代码中。Direct3D是微软公司DirectX SDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。自1996年发布以来,Direct3D以其良好的硬件兼容性和友好的编程方式很快得到了广泛的认可,现在几乎所有的具有3D图形加速的主流显示卡都对Direct3D提供良好的支持。但它也有缺陷,由于是以COM接口形式提供的,所以较为复杂,稳定性差,另外,目前只在Windows平台上可用。★

Direct3D(简称:D3D)是微软公司在Microsoft Windows操作系统上所开发的一套3D绘图编程接口,是DirectX的一部分,目前广为各家显示卡所支援。与OpenGL同为电脑绘图软体和电脑游戏最常使用的两套绘图编程接口之一。

Direct3D的抽象概念包括:devices, swap chains和resources。

有4种device type,D3DDEVTYPE定义了设备类型。

HAL(hardware abstraction layer):使硬件加速。

reference:应用程序请求一个reference设备。

null reference:当系统没有装SDK,但是应用程序请求一个reference设备的时候,它就返回一个null reference。

可插拔的软件(Pluggable software);设备通过RegisterDevice设备方法提供。

Device

每一个设备至少要有一个swap chain.一个swap chain可用来产生一个或多个back buffer surfaces。渲染目标(render target)也是back buffer surface。back buffer是属于渲染(render)的部份。所有的back buffer都是合理的render target,但是并非所有render target都是back buffer。surface是一种资源,包含一个矩形集合的像素数据,如color, alpha, depth/stencil。

资源有4个属性:

Type:资源的类型,如顶点缓冲区(vexert buffer),或一个渲染目标(render target)。

Usage:资源的用途,如纹理(texture)或渲染目标,是一系统的旗标所组成,每个旗标占1 bits。

Format:数据的格式,如一个二维表面的像素格式。例如,D3DFMT_R8G8B8的值是一个24 bits的颜色深度(colour depth,8 bits是红色,8 bits绿色以及8 bits是蓝色)。

Pool:资源所分配的内部存储器空间类型。

Graphics pipeline process

Direct3D 10 API定义了vertices, textures, buffers,以及state组群转换到屏幕上的流程。这样的流程被描述成rendering pipeline有着许多不同的stages. The different stages of the Direct3D 10 pipelineare:

Input Assembler:从程序里读取vertex data并将程序提供的vertex buffer倒进pipeline.

顶点着色引擎(Vertex Shader): Performs operations on a single vertex at a time,像是transformations, skinning,或lighting.

几何着色器(Geometry Shader): Shader Model 4.0引进了几何着色器,使用Shader资源来处理点、线、面的几何坐标变换,一次最多处理六个点,快速地将模型类似的顶点结合起来进行运算。此一过程无需CPU参与。

Stream Output:将Vertex Shader和Pixel Shader处理完成的数据输出给用户。

Rasterizer: Converts primitives into pixels,再将像素(pixels)输出给pixel shader. The Rasterizer亦可运行其他工作,像是切割非视觉性的像素,or interpolating vertex data into per-pixel data.

像素着色引擎(Pixel Shader):决定最后的像素颜色(pixel colour)to be written to the render target and can also calculate a depth value to be written to the depth buffer.

Output Merger:接收来自于pixel shader的slice,进行传统的Stencil测试和Depth测试,整并各种不同的输出数据,用以创建最后之结果。

Direct3D有两种display modes:

全屏模式(Fullscreen mode):全屏是指画面全部被Direct3D所占据,不会再显示其他的视窗画面。目前市面上发展的游戏软件多采用此模式。

视窗模式(Windowed mode):视窗模式是指可以有多个视窗同时出现在屏幕上。

1992年,Servan Keondjian开创RenderMorphics公司,成立了一个Reality Lab实验室,专事3D图形技术及API技术研究。有两种版本的API被发布。1995年2月微软买下RenderMorphics,由Keondjian在Windows 95上开发3D图形引擎,主持Direct3D项目的开发。

Window 95推出之时,微软一口气发表了DirectX 1.0DirectX 2.0DirectX 3.0。DirectX 1.0推出时,只包括DirectDraw、DirectPlay、DirectInput、DirectSound四部分,DirectX 2.0内附了Direct 3D,但功能阳春,无法与OpenGL、3dfx等API函数相提并论。1996年9月发布的Direct 3.0被认为是DirectX的第一套完整版本。不久,DirectX 3.0更新3.0a、3.0b,版号从4.04.00.0068增加到了“4.04.00.0069”,仅是附加了一个被称为Direct3D的组件,这正是Keondjian的杰作。当时的Direct3D有两种模式,一是Retain模式,另一个是Immediate模式,皆以COM建构而成。1996年Westwood工作室发布以DirectX开发的即时战略游戏《红色警戒》,大卖1200万套。

DirectX 4.0并未推出就有DirectX 5.0。1997年6月推出DirectX 5.0,加入DrawPrimitive API,加入了对MMX的支持,不久微软又推出支持D3D加速卡的DirectX 5.0a版和5.1版、5.2版。

Direct3D 6.0,1998年秋微软推出,引进多重贴图(multitxture)以及stencil buffer

Direct3D 7.0引进硬件座标转换以及光影计算(Hardware Transform and Lighting),并支持.dds档。

Direct3D 8.0引进了可编程管道(Programable Function Pipeline)的概念,Direct3D在8.0版以前只能工作在固定管道(Fixed Function Pipe-line)的模式下。2001年微软正式发表的Direct3D 8.0支持处理顶点的Vertex Shader,以及处理像素的Pixel Shader。使Direct3D的技术正式超越劲敌OpenGL。DirectX 8中的着色器是用低级着色器语言(Low Level Shading Language)编写的。

Direct3D 9.0使用HLSL(全称High Level Shading Language)编写Vertex Shader和Pixel Shader,有助于着色器的编写和所产生代码的效率,并且大幅地缩短设计时间。Windows Vista推出DirectX的两种新类型:Direct3D 9Ex和Direct3D 10。Direct3D 9Ex是DirectX 9的扩充版,除了Direct3D 9外,还增加了Windows Vista driver部分新功能的应用程序而设计。Direct3D 9Ex和Direct3D 10均构建于WDDM之上。只有通过WDDM才能在Vista上使用Direct3D。

Direct3D 10相对Direct3D 9大量代码重新编写,Direct3D 10着眼在高级绘图程序,所有render都要写shader。但本质上功能并没有太大改变,只能算是对旧XP时代的问题重新更正,提供更高的可编程化及资源运用,以适合Vista使用。

Direct3D 10新特色:

全新的graphics pipeline:

fixed pipeline皆改成programmable的shader,

增加geometry shader、stream out,

culling、cliping、blending等stage合为output merger stage

新的resource type: constant buffer、texture array。Texture array可容许最多512个Texture。

resource引进view的概念

guaranteed feature set

GPU呈现多任务(multitasking)

Direct3D 10.1是Direct3D 10.0的小型的更新,2007年8月微软发布Direct3D 10.1以及Shader Model 4.1的测试版本。Direct3D 10.1规定几个更多图像质量标准为图表供营商,给予开发商对图像质量(image quality)的更多控制。XAudio 2将取代DirectSound,成为最新的跨平台音频API。

Direct3D 11架构于Direct3D 10的基础之上,但相较于Direct3D 10只支持Vista操作系统, Direct3D 11更可以支持Windows 7。Direct3D 11新增以下的功能:

镶嵌(Tessellation, 即曲面细分)

多线程渲染(Multithread Render)

计算着色器(Compute Shader):支持GPGPU,提供新版HLSL语言,与nVidia的CUDA或OpenCL功能类似。

其他还有面向对象化的Shader Model 5等功能。之前DirectX 10还是单线程,文件访问与绘图指令共用同一个线程,容易造成画面迟缓的现象,与DirectX 10相比,Direct3D 11有了更好的解决方案。

DirectX 11的pipeline新增Hull Shader、Tessellator、Domain Shader来实现tessellation, 可以快速让成像3D的小三角型快速增加。至于Computer Shader则是GPGPU的实现,以GPU的平行处理能力与浮点运算能力来实现CPU的运算,能够同时支持ATI以及Nvidia的显卡,不受绘图流程的限制。DirectX11还支持Intel的支持Ray Tracing(光线跟踪)与Rasterization(光栅化)技术,使3D效果更真实,更加逼真。

以Direct3D开发3D图形程序,可以采用COM inteface,也可以采用.NET Framework的方式,WPF会使用Direct3D 9与GPU。Direct3D 11技术是DX10.1的超集,支持DX11.0、DX10.1/10.0、DX9.3/9.2/9.1等。

Windows 7Desktop Windows Manager将会支持Direct3D 10.1 API。可将显卡带宽的占用率降低大约50%。DirectX 11可向下兼容于DirectX 10的显卡,同时也能够在Windows 7与Vista上运行。

Vista 引入了 DirectX 的两种新类型:Direct3D 9Ex 和 Direct3D 10。DirectX 10仅适用于Windows Vista,针对 Windows Vista 进行了全新构建,构建于Vista 显示器驱动程序模型 (WDDM) 之上,并引入新的硬件模式、绘图管线和渲染特性,让开发人员更接近硬件。一些由于游戏需要SM 2.0,Vista 将使用SM 2.0来渲染桌面。

用Direct3D 9画三角形:

// A 3-vertex polygon definitionD3DLVERTEX v[3];// Vertex establishedv[0]=D3DLVERTEX(D3DVECTOR(0.f,5.f,10.f),0x00FF0000,0,0,0);// Vertex establishedv[1]=D3DLVERTEX(D3DVECTOR(0.f,5.f,10.f),0x0000FF00,0,0,0);// Vertex establishedv[2]=D3DLVERTEX(D3DVECTOR(0.f,5.f,10.f),0x000000FF,0,0,0);// Function call to draw the trianglepDevice->DrawPrimitive(D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, v,3,0);

用Direct3D 11画三角形:

structVertex{floatx, y, z;D3DCOLOR color;};Vertex triangle[]={{0.f,5.f,10.f,0x00FF0000},{0.f,5.f,10.f,0x0000FF00},{0.f,5.f,10.f,0x000000FF}};// set Flexible Vertex FormatpDevice->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);// Draw - UP stands for 'user pointer', that is data// that is provided through a pointer and not through bufferspDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,1, triangle,sizeof(Vertex));

^Direct3D Resources -Memory pool.

^Direct3D 9.0 pipeline diagram.

^Direct3D 10 pipeline stages.

^Direct3D 7 introduces DirectDraw Surface (.dds) format.

^HLSL in Direct3D 9.0.

^Microsoft Presents DirectX 10.1 Details at SIGGRAPH. 2007-08-07[2007-08-27].

^DirectX SDK: Direct3D 10.1 Features.

WinG

OpenGL

HLSL

WDDM

DirectX website

DirectX 10: The Future of PC GamingTechnical article discussing the new features of DirectX 10 and their impact on computer games

显示隐藏▲

微软应用程序开发接口与框架

图形接口

桌面窗口管理器DirectXDirect3DGDIWPFWindows色彩系统Windows Image AcquisitionWindows Imaging Component

音乐与音效

DirectSoundDirectMusicDirectX外挂XACTSpeech API

多媒体

DirectShowDirectX Media ObjectsDirectX Video AccelerationWindows MediaMedia FoundationImage Mastering APIVideo for Windows

Web

MSHTML微软XML剖析器RSS PlatformJScriptVBScript浏览器协助工具对象XMLHTTPSideBar小工具TypeScript

数据访问

数据访问组件集延伸存储引擎(Entity Framework) WCF Data ServicesMicrosoft Sync FrameworkJet数据库引擎OLE DB

网络

Winsock(LSP) Winsock KernelFiltering Platform网络驱动程序接口规格(NDIS)Windows Rally智能型背景传输服务Windows Vista 对等通信 APIActive Directory Service Interface

通信

信息 API电话 API

管理

Win32 consoleWindows Script HostWMIWindows PowerShell工作调度程序Offline FilesShadow CopyWindows InstallerWindows错误回报事件记录器Common Log File System

组件与模型

COMCOM+ActiveXDistributed COM.NET Framework

MFCATLWTL

驱动程序开发

Windows Driver Model(Broadcast Driver Architecture) Windows Driver Foundation(KMDFUMDF)

安全性

Crypto API(CAPICOM) Windows CardSpaceData Protection APISecurity Support Provider Interface

.NET

.NET FrameworkAJAXRemotingWPFWFWCFWindows CardSpaceXNASilverlightTask Parallel Library

软件工厂

EFx FactoryEnterprise Library复合用户界面CCFCSF

进程间通信

MSRPC具名管道内存映射档动态数据交换MailSlot

可协助性

Active Accessibility用户界面自动化

文字与多语系支持

Text Services FrameworkText Object Model输入法编辑器语言接口包多语系用户界面Uniscribe

游戏开发

Direct3DD3DXDirectSoundDirectInputDirectPlayDirectMusicManaged DirectXMicrosoft XNA

1995年2月,微软收购了英国的Rendermorphics公司,将RealityLab 2.0技术发展成Direct3D标准,并整合到Microsoft Windows中,Direct3D在DirectX 3.0开始出现。后来在DirectX 8.0发表时与DirectDraw编程接口合并并改名为DirectX Graphics。


相关文章推荐:
Windows 95 | Windows NT | 显示接口 | 源代码 | 编程接口 | 顶点着色引擎 | 像素着色引擎 | Windows 95 | DirectDraw | DirectPlay | DirectInput | DirectSound | OpenGL | 3dfx | OpenGL | HLSL | WDDM | GPU | Windows 7 | Tessellation | Compute Shader | GPGPU | HLSL | nVidia | CUDA | OpenCL | GPGPU | GPU | ATI | Nvidia | .NET Framework | WPF | GPU | Windows 7 | WDDM | Memory pool | WinG | OpenGL | HLSL | WDDM | 桌面窗口管理器 | DirectX | WPF | Windows色彩系统 | DirectSound | DirectMusic | XACT | DirectShow | Windows Media | Media Foundation | MSHTML | JScript | VBScript | XMLHTTP | TypeScript | WCF Data Services | Microsoft Sync Framework | Jet数据库引擎 | OLE DB | Winsock | LSP | Winsock Kernel | WMI | Windows PowerShell | Offline Files | Windows Installer | 事件记录器 | COM+ | ActiveX | .NET Framework | MFC | ATL | WTL | Windows Driver Foundation | KMDF | UMDF | CAPICOM | Windows CardSpace | .NET Framework | AJAX | Remoting | WPF | WF | WCF | Windows CardSpace | XNA | Silverlight | Enterprise Library | CCF | 动态数据交换 | 输入法编辑器 | Uniscribe | D3DX | DirectSound | DirectInput | DirectPlay | DirectMusic | Managed DirectX | DirectX 8.0 |
相关词汇词典