⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 direct3d㭦

📁 Delphi技巧
💻
📖 第 1 页 / 共 2 页
字号:
Direct3D起步:教程以及资源指南
                                       微软公司供稿

    Microsoft Direct3D是Microsoft DirectX 2 交互媒体技术的实时三维(3-D)图形组件。DirectX 2包括DirectDraw,DirectSound,DirectInput,以及DirectPlay应用程序编程接口(APIs)。这些技术在Windows 95操作系统中被支持,并且将被合并入下一版发行的Win32 API中。DirectX 2也即将可以在Windows NT操作系统以及Apple  Power Macintosh环境中使用。
    Direct 3D以及其它的DirectX技术意图给程序员们同时提供两个最好的环境─一个底层的,高性能的接口,它同硬件相结合,具有同设备无关的灵活性。对于Direct3D,程序员可以将3-D图形功能揉合在Windows程序中,以充分利用其始终存在的硬件加速性能,同时,程序员们并不需要针对特定的硬件编写特殊的代码。
    当我开始着手学习有关Direct3D的知识时,我被DirectX 2中所包含的材料的数量惊呆了:二进制文件,库文件以及头文件,样例代码和演示游戏,帮助文件,说明文件,以及文档。Direct3D是在SDK中最大的和最复杂的组件。再加上测试人员的邮件,新闻报道,以及第三方的支持等,我发现我自己简直就要被埋葬了。所以尽管我们并不缺少有关Direct3D的信息,但是要想在里面爬梳整理一番并找到自己需要的东西还是非常劳心费时的。这篇文章只是一个有关Direct3D技术,SDK,和资源的概述,起到一个类似街道地图的作用。尽管大多数的信息都可以在文档中被找到,但是,如果你需要制造产品并得到快速的技术咨询,而你又没有足够时间去搜索的话,这篇文章就会对你有所帮助了。
    在你阅读完这篇文章之后,你应该能够回答如下的这些问题:
? 什么是Direct3D?它的主要特性是什么?它对我们的应用程序有所帮助吗?
? 使用Direct3D,我们需要什么类型的计算机?
? 我们需要什么样的背景知识?
? 学习它最快我们需要多少时间?
? 我们从哪里开始入手?在哪里我们能找到更多的信息?
     一旦你品尝到了Direct3D的滋味,就会深深沉溺于Direct3D的3-D编程中,你将会知道如何着手去学习如何将Direct3D的功能添加到你的应用程序中。
 
 运行时的环境
     你需要一台可以运行Windows 95的多媒体计算机或兼容机。对于多媒体的三个组成部分你可能还并不清楚,它们是一个CD-ROM驱动器,一块声卡,以及一块8比特或更高比特的视频卡。
     推荐的系统是一台配备有Inter奔腾90或更高芯片的100%兼容的PC系统,至少要有16MB的内存。
     最小系统是一台配备Inter 486/66芯片的带有8MB内存的兼容机。但是让我们诚实一些:这些配置对于其它的一些DirectX组件或许可以工作得不错,但是我们都知道3-D图形的操作在使用计算机资源时是非常贪婪的,所以在把系统推荐给你的客户之前请先确定在所有的配置上您的应用程序正确可用。
 支持的硬件
     这里是现在被DirectX 2所支持的硬件清单。“被支持”的意思是指DirectX 2支持硬件的部分硬件加速(hardware-acceleration)特性,或是驱动和硬件已经通过DirectX 2组件的测试,并具有相当的性能。它并不意味着具有完美的性能,也并不表示Microsoft或是硬件生产厂商真正书写了驱动和DirectX 2的硬件抽象层(Hardware Abstraction Layer(HAL))。当然,我敢打赌,这些定义相当的好。
