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

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

?

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

?

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

?

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

?

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

?

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

?

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

?

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

?

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

?

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

?

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

?

?

更多教学视频和资料下载,欢迎关注以下信息:

我的优酷空间:

http://i.youku.com/acetaohai123

?

我的在线论坛:

http://csrobot.gz01.bdysite.com/

?

问题交流:

QQ:910358960

邮箱:[email protected]

?

?

时间: 2024-08-03 00:57:30

C#应用视频教程2.3 OPENGL虚拟仿真介绍的相关文章

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

OPENGL的虚拟仿真对于工控自动化的意义很大,虽然市面上有很多的第三方软件比如Solidworks,Mathlab,ProE等等软件可以做仿真,而且能够实现的功能包括了流体分析,力学分析,摩擦力分析等等,这些都是我们自己写一个简单仿真软件无法实现的,然而如果要做一个标准的软件,我们就只能使用C++,C#,JAVA这些软件自己写了. ???? 仿真的意义在于可以提高编程效率,在空间轨迹规划部分,如果不能可视化的数据,我们就无法快速定位到错误,也无法直观的看到自己写的控制程序是否合理(在我的另一个

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

这一部分我们首先实现视图控制(包括了平移/旋转/缩放),前面我们已经讲过,通过lookat一个函数,或者通过translate+rotate两个函数,都能实现视图的控制(两个函数的方式比较简单,但是通用性不够,因为这个更像是画布就像去参观卖房子的模型,你可以把模型随便上下左右移动翻转看外面,但是如果要像第一人称视角到房子里面爬窗户,上房顶,钻地道,这种视角肯定是不够的.可以想象CS游戏中,整个地图场景必然是唯一的,每个游戏玩家都可以控制一组视角,视角的lookat九个参数不同导致了可以仰望,俯瞰

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

三维在理解了如何绘制2D元素之后,我们尝试绘制3D元素. 其实多个三角形也能够成四面体,多个长方形也能够成六面体,所以绘制3D元素的时候,只要顶点数量匹配就行了 ? 这里我们尤其注意,我把绘制之前的三个平移和三个旋转单独拿出来做成变量,如果你的TranslateZ默认值是0的话,你默认看到的是黄色面,如果把TranslateZ设置为负值,则看到了红色,且越来越小,如果把TranslateZ设置为正数,则啥也看不到了.这里读者还需要有一个额外的空间想象能力,就是你的观察视角在哪里.默认的时候你的观

虚拟仿真实验室

1.虚拟仿真实验室的国内现状 虚拟仿真实验室是虚拟现实技术应用研究的重要载体. 随着虚拟实验技术的成熟,人们开始认识到虚拟仿真实验室在教育领域的应用价值,它除了可以辅助高校的科研工作,在实验教学方面也具有如利用率高.易维护等诸多优点.近年来,国内的许多高校都根据自身科研和教学的需求建立了一些虚拟实验室. 对于国内教学型虚拟实验室的建设,有关部门提出如下几点建议: 1.用"平民化"的技术实现教学型虚拟实验室的建设和应用 2.更新实验教学观念,重新认识虚拟实验室 3.切合实际,合理选择开发

虚拟仿真实验教学开启新时代

华锐视点主营业务是为国内政府单位和民营企业提供专业的虚拟现实解决方案,包括:智慧城市综合解决方案.商业地产虚拟仿真系统.数字城市.展览展示.城市规划.数字沙盘.城市应用.三维动画.环幕立体.园林景观.工业流程模拟.Ipad售楼系统.景区三维展示.网络三维展馆.三维培训课件.水利电力GIS系统等一体化的服务以及全方位的解决方案. 随着虚拟仿真技术的发展,虚拟仿真实验教学已成为一种重要的教学方式.它不仅能克服传统实验时间.空间上的限制,还具有极强的交互性,可进行实验过程的指导,实验成绩的统计查询等实

虚拟仿真引擎中的消息机制

 1.虚拟仿真引擎和游戏引擎在消息机制方面的异同 虚拟仿真引擎与游戏引擎极为相似,但又有其不同之处.游戏引擎重在游戏体验,所以60-120HZ的画面刷新率和事件刷新率依然足够.但虚拟仿真引擎不但需要仿真体验,更需要更高速度的消息机制.试想在动作捕捉的应用中,动作捕捉设备的刷新率的典型值是120HZ,或者是需要记录一个设备的运动轨迹,也需要更高的刷新率.但是在中等以上复杂度的渲染中根本无法达到120HZ,同时如果需要进行立体渲染,可以预见渲染速率是不会超过60HZ的,因为超过60HZ的立体渲染

虚拟仿真引擎消息机制

 1.虚拟仿真引擎和游戏引擎在消息机制方面的异同 虚拟仿真引擎与游戏引擎极为相似,但又有其不同之处. 游戏引擎重在游戏体验.所以60-120HZ的画面刷新率和事件刷新率依旧足够.但虚拟仿真引擎不但须要仿真体验.更须要更快速度的消息机制.试想在动作捕捉的应用中,动作捕捉设备的刷新率的典型值是120HZ,或者是须要记录一个设备的运动轨迹,也须要更高的刷新率.可是在中等以上复杂度的渲染中根本无法达到120HZ,同一时候假设须要进行立体渲染,能够预见渲染速率是不会超过60HZ的,由于超过60HZ的立

虚拟仿真调试在线课堂-第一期

目录 虚拟仿真调试在线课堂-第一期 前言.网盘文件说明 一.三菱Q系列编程软件GX works2的安装 二.三菱PLC程序编写演示 三.三菱MX component通讯软件的配置 四.与虚拟仿真环境的信号调试 4.0 整体通讯原理解析 4.1 Ugateway软件的安装 4.2 GX_Works2运行仿真 4.3 Ugateway软件的设置 4.4 运行虚拟仿真模型 五.虚拟设备功能结构分析 六.样例控制程序解析 七.编写控制程序调试教学 虚拟仿真调试在线课堂-第一期 前言.网盘文件说明 网盘文

【转】OpenGL相关函数库介绍

原文:http://blog.chinaunix.net/uid-20638550-id-1909182.html OpenGL 函数库相关的API有核心库(gl).实用库(glu).辅助库(aux).实用工具库(glut).窗口库(glx.agl.wgl)和扩展函数库等. 从图1可以看出,gl是核心,glu是对gl的部分封装.glx.agl.wgl 是针对不同窗口系统的函数.glut是为跨平台的OpenGL程序的工具包,比aux功能强大.扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