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

邮箱:acetaohai123@163.com

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 C# OpenGL 教程,帮助你入门 OpenGL 编程。 1. 安装 OpenGL 首先你需要安装 OpenGL。你可以从官网下载最新版本的 OpenGL。 2. 创建一个 C# 窗体应用程序 在 Visual Studio 中创建一个新的 C# 窗体应用程序。 3. 添加 OpenGL 库 右键单击项目,选择“管理 NuGet 程序包”,搜索“OpenTK”并安装。 4. 引用 OpenGL 库 在代码中添加以下引用: ``` using OpenTK.Graphics.OpenGL; ``` 5. 初始化 OpenGL 在窗体的 Load 事件中添加以下代码: ``` private void Form1_Load(object sender, EventArgs e) { // 初始化 OpenGL GL.ClearColor(Color.Black); GL.Enable(EnableCap.DepthTest); GL.DepthFunc(DepthFunction.Less); // 设置视口 GL.Viewport(0, 0, glControl1.Width, glControl1.Height); } ``` 6. 绘制图形 在窗体的 Paint 事件中添加以下代码: ``` private void glControl1_Paint(object sender, PaintEventArgs e) { // 清除缓冲区 GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); // 绘制三角形 GL.Begin(PrimitiveType.Triangles); GL.Color3(Color.Red); GL.Vertex3(-1.0f, -1.0f, 0.0f); GL.Color3(Color.Green); GL.Vertex3(1.0f, -1.0f, 0.0f); GL.Color3(Color.Blue); GL.Vertex3(0.0f, 1.0f, 0.0f); GL.End(); // 刷新缓冲区 glControl1.SwapBuffers(); } ``` 7. 运行程序 现在你可以运行程序,并在窗体中看到一个彩色的三角形。 这只是一个入门教程,你可以通过学习 OpenGL 的其他方面来创建更复杂的图形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值