Direct3D

生活百科 2023-01-25 18:02生活百科www.aizhengw.cn

Direct3D

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

基本介绍

  • 外文名:Direct3D
  • 本质:3D规格界面
  • 基础:微软的通用对象模式
  • 开发:微软
  • 套用:多媒体、娱乐、即时3D动画
  • 平台:Windows作业系统

简介

Direct 3D是基于微软的通用对象模式COM(Common Object Mode)的3D图形API。它是由微软(Microsoft)一手树立的3D API规范,微软公司拥有该库着作权,它所有的语法定义包含在微软提供的程式开发组件的帮助档案、原始码中。Direct3D是微软公司DirectX SDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。自1996年发布以来,Direct3D以其良好的硬体兼容性和友好的编程方式很快得到了广泛的认可,现在几乎所有的具有3D图形加速的主流显示卡都对Direct3D提供良好的支持。但它也有缺陷,由于是以COM接口形式提供的,所以较为複杂,稳定性差,另外,目前只在Windows平台上可用。★
Direct3D 界面
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:
  1. Input Assembler:从程式里读取vertex data并将程式提供的vertex buffer倒进pipeline.
  2. 顶点着色引擎(Vertex Shader): Performs operations on a single vertex at a time,像是transformations, skinning,或lighting.
  3. 几何着色器(Geometry Shader): Shader Model 4.0引进了几何着色器,使用Shader资源来处理点、线、面的几何坐标变换,一次最多处理六个点,快速地将模型类似的顶点结合起来进行运算。此一过程无需CPU参与。
  4. Stream Output:将Vertex Shader和Pixel Shader处理完成的数据输出给用户。
  5. Rasterizer: Converts primitives into pixels,再将像素(pixels)输出给pixel shader. The Rasterizer亦可运行其他工作,像是切割非视觉性的像素,or interpolating vertex data into per-pixel data.
  6. 像素着色引擎(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.
  7. 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 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));

注释

  1. ^Direct3D Resources -Memory pool.
  2. ^Direct3D 9.0 pipeline diagram.
  3. ^Direct3D 10 pipeline stages.
  4. ^Direct3D 7 introduces DirectDraw Surface (.dds) format.
  5. ^HLSL in Direct3D 9.0.
  6. ^Microsoft Presents DirectX 10.1 Details at SIGGRAPH. 2007-08-07[2007-08-27].
  7. ^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 Windows
Web
MSHTML·微软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。
上一篇:Erica Ellyson 下一篇:BRONZE 最终章

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有

宫颈癌症状,癌症会传染吗,癌症症状,癌症能治好吗,癌症遗传吗