【openGL2021版】摄像机

【openGL2021版】摄像机 

      大家好,我是Lampard猿奋~

      欢迎来到船新的openGL基础系列的博客,今天主要是学习摄像机的概念

 

 

(1)什么是openGL摄像机

(1)openGL摄像机概念

      其实我们讨论的是以摄像机的视角作为场景原点时场景中所有的顶点坐标,也就是观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标

  

(2)如何创建一个摄像机

       要想在OpenGL中顺利的使用摄像机,我们需要借助GLU来构建一个LookAt矩阵,其需要接受三个vec3参数,分别是摄像机的位置向量、目标以及上向量

      大家可能已经注意到我们实际上创建了一个三个单位轴相互垂直的、以摄像机的位置为原点的坐标系,我们可以用这3个轴外加一个平移向量来创建一个矩阵,并且可以用这个矩阵乘以任何向量来将其变换到那个坐标空间,这就是LookAt矩阵的原理从而实现摄像机的系统。

 (3)摄像机的移动

      想要实现摄像头的位置或者视点的移动,我们只需要通过gluLookAt在每一帧绘制之前更新我们摄像头的三个向量参数就可以了

(2)创建一个摄像机

(1)Vector3f数据存储类

      无论是摄像头的位置向量、目标还是上向量,都是一个含有X,Y,Z方向的向量,所以我们可以直接定义一个数据存储类方便存储

       然后再给这个类加一个构造函数就可以了

(2)Camera摄像机类

      然后我们需要在每一帧绘制之前通过gluLookAt来设置摄像机,因此我们需要一个摄像机类,上文可知,我们需要三个Vector3f类的成员变量(位置向量、视线和上向量),以及一个update的方法,在update的方法中,我们取调用gluLookAt方法,从而实现摄像机位置的调整

 (3)在main中实例化摄像机变量

        main中是有一个while循环每一帧去绘制屏幕的,我们只需要先实例化一个摄像头,然后在这个方法里面调用update方法就可以了

(3)摄像机实现前后左右的移动

(1)监听键盘的点击事件

      想要实现FPS游戏的那种移动效果,实际上就是对我们openGL的X轴和Z轴进行改变(Y轴是跳跃或者蹲下才会改变),那么我们首先需要对键盘的‘WASD’的点击事件进行监听

       window在键盘按下的时候会抛出事件WM_KEYDOWN和WM_KEYUP,我们给camera增加几个成员变量,记录此时摄像头的状态,那么在每一帧绘制之前,更新我们摄像机的位置和视线,就能实现我们的效果

(2)计算位置和实现的移动距离

      上文提到我们是在每一帧的时候对摄像头的数据进行更新,那么我们只需要在update函数中计算出移动的距离即可

      以左移为例,我们首先设定一个移动的速度moveSpeed,然后根据持续的事件来算出移动的距离,并依此来调整位置和视线

      我们的mPos和mViewCenter都是Vector3f类型的,所以它们之间的加减乘除符号需要被重载

 (3)实际效果

      其他三个方向也是大致的实现方式,最后看看最终效果:

好啦今天就到这里

点赞,关注!!!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值