欢迎来到天天文库
浏览记录
ID:25947004
大小:83.52 KB
页数:17页
时间:2018-11-23
《用DirectD实现三维漫游.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、我们的精彩,全因您的参与—中国游戏开发者.CN用Direct3D实现三维漫游成都理工学院17#岳朝伟朋友,喜欢玩游戏吗?自从计算机诞生以来,人们对计算机游戏就充满了热情,以前对字符型的游戏就乐此不疲,随着时代的发展,人们的要求也越来越高,三维实时游戏和多媒体应用已经成为人们追求的热点。而Microsoft公司推出的DirectX正是这样一个热点的集合。如果你想抓住时代的潮流,并喜欢迎接挑战的话,本文将是一个很好的去处。同时,本人将以此文讲述用Direct3D保留模式的各种编程技巧和应用,而对于有关基本的D
2、irectX的介绍,请参阅相关的文章。程序调试环境:Win98、VisualC++6.0,它们都内嵌了DirectX5.0,同时,为了大家调试的方便和确保程序正常运行,我们将使用最低级的DirectX驱动程序。一、Direct3DRM中的基本概念1.0、Direct3D简介Direct3D是Microsoft公司推出的DirectX的一部分,它又包括立即模式(Direct3DIM)和保留模式(Direct3DRM)。同时,即使是一个最基本的Direct3D例程也必须包含DirectDraw对象,它们是紧密
3、的结合在一起的,因此,你在编写Direct3D应用程序之前还应先对DirectDraw有一定的认识!Direct3D立即模式是一种较低级的三维模式,因而牵涉到各种复杂的三维图形学的知识,而保留模式是建立在一系列的类调用的基础之上,其中大量的底层操作和运算都被封装在这些类当中,因此适合快速的创建一个三维环境并希望能实时的操作它。本程序就是利用它建立了一个可以用方向键控制的三维漫游程序!2.0、Direct3DRM中有关图形学的基本内容介绍 Direct3DRM中牵涉到很多三维图形学的东西,这里本人对程序当
4、中将要涉及到的最重要的部分作一简单介绍,让大家对Direct3DRM尽快的有一个感性的认识。照相机(camera)场景(scene)视点(viewport)框架(frame)的概念及它们之间的关系:(这些概念与一些三维图形软件中的概念相当一致,如3DS ,因此你要是有这方面软件、的使用经验的话,你会更容易的理解这些概念) 框架(frame):它是将各种三维网格托住的支架,同时,它还将灯光,照相机,物体等都虚拟成现实世界中的东西,它们都需要放在某一特定的物理框架上才能被托住,不至于落下来。各个框架之间的关
5、系也非常符合现实世界中的各物体的位置关系,即要想被看见,则它必须在照相机框架的前面,同理,物体要想被灯光照着也必须在灯光框架的前方。各个框架之间可以形成一个树结构,多个框架组合在一起就形成了场景。场景(scene):是一个根框架,场景中的所有其它框架都应建立在它的基础之上,它是所有其它框架的父框架,而它没有父框架,且一个视点只能有一个场景。照相机:它是建立在视点当中的用于可视的框架,在现实世界中可以将它想象成人的眼睛。同时,可以任意设置场景中的任一框架为照相机,方法有两种,一种是在创建Viewport时直
6、接给定某一框架为Camera,二是用Viewport对象提供的SetCamera()设置,因此,当你需要改变不同的视角时就可以用SetCamera()来调整观察的相对视角,但在适时漫游当中无需这样做,用第一种方法就足够了。视点:它是用于决定在场景中的什么位置可以看到物体,这里的物体实质上已经变成了框架,而框架当中往往又包含了某一可见的网格。而视点实质上是一个二维矩形区域,且只有沿X,Y的正方向上可见的区域才能被渲染,且所有可见的物体被着色时都将自动变换成照相机坐标,这一点与人眼的作用相对应。第17页共17
7、页http://mays.6to23.com我们的精彩,全因您的参与—中国游戏开发者.CN某一框架(在场景当中,且能被Viewport所见)框架当中的网格Viewport(视点),Camera附属于Viewport,通过Camera的坐标调整即实现三维漫游同时场景也是相对于Viewport重合的(实质上比Viewport大) 3.0、回调函数 下面介绍一下Direct3DRM当中经常用到的一类函数----回调函数(CallBackfunction),这种函数必须深入理解才能明白Direct3DRM当中
8、的各个调用过程,以后才能自如的添加你自己的代码。回调函数的特殊性:l回调函数的创建不是任意的,都应遵循某一特定的结构和参数列表,且必须以这样的参数形式才能被其它函数正确调用。l回调函数的调用是附属于某一特定的函数,而不能单独使用,且还不能通过跟踪父函数来达到跟踪回调函数的目的,而这样做只能导致回调函数已经执行了。因此为了调试或检验回调函数体的代码,必须采用调试窗口当中的RuntoCursor的方法来调试,这样才能让调试器跟踪进
此文档下载收益归作者所有