王朝百科
分享
 
 
 

d3d

王朝百科·作者佚名  2010-02-11  
宽屏版  字体: |||超大  

3D加速卡就是硬件,也就是我们常说的显卡。

而操作系统和应用软件通常不能直接去使用显卡和其中的3D加速功能,必须通过系统中的一个接口去调用,这就是OPENGL和D3D的作用了。

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

操作系统和应用软件(包括游戏)不需要知道这台电脑用的什么显卡,只需要调用OPENGL或D3D提供的接口函数和功能就能实现显示功能,通过这种分工合作,极大的降低了软件开发周期和成本。比如需要在显示器上画出一个三维的正方体,不需要程序人员针对不同的显卡去写大段的代码,只需要调用OPENGL或D3D的一个函数并把一些相关的参数发给他们,由他们去完成这个事情就可以了。

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

OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。目前,包括Microsoft、SGI、IBM、DEC、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品,其中比较著名的产品包括动画制作软件Soft Image和3D Studio MAX、仿真软件Open Inventor、VR软件World Tool Kit、CAM软件ProEngineer、GIS软ARC/INFO等等。

Direct3D (D3D):是微软为提高3D 游戏在Windows中的显示性能而开发的显示程序,目前已经升级到10.0版本,它提供了丰富的3D功能库,是游戏广泛采用的标准。

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

的开发。

3.状态对象(State Object)

"从100多个渲染状态中解脱出来吧!"

D3D10对渲染状态这个概念进行淡化,一方面使用全Shader化的架构使得状态的前后设置和互相影响对渲染成功率降低到最少

另外对API架构也更为简洁,另一方面对一些关键渲染状态进行封装和分类。主要分类有:

Input Layout Object 输入层对象

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

Rasterizer Object 光栅化对象

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

DepthStencil Object 深度缓冲对象

主要控制深度缓冲的行为,像Z-buffer Enable之类的

Blend Object 混合对象

设置象素混合的方法,类似AlphaBlend SrcAlpha ,DestAlpha等等

Sampler Object 采样器对象

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

4.新的资源访问模式和资源视图(View)概念

如果对比D3D9的Shader使用代码和D3D10的类似代码会发现一个不同。

D3D9 Shader需要对纹理进行操作时,需要将纹理设置到Shader就可以了,而D3D10里没有那么简单,设置前必须将

各种资源整合后为资源创建一个视图,再提交给Shader访问。这种操作在环境贴图里是很有好处的。对于CubeMap的6张纹理

就可以采用一个视图设置到设备,而自己要访问每张贴图只要轻松访问视图就可以了,也就是说把资源规整和集成化。

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

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

GS的用途有:

点精灵

动态粒子系统

皮毛系统

卷积阴影

单Pass渲染到球形贴图

逐多边形材质交换

逐多边形材质设置

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

D3D9里无需对ViewPort进行设置就可以进行渲染,而且默认的RenderTarget就是后备缓冲

而在D3D10里,这个过程变得更为自主化。取出后备缓冲的格式,将RenderTarget设置为屏幕

这让人感到D3D10设计更趋向于成熟的引擎设计。

7.流输出层(Stream Output State)

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

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

现在可以单独设置拓扑结构

g_pd3dDevice->IASetPrimitiveTopology( D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST );

和使用Draw函数绘制了,很类似OpenGL

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

这里的设备对象就是从设备创建出来的资源。为了减少CPU占用,D3D10重新设计了硬件资源调用调度,所有的设备对象都用面向对象的方法被设备

管理。这种设计方法避免了在渲染期的资源创建操作。

10.去掉BeginScene和EndScene

这个对于图形API确实多余

Dec2005 sdk里提供的文档让人很快想到这只是一个过渡版本

在DXUT的Mesh.Create函数中可以看到一个很有趣的现象:

创建D3D9对象,使用D3DX9里的载入X模型文件的函数载入X文件

将D3D9的模型数据转成D3D10的类型。这样做无非是在告诉我们一个

这样的信息,D3D10很有可能提供一种新的模型格式来作为研究使用

。Vista的图形系统Avalon从一些视频上分析,使用了大量的XML,所以

新的模型格式很有可能使用XML,并且X格式的解析接口确实不方便。而

XML的分析器可以由第三方提供。使得更多的研究人员能更方便的使用

这种新格式。

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

IA-Input Assembler State

SO-Stream Output State

OM-Output Merger State

VS-Vertex Shader

PS-Pixel Shader

GS-Geometry Shader

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格​十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有