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

外文名

Direct3D

平台

Windows操作系统

本质

3D规格界面

应用

多媒体、娱乐、即时3D动画

简介

Direct3D 界面

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:资源所分配的内部存储器空间类型。

Pipeline

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.0

DirectX 2.0

DirectX 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 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.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 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上运行。

Direct3D 与 Windows 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

显示▼隐藏▲查论编微软应用程序开发接口与框架图形接口桌面窗口管理器·DirectX·

Direct3D

·GDI·WPF·Windows色彩系统·Windows Image Acquisition·Windows Imaging Component音乐与音效DirectSound·DirectMusic·DirectX外挂·XACT·Speech API多媒体DirectShow·DirectX Media Objects·DirectX Video Acceleration·Windows Media·Media Foundation·Image Mastering API·Video for WindowsWebMSHTML·微软XML剖析器·RSS Platform·JScript·VBScript·浏览器协助工具对象·XMLHTTP·SideBar小工具·TypeScript数据访问数据访问组件集·延伸存储引擎·(Entity Framework) ·WCF Data Services·Microsoft Sync Framework·Jet数据库引擎·OLE DB网络Winsock(LSP) ·Winsock Kernel·Filtering Platform·网络驱动程序接口规格(NDIS)·Windows Rally·智能型背景传输服务·Windows Vista 对等通信 API·Active Directory Service Interface通信信息 API·电话 API管理Win32 console·Windows Script Host·WMI·Windows PowerShell·工作调度程序·Offline Files·Shadow Copy·Windows Installer·Windows错误回报·事件记录器·Common Log File System组件与模型COM·COM+·ActiveX·Distributed COM·.NET Framework库MFC·ATL·WTL驱动程序开发Windows Driver Model(Broadcast Driver Architecture) ·Windows Driver Foundation(KMDF·UMDF)安全性Crypto API(CAPICOM) ·Windows CardSpace·Data Protection API·Security Support Provider Interface.NET.NET Framework·AJAX·Remoting·WPF·WF·WCF·Windows CardSpace·XNA·Silverlight·Task Parallel Library软件工厂EFx Factory·Enterprise Library·复合用户界面·CCF·CSF进程间通信MSRPC·具名管道·内存映射档·动态数据交换·MailSlot可协助性Active Accessibility·用户界面自动化文字与多语系支持Text Services Framework·Text Object Model·输入法编辑器·语言接口包·多语系用户界面·Uniscribe游戏开发

Direct3D

·D3DX·DirectSound·DirectInput·DirectPlay·DirectMusic·Managed DirectX·Microsoft XNA

相关事件

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