d3d

d3d

显示程序接口
D3D(Direct3D):是微软为提高3D游戏在Windows中的显示性能而开发的显示程序接口,目前已经升级到11.2版本,它提供了丰富的3D功能库,是游戏广泛采用的标准。3D加速卡就是硬件,也就是我们常说的显卡。而操作系统和应用软件通常不能直接去使用显卡和其中的3D加速功能,必须通过系统中的一个接口去调用,这就是OPENGL和D3D的作用了。
    软件名称: 软件平台: 软件语言: 开发商: 软件授权: 软件版本: 软件大小: 中文名:3D加速卡 外文名:Direct3D 缩写:d3d 类属:显示程序接口

相关参数

OPENGL和D3D对下可以通过显卡驱动程序操作显卡,对上可以为操作系统和各种应用程序提供各种显示用的接口函数和显示功能。

操作系统和应用软件(包括游戏)不需要知道这台电脑用的什么显卡,只需要调用OPENGL或D3D提供的接口函数和功能就能实现显示功能,通过这种分工合作,极大的降低了软件开发周期和成本。

比如需要在显示器上画出一个三维的正方体,不需要程序人员针对不同的显卡去写大段的代码,只需要调用OPENGL或D3D的一个函数并把一些相关的参数发给他们,由他们去完成这个事情就可以了。

OPENGL和D3D本质虽然一样,但却是不同的两个标准。

OpenGL是有着丰富经验的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。

目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件SoftImage和3DStudioMAX、仿真软件OpenInventor、VR软件WorldToolKIT、CAM软件ProEngineer、GIS软ARC/INFO等等。

为DX10和WindowsVista提供的显示硬件必须满足DX10的所有硬件特性。这样对于开发者就比较可以放心的使用各种硬件特性了,很类似Console平台的开发。

效果功能

1.状态对象(StateObject)"从100多个渲染状态中解脱出来吧!"

D3D10对渲染状态这个概念进行淡化,一方面使用全Shader化的架构使得状态的前后设置和互相影响对渲染成功率降低到最少,另外对API架构也更为简洁,另一方面对一些关键渲染状态进行封装和分类。主要分类有:

InputLayoutObject输入层对象

这个东西很类似D3D9里的顶点声明,也就是对用户输入数据进行整合和系统化

RasterizerObject光栅化对象

这部分主要控制光栅器的行为:填充模式(FILL_MODE),剔除模式(CULL_MODE),多采样,DepthBias等等

DepthStencilObject深度缓冲对象

主要控制深度缓冲的行为,像Z-bufferEnable之类的BlendObject混合对象设置象素混合的方法,类似AlphaBlendSrcAlpha,DestAlpha等等

SamplerObject采样器对象

设置纹理采样状态,包括过滤器和MipMap

2.新的资源访问模式和资源视图(View)概念如果对比D3D9的Shader使用代码和D3D10的类似代码会发现一个不同。

D3D9Shader需要对纹理进行操作时,需要将纹理设置到Shader就可以了,而D3D10里没有那么简单,设置前必须将各种资源整合后为资源创建一个视图,再提交给Shader访问。这种操作在环境贴图里是很有好处的。对于CubeMap的6张纹理就可以采用一个视图设置到设备,而自己要访问每张贴图只要轻松访问视图就可以了,也就是说把资源规整和集成化。

3.新的可编程图形层(Stage)-几何Shader(GeometryShader)

原来的VS和PS只是对逐个顶点或象素进行处理,而新的GS可以对每个顶点或象素的临近顶点设置Shader。也就是可以对批量几何进行处理。

4.设备的创建要求对ViewPort进行设置

D3D9里无需对ViewPort进行设置就可以进行渲染,而且默认的RenderTarget就是后备缓冲,而在D3D10里,这个过程变得更为自主化。取出后备缓冲的格式,将RenderTarget设置为屏幕,这让人感到D3D10设计更趋向于成熟的引擎设计。

5.流输出层(StreamOutputState)

这个层的功能是将VS和GS处理完成的数据输出给用户,由用户进行处理后再反馈给管线继续处理

6.多边形拓扑结构从绘制代码分离

现在可以单独设置拓扑结构g_pd3dDevice->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST)和使用Draw函数绘制了,很类似OpenGL。

7.严格的设备对象创建时间验证

这里的设备对象就是从设备创建出来的资源。为了减少CPU占用,D3D10重新设计了硬件资源调用调度,所有的设备对象都用面向对象的方法被设备管理。这种设计方法避免了在渲染期的资源创建操作。

8.去掉BeginScene和EndScene

这个对于图形API确实多余,Dec2005sdk里提供的文档让人很快想到这只是一个过渡版本,在DXUT的Mesh.Create函数中可以看到一个很有趣的现象:

创建D3D9对象,使用D3DX9里的载入X模型文件的函数载入X文件,将D3D9的模型数据转成D3D10的类型。这样做无非是在告诉我们一个这样的信息,D3D10很有可能提供一种新的模型格式来作为研究使用。

Vista的图形系统Avalon从一些视频上分析,使用了大量的XML,所以新的模型格式很有可能使用XML,并且X格式的解析接口确实不方便。而XML的分析器可以由第三方提供。使得更多的研究人员能更方便的使用这种新格式。

顺便提供一些缩写对应的含义,这些在一些函数前缀会出现:

IA-InputAssemblerState

SO-StreamOutputState

OM-OutputMergerState

VS-VertexShader

PS-PixelShader

GS-GeometryShader

GS的用途

点精灵

动态粒子系统

皮毛系统

卷积阴影

单Pass渲染到球形贴图

逐多边形材质交换

逐多边形材质设置

相关词条

相关搜索

其它词条