- 1、本文档共51页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Direct3D程序设计基础ppt整理
Direct3D程序设计基础 几个基本概念 硬件抽象层HAL 硬件抽象层是硬件制造商提供的特定于硬件的接口,Direct3D利用该接口实现对显示硬件的直接访问。就用程序永远不需要访问HAL,Direct3D通过HAL提供的基础结构,为程序员提供一套统一的接口和方法,用于访问图形硬件。 HAL设备 硬件抽象设备是主要的设备类型,它支持硬件加速光栅化以及硬件和软件顶点处理。如果运行Direct3D程序的计算机的显卡支持Direct3D,那么Direct3D程序就会使用HAL执行三维操作。Direct3D HAL设备通过硬件来进行全部或部分坐标变换、光照和光栅化处理模块。 在程序中不需要直接访问图形硬件,而是通过HAL访问图形硬件,由HAL调用显卡驱动程序的函数和方法。 硬件模拟层 HEL可以在软件中模拟某些特性。但是,自从DirectX8.0以后就不再提供HEL了。如果想让游戏 在老式硬件上运行,那只有使用Direct7.0及其HEL,或者自己开发一个硬件模拟设备。DirectX9.0就提供了一个使用由软件开发者编写HEL的接口。这类HEL现在被称为“插件式软件设备”。 软件参考层 Direct3D支持另外一种设备,称为参考设备或称为参考光栅器。只有安装了SDK才会提供参考设备,当一个应用程序在一台未安装SDK的机器上请示参考设备时,会一个NULL参考设备。NULL参考设备什么也不做,所有渲染操作的结果都将呈现一个黑屏。 不同于HAL设备和插件式软件设备,参考光栅器支持所有的Direct3D特性,由于参考设备注重精确实现Direct3D的所有特性,而不注重运行速度,并且参考设备不支持硬件加速,所以使用参考设备绘制图形的速度很慢,不管硬件是否支持,参考光栅器总是通过CPU指令来绘制图形。使用参考设备的目的是为了测试演示Direct3D的特性,例如,如果你想学习Direct3D的某个高级特性,当前硬件又不支持,这时就可以使用参考设备来测试和学习当前硬件不支持的高级Direct3D特性。 有了HAL/插件式软件设备/参考设备这一系列的方法,微软的Direct3D便可保证在缺少3D硬件支持的环境中,仍可以使用同一套API,也就是说,如果当前运行环境中无硬件加速设备,即HAL不可用时,可考虑自己编写插件式软件设备,再退一步,可以使用参考设备,而无论使用哪种设备,操作它们的API都是一样的。 视口(Viewport) 视口是一块二维的矩形区域,三维景物投影为二维图形后,将绘制在这块矩形区域中。在Direct3D中,视口定义了当前Direct3D绘制的目标表面的矩形范围,绘制的图形坐标将被 转换为相对于视口的坐标并绘制于视口中,一般以像素为单位表示视口的长和宽。 像素(pixel) 像素是指图像在屏幕上显示的最小单元,即屏幕上的一个亮点。它亦指在frame buffer中的一个最小图形单元。 分辨率(Resolution) 分辨率是指显示设备所能显示的最大像素个数。 颜色缓冲区(Frame Buffer) 颜色缓冲区是位系统内存或显示内存的一块内存块,它对应于将要的一块二维显示区域。图形绘制过程中,Direct3D完成坐标变换、光照处理和纹理映射,将绘制结构的值存储于颜色缓冲区中,最后通过图形刷新,颜色缓冲区的内容被显示在屏幕上。 前台缓冲区(front Buffer)和后台缓冲区(Back Buffer) 大多数图形显示程序拥有2个颜色缓冲区,我们将当前用于屏幕刷新的颜色缓冲区称为前台缓冲区,而将用于图形?的其他颜色缓冲区称为后台缓冲区。同时拥有前台缓冲区和后台缓冲区的图形显示程序可以同时进行图形绘制和屏幕刷新操作,系统运行性能优于仅有单个颜色缓冲区图形显示程序。 D3D的基本程序结构 D3D程序基本结构伪代码 #included3d9.h Int WINAPI WinMain() { RegisterClass_Window_Class_and_create_a_window();//创建窗口 Initial_Direct3D_object();//初始化D3D While(Is_Running) { Handle_system_message(); if(message==painting) { render();//三维图形绘制 } } Release_Drirect3D_object();//释放D3D占用的资源 } 二、初始化Direct3D程序 在使用Direct3D绘制图形之前,必须初始化Direct3D对象,包括创建并得到一个Direct3D接口,并以此得到一个Direct3D设备接口。 初
文档评论(0)