C#视频教程:OPENGL虚拟仿真技术概览

本节最重要的一个内容,就是让视野可以平移+旋转+缩放(就像打CS游戏一样以第一人称视角去观察物体,如果可能的话W,S,A,D四个按键控制人物移动,还有鼠标控制视角),本节最重要的一个概念就是设置观察视角(gl.LookAt函数,这个函数一共有九个参数,我们可以分成三组,第一组XYZ表示了眼睛的位置,第二组XYZ表示了物体的XYZ,第三组代表人眼睛的朝向,正常为(0,1,0),如果不用眼睛而是用相机作比喻,相机正常安装放置,也可以倒180度安装放置,则对应参数为(0,-1,0),也可以斜着放置,总之三个参数可以描述相机的放置方法)

C#应用视频教程2.3 OPENGL虚拟仿真介绍_加载


在测试这九个参数之前,我们仍然要做一些初始化的工作(在OpenGLInitialized方法中做比较典型)有一个函数Perspective,还有一个函数MatricxMode,都先照着抄,意义大致就是设置为第一人称的观察模式

C#应用视频教程2.3 OPENGL虚拟仿真介绍_缩放_02


在程序加载的时候,要设置初始的九个参数值(为了对比测试结果,先按照下面的做,我们只是让眼睛的Z有一个数值,其他都保持为1,除了UP_Y是1,最后三个参数一般设置为0,1,0即可)

C#应用视频教程2.3 OPENGL虚拟仿真介绍_缩放_03


仅仅修改眼睛的三个数值,同时把眼睛的位置用一个小球画出来,把观察点也用小球画出来(目前的观察点是不变的,保持为0),感受(你的人在平移,没有转头,低头,抬头,注意只是位置在平移,你眼睛始终盯着那个绿色的小球)

C#应用视频教程2.3 OPENGL虚拟仿真介绍_3d_04


再来做一个简单的测试,我们如果让ViewEyeX和ViewObjectX同时移动会怎样?可以发现确实能够实现平移运动(就相当于你在平移视图)

C#应用视频教程2.3 OPENGL虚拟仿真介绍_资料下载_05


如果勾选Y参与则为往另一个方向平移运动

C#应用视频教程2.3 OPENGL虚拟仿真介绍_缩放_06


Z参与的效果就是缩放(可以想象绿色的小球一开始在画布的Z=0的位置,而且画的底平面也是Z=0的位置,你把眼睛和视角的坐标同步往前推,绿色的小球就跑到了底平面的后面,所以看不到了,而你的眼睛还在往前走,所以看到的底平面越来越大,感觉在缩放),当然如果你不让Z参与,仅仅动Eye_Z,也是能实现缩放的,而且缩放效果更明显,因为观察的点不变,人在往前走,就像你本来墙上有一行字看不清,你凑上去看(而勾选Z参与的效果更像是墙上有一行字,你往前凑上去看,这行字也后退,你只是看到墙越来越近了),具体是否勾选Z参数来设置缩放后面介绍。

C#应用视频教程2.3 OPENGL虚拟仿真介绍_缩放_07


再来思考一个问题,如果我们始终不修改lookat的九个参数,只是在实际绘图之前加入一个平移+一个旋转的变量,会怎么样?(你的眼睛和观察点都保持不变,但是实际上绘图开始点却每次都在变),将这个之前需要明确一个很重要的概念。OPENGL中如果用PushMatrix和PopMatrix包起来的则是不影响外面的(比如我没有把绘制之前的平移用这个包起来,则会对后面所有绘制的东西产生影响,相反我在绘制底平面,小球之类的东西时候,只要用这个包起来,我包起来的部分不管怎么平移+旋转,对外来说都等于没有改变画笔的位置和姿态)

C#应用视频教程2.3 OPENGL虚拟仿真介绍_加载_08


可以证明也是能实现平移,缩放,旋转的,注意其实本质是一样的(你要看更大的效果,要么你走近了看,要么你把画布挪近了看,你要看画布翻转,要么你人围着画布走一圈,要么你把画布绕着他自己中间转一圈等等)。注意不要修改UP_X,UP_Y,UP_Z的值,一般相机的安装位置固定了之后,参数就应该是固定的,你改了这三个参数,那么前面的说法就不成立了(比如我给了一个UP_X的不是零的值,我再测试Trans_X的时候就不是标准的X方向平移了),实际上改完之后相机到底是什么样一个效果也不好说(比较牛逼的软件MAYA,3DMAX会给出一个相机的图示,告诉你当前相机就是这么安装的,我们不做特别复杂的应用,不会用到调相机参数的问题)

C#应用视频教程2.3 OPENGL虚拟仿真介绍_加载_09


毋庸置疑,我们绘图的中心位置就是平移和旋转的坐标系中心点(前后,左右,绕Z轴翻转,而且能够看到大部分我们需要的视角就够用了,这种方法比前面去分析九个参数要简单的多)

C#应用视频教程2.3 OPENGL虚拟仿真介绍_初始化_10


在附件的参考代码中有一个cameraRove的范例程序,他总结了类似于CS的第一人称视角,但是实现的还不够完整,感兴趣的读者可以自己深入研究实现的原理,我个人只能看懂一部分(我把他的九个参数都用文本框采集出来了,实际上在修改视图的时候只有m_ViewX和m_ViewZ在动,具体怎么动的就感觉很复杂了)

C#应用视频教程2.3 OPENGL虚拟仿真介绍_3d_11


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空