【word】 利用三角函数实现视点控制的算法.doc

上传人:laozhun 文档编号:4175296 上传时间:2023-04-08 格式:DOC 页数:12 大小:23KB
返回 下载 相关 举报
【word】 利用三角函数实现视点控制的算法.doc_第1页
第1页 / 共12页
【word】 利用三角函数实现视点控制的算法.doc_第2页
第2页 / 共12页
【word】 利用三角函数实现视点控制的算法.doc_第3页
第3页 / 共12页
【word】 利用三角函数实现视点控制的算法.doc_第4页
第4页 / 共12页
【word】 利用三角函数实现视点控制的算法.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《【word】 利用三角函数实现视点控制的算法.doc》由会员分享,可在线阅读,更多相关《【word】 利用三角函数实现视点控制的算法.doc(12页珍藏版)》请在三一办公上搜索。

1、利用三角函数实现视点控制的算法18082009,30(7)计算机工程与设计ComputerEngineeringandDesign?计算机应用技术?利用三角函数实现视点控制的算法翟红英,曹维明,程佳琳(1.北京联合大学师范学院电气信息系,北京100011;2.北京市财经学校,北京100009;3.海淀区环境卫生科学研究所,北京100086)摘要:为了增强在虚拟空间进行漫游的真实感,对其实现的核心技术视点控制进行了研究.分析了利用开发工具提供的函数来完成视点控制的优缺点.结合实际开发经验,给出了一种利用三角函数实现视点控制的算法.利用数学三角函数实现视点控制算法,能够使视点控制更符合人的真实视点

2、,为后期真实感绘制的编程降低了难度,增加了灵活性,并且该算法可以很好的移植到其它虚拟现实相关软件的开发中.关键词:虚拟现实;漫游;视点控制;三角函数;算法中圈法分类号:TP391.9文献标识码:A文章编号:1000.7024(2009)07180802RealiztionofviewpointcontrolalgorithmusingtrigonometricfunctionZHAIHongying,CA0Weiming,CHENGJialin(1.DepartmentofElectronicsInformation,TeacherSCollege,BeijingUnionUniversity

3、,Beijing100011,China;2.FinanceSchoolofBeijing,Beijing100009,China;3.HaidianEnvironmentalSanitationScientificResearchInstituteofBeijing,Beijing100086,China)Abstract:Inordertoenhancethevirtualrealityofroamingspace,therealizationofitscoretechnologytocontrolviewpointisstudied.Theadvantagesanddisadvantag

4、esofviewpointcontrolisanalyzedwithfunctionusingthedevelopmentkit.Theactualdevelopmentexpefienceisunified,onekindisgiventorealizetheviewpointcontrolalgorithmusingthetrigonometricfunction.Theviewpointcontrolalgorithmisrealizedusingmathematicstrigonometricfunction,itcancausetheviewpointcontroltoconform

5、topersonSrealviewpoint,reducedthedifficultyforthelaterperiodthirddimensionplanSprogramming,increasedtheflexibility,andthisalgorithmistheverygoodtransplanttoothervirtualrealityrelatedsoftwareSdevelopment.Keywords:virtualreality;roaming;viewpointcontrol;trigonometricfunction;algorithmO引言虚拟现实是利用计算机技术对现

6、实生活中的各个方面进行三维模拟,人们的视觉在这个虚拟空间中进行漫游,从任意角度对虚拟环境中的对象进行观察,从而产生身临其境的感受.实现漫游的核心技术之一就是视点控制.存一个场景中漫游时,看到的物体与场景越来越近,两边的物体在向后退,这就是我们的视点即观察点在场景中的位置发生改变的结果.在视点控制时,可以利用开发工具提供的函数来完成,如OpcnGL中的gluLookAt()函数来控制视点,但在实际开发时,如果要使视点控制更符合人的真实视点,可以利用自己开发的视点控制算法.本人在实现三维校园的漫游系统的开发中就使用了这种方法,达到了非常好的效果.l利用开发工具提供的函数实现视点控制人对世界的综合视

7、觉观察效果,是来源于我们的眼睛.眼睛就像?架摄像机,将外部影像反映到我们的大脑.在j维校园的漫游系统的开发中,使用VC+.net和OpenGL为开发工具.在OpenGL中也有类似于我们眼睛的,H来控制改变视点的观察函数gluLookAt0,在该函数中有视点,目标点和视点方向3个参数,三者之间的关系如图1所示.视点方向目标点视点图1视点,目标点和视点方向的关系其中视点也称为观察点是一个三维坐标量.x量的变化就像是我们在场景中横向移动,Y量的变化就像是我们的身体高度的变化,如游戏中角色的站立,卧倒,z量的变化就像足我们在场景中前后移动.目标点也是一个三维坐标量,目标点的变化,相当于我们人站着不动,

8、头或手中的相机上下左右移收稿日期:2008.09.09;修订日期:20081205.基金项目:北京市教育委员会科技计划面上基金项目(KM200811417014).作者简介:翟红英(1969-),女,北京人,硕士,副教授,研究方向为计算机图形学,虚拟现实,计算机仿真;曹维明(1982-),男,北京人,研究方向为虚拟现实:程佳琳(1985一),女,北京人,研究方向为信息学.E-mail:sflhongying翟红英,曹维明,程佳琳:利用三角函数实现视点控制的算法2009.,3O(7)1809动的效果.视点方向也是一个三维坐标量,实际可以理解成,我们头顶的朝向.如视点方向为Y=I表示我们的头始终是

9、正立的,如果要呈现在飞机转弯看到大地倾斜的效果,那么就需要改变视点方向的x,z值.观察函数gluLookAt0实际对应的是图形学中的视图变换,即通过移动摄像机来改变视点,以此实现虚拟环境中的漫游.LI.AdyCdxO图2视点移动X2利用三角函数实现视点控制算法求证下列等式成立,其中step是移动一次的步长,即step=在实际生活中,某些情况下为了便于拍摄,我们让摄像机保持不动,可以移动要观察的物体,这种方式对应的是图形学中的模型变换,同样可以进行视点控制,实现漫游效果.在利用j角函数实现视点控制算法星我们就采用的是模型变换.在这个算法星利用OpenGL中的glRotateff)旋转函数和Tra

10、nslateff)平移函数,结合数学中的正弦函数和余弦函数,实现第一人称视点的前后移动,左右旋转,左右平移,用鼠标和键盘进行控制.具体实现方法如下:2.1在视图类建立两个数组floatcamPos31/视点当前坐标camPos】/视点当前位置的X坐标camPos1】/视点当前位置的Y坐标camPos2】/视点当前位置的z坐标floatcamRot3】/视点当前与各坐标轴的夹角camRotffI/视点与x轴的灾角camRot1】/视点与Y轴的夹角camRot2/视点与z轴的夹角2.2在OnKeyDown0函数中调整以上数组的值将要完成的功能如表1所示,并以下面的程序代码为例.表I完成功能及对应键

11、和鼠标效聚对应键向前走W向后退S向左转A,左箭头,鼠标向右转D,右箭头,鼠标抬头上箭头,鼠标低头下箭头,鼠标沿x轴甲移Q,E沿z轴平移Y,H,HoME,END2.2,1向前走if(nChar=W)camPos1】一=sin(90-.camRot2)*pioverl80)*step;camPos0.=cos(90-camRot2)*pioverl80)*step;以上代码可以使视点向前移动,这时需要特别注意的是:由于建模使用的是顶视图,所以视点在坐标系中XY平面移动.下面将通过几何方法证明代码的正确性,同时证明的过程也是编写程序时的思考过程,视点向前(后)移动的代码就是这么一步一步推导出来的.以

12、图2为例,已知视点沿矢量OD方向以单位模长IIODI为速度移动,明显,此时dx,dy是视点移动时eamPos0,camPos1】的增量.fODlJ变量piover180=PY180,实现由度到弧度的转换.camPos1.-=sin(90-camRotpiover180)stepcamPos0.=cos(90-camRot2)*pioverlSO)*step证明:根据三角函数公式得出:dy=sin(LOOC)l10D0ZAOD=camRot21DOC=90-AOlD.ZDOC=90-camRotU】sin(LDOC)=sin(90.carrotE1)把(90.carnRot2)转换成弧度制,为s

13、in(90-cahootS)*pioverl80)即,sin(DOC)=sin(90.camRot2).pioverl80)lIODII为每次移动的单位长度,在系统中用变量step来表示.step=l1ODI1.dy=sm(D()C)llODll=sin(90-camRot2)piover180)stepdy是camPos1】的增量.camPos1一sin(90-.camRot2)*pioverl80)*step同理可证:camPos0一=cos(90.-camRot2).piover180)step;证毕经过证明,语句camPos1.=sin(90-.camRot2)*pioverl80)*

14、stepcamPos0一=cos(90.camRot2)piover180)step可实现视点沿任意矢量方向向前移动.如果把增量的符号改变,则可轻松实现视点向后移动.即camPos1+=sin(90-camRot2)*pioverl80)*stepcamPos0+=cos(90.camRot2)*pioverl80)*step2.2.2向左,向右转eamRot2是视点绕z轴旋转的角度,camRot2】的增加或减少可使视点向量的方向向左或向右转,实现代码如下:jf(ncha】一VKLEFT”nChar=lA)carrot2-=step;if(ncharVKRIGHTIInChar一D)camR0

15、t【2】+=step;2.2l3抬头,低头camRot0】是视点向量绕x轴旋转的角度,camRot0的增加或减少可模仿人抬头,低头的视线方向.因为人的头部上下转动角度是有限制的,所以在本系统中把抬头,低头的角度限制为一152-59之问,这样做可以增加人机交互时的真实感.if(camRot0>-152)/如果视点与x轴夹角大于.159度,则可以抬头if(nChar=VK-uP)camRot0-=step;(下转第l8l2页)18122009,30(7)计算机工程与设计ComputerEngineeringandDesign(上接第1809页)if(camRot0<-59)/如果视点与

16、x轴夹角大于59度,则可以低头if(nCha-r=VKDO,N)camRot0+=step;2.2.4沿x轴平移,沿z轴平移,每按一次键平移step个像素/沿X轴平移if(nChar=Q)camPos0+=step;if(nCha-=E)camPos0.=sty;/沿z轴平移if(nChar=YlJnChaF=VK_HOME)camPos2一=step;if(nChar=HIlnChaF=VK_END)camPos2+=step;这样,利用数学三角函数及OpenGL的glRotateff)和glTranslatefO两个函数的配合使用,就可以实现视点的移动.上面的代码给出的是键盘操作移动视点.

17、根据当前坐标和鼠标拖拽前的坐标偏移量设置camRot2】,camRot0】的值,来实现鼠标操作移动视点,具体实现代码由于篇幅限制,就不列出了.3结束语在虚拟环境中实现漫游,控制视点可以使用开发工具OpenGL提供的函数gluLookAtO来实现,方便并且可以降低编程难度,在实际开发中也可以使用自己开发的视点移动算法,像本例利用三角函数实现视点控制算法,这样做虽然比使用gluLookAtOi数消耗资源大,因为该算法使用模型变换,所以每次移动视点时都要同时移动整个3D模型.但是,这种方法不用计算视变换,在后期真实感绘制时,灯光的位置不会随着模型的变换而变换,它总是和用户保持不变的相对位置,又降低了

18、解决实际问题的难度.参考文献:【1OpenGL体系评审委员会,MasonWoo.OpenGL编程权威指南M.吴斌,译.3版.北京.r国电力出版社,2001.毛伟东,唐明理.三维游戏设计师宝典M.成都:四川出版集团,2005.郭兆荣,李菁,王彦.VisualC+OpenGL应用程序开发M.北京:人民邮电出版社.2006.DaveShreiner,MasonWoo.JackieNeider,eta1.OpenGL编程指南【M】.徐波,译.北京:机械工业出版社,2006.荣钦科技.Visualc+游戏设计M.2版.北京:北京科海电子出版社,2003.刘涛.基于MFC框架的OpenGL三维图形编程J.电脑编程技巧与维护,2005(10):7275.冯杰.VC下的OpertGL开发框架与应用举例JJ.电脑编程技巧与维护,2004(3):7981.尹立民,王兴东.VisualC+6.0应用编程150例M】.北京:希望电子出版社,2003.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号