? 2-D图形:ATI,Chips & Technologies,Cirrus Logic,Matrox,S3,Tseng Labs,Western Digtal。
? 3-D图形:3DLabs,ATI,Creative Labs,Matrox,Rendition,S3。
? 声音:Aztech,Creative Labs,ESS,MediaVision,Microsoft。
 
 开发环境
     你需要使用Win32 SDK来构造DirectX 2的应用程序。在样例文件带有为Microsoft Visual C++(2.0版或更高版本)所写的makefiles文件,但是,当然它也可以在其它的开发环境中被编译。如果你是一个Watcom C/C++(需要10.05版或更高版本)的用户,请确定你已经查看过样例文件目录中的说明(readme)文件,该文件可以给你一些指导。
     因为Direct 3D以及其它的DirectX 2组件是新出现的技术,所以它们还没有被集成在Windows中。在它们被集成之前,你将不得不在你的应用程序的安装过程中包括它们。在DirectX 2 SDK中对这些你将需要做的事情作了介绍并包含了相应的组件(它们的名称是,有够让人惊讶的,叫做DirectSetup)。
 即将到来的平台
     在不远的将来的某一天,你一觉醒来,会发现太阳高高地照耀着,鸟儿欢乐地歌唱着,同时DirectX 2在Windows NT操作系统和Apple_ Power Machintosh中被支持着。一旦我们得到了确定的日期,我们将会通知你的。嗨,我们别太费劲了,这毕竟是软件工业啊!如果你希望尽早知道有关这些以及其他的Microsoft交互媒体技术发行日期的话,最好的方法就是同交互媒体以及游戏开发者(Interactive Media and Game Developers)网站(Web site):http://www.microsoft.com/DirectX/.相联系。你也将能够得到到现在为止DirectX 2所支持的硬件的最新清单,更多的驱动以及HAL实现变得可以使用。
 架构(Architecture)
 
     这是一张精致的图表,它显示了Direct3D同Windows架构是如何联系的:
 
 Direct3D 结构图
     DirectDraw是针对2-D图形,3-D图形以及视频的Windows的组件引擎。它被应用程序和Direct3D两者直接使用。如果你决定在你的应用程序中使用Direct3D,则你同样需要对DirectDraw有较好的了解。
     硬件抽象层(HAL)是特定硬件代码的老家,它实现一些有益的特性,包括硬件的剪贴以及页面的翻转等。伴随硬件抽象层的是HEL,也叫硬件仿真层(hardware emulation layer),它没有显示在上面的图1中。它包含了所有可以在DirectDraw和Direct3D中使用的功能的软件实现。无论安装了什么硬件,HEL和HAL的组合都允许应用程序从中获得最大的收益,而不用牺牲设备的无关性。程序员可以使用一种标准的方法来编写代码,这种代码无论在什么系统上都会竭尽所能地快速运行。
     在图中表示为“其它的3D APIs或引擎”的一个使用DirectDraw和Direct3D的例子是OpenGL。这是另外一种可从Microsoft中获得使用的3-D技术,它的目标是high-end CAD/CAM以及科学应用程序群体(scientific-application crowd)
     Direct3D着色途径(rendering pipeline)组成了三个模块:灯光模块(the lighting module),变形模块(the transformation module),以及光栅模块(the rasterization module),每种模块都可以在软件中仿真以及被硬件加速,并且能够采用不同的实现方法进行交换(如果需要的话,可以在空中),以适应应用程序独特的需要。Direct3D集成有两种灯光模块,一种变形模块,以及两种光栅模块。
     尽管在图中不是一目了然,Direct3D,它实际上是两种3-D包装的合一体。程序员可以选择高级别的保留模式API(Retained Mode API),也可以选择低级别的立刻模式API(Immediate Mode API)。
 保留模式
     Direct3D保留模式API被设计为用以针对手工操纵的场景和物体提供高级别的服务。它被设置在立即模式的顶部,并且具有一个内置的几何引擎,所以你不需要保留物体的数据库或是它们的内部结构。此引擎也支持一些例如关键帧(key-frame)动画的性能。仅仅只需要少许调用,你就能够在场景中载入预先定义好的物体以及处理。
     优点:你不需要对3-D编程了解太多,所以你可以更快上手进入到编程状态,并且你能够通过编写少量的代码来建立明确的3-D效果。
     缺点:比起立即模式,保留模式速度不够快,也不够灵活。
     如果你仅仅只需要在你的应用程序中添加标准的3-D功能,或是没有时间来开发你自己的复杂的几何函数,则保留模式能更好的满足你的需要。
 立即模式
     Direct3D立即模式API提供同着色和硬件加速器之间的底层的,设备无关的通信。对于那些具有相当多3-D编程经验的开发者,或是对于那些已经存在大量的3-D代码,而希望将它们移植到Direct3D上的开发者来说,立即模式是较好的选择。
     优点:你可以因此进行你自己所希望的场景着色和场景管理。这将给你的应用程序带来更多的灵活性,并且一旦你按照你独特的需要对之进行优化,你就可能得到比较好的性能。
     缺点:你必须自己来完成你的场景的着色和场景管理,并且你将需要了解更多有关3-D编程的知识。
     如果你是一个热门游戏程序员,对编制高性能,更加酷的3-D效果更感兴趣,并且你有你自己的一套开发函数来完成它,那么你可能会嘲笑我们所提供的这套想法是一个优柔寡断的,容易使用的,高级别的接口,那么立即模式中将会到处写着你的名字。
 Direct3D特性以及APIs
     Direct3D的主要特性在下表中列出。
 
 
     为了给你一个更好的想法,以便你能更好的使用保留模式和立即模式进行工作,我已经在下一节理列出了APIs的清单以及对它们的简短的描述。在SDK文档中包含了对于保留模式和立即模式两者的综合详细的API的参考。
 保留模式
 表2列出了一些只针对保留模式的特殊的特性
 在保留模式API集合中可以使用的对象和功能的常规种类包括:
 
     动画:使用动画对象,你可以变动一个可视的,有灯光照明的,以及具有视点的物体的位置,方向以及缩放比例。这是通过设置关键帧来完成的,这些关键帧同位置,方向以及缩放比例操作的时间值相关联。要使物体活动起来,你的程序需要重复不断地调用时间设置函数;然后由系统从关键帧值中计算应该被插入的位置。动画对象可以是群体的,允许同时活动多个对象。
 设备:在Direct3D中,一个设备对象是指通过着色所要显示出来的可见物体。设备能够直接在屏幕上着色,在窗口中着色,或是在应用程序内存中着色。
     色彩模式:保留模式支持两种色彩模式─一种是RGB模式,另一种是单色模式(也叫做平滑(ramp)模式)。如果需要牺牲色彩来获取最大的性能时就需要使用平滑模式。
     表面:一个表面是一个多面体(mesh)中的单个多边形。方法允许你从顶点构造表面,并对之设置色彩,纹理以及表面的材质。表面可以被存储在数组中,以便多个表面进行相同的操作。
     帧:帧用于定位物体的场景。每个物体都有同它的父帧相联系的位置,多个帧组合起来就形成了一个场景。帧以一种分级的方式存在,场景本身是根帧(无父级的帧)。方法允许你建立帧,添加帧,删除帧,也可以获取一帧的父帧和子帧的信息。另外,你可以在子帧和父帧之间进行位置,旋转度的添加或修改,以及缩放变形等。
     灯光:灯光依附于帧,在场景中对可视物体进行照明。有五种类型的灯光可以使用:环境光,直射光,平行光,点光,以及探照灯等。

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -