【OpenGL】三维场景漫游的实现

功能

  • 构建一个三维场景
    可利用glut提供的各种简单形体来搭建,或者读入别的模型,并加入光照效果
  • 用键盘操作一个物体(如一艘飞船,或一个机器人),在三维场景中漫游
    视点可以放在物体上,或跟随物体,利用gluLookAt()函数来实现对视点的控制

思路

1、开始想直接利用OpenGL的glulookAt函数,但发现并不好用
2、之后参考他人资料寻思构造一个摄像机类,通过摄像机类达到控制视点,这部分通过参考LearnOpenGL上的摄像机类进行实现

实验结果

实验效果图

在这里插入图片描述

程序控制键说明

  • w,s,a,d分别控制视点的前进,后推,左移,右移
  • q,e控制视点进行左旋转,右旋转
  • 方向键LEFT、RIGHT、UP、DOWN,视线方向转向左,视线方向转向右,视线方向转向上,视线方向转向下
  • Page_UP、Page_Down,视点位置升高,降低

实验思考

glulookAt()

一般gluLookAt()用于从世界坐标系到眼坐标系的转换,但是由于OpenGL里面模型视图矩阵直接将本地坐标系转换为眼坐标系,所以gluLookAt()应该被用来设置模型视图矩阵,但是有一点得注意了:
gluLookAt()的调用应该在场景绘制初glLoadIdentity()函数调用之后,在所有的glTranslate*()、glRotate*()、glScale*()函数调用之前调用,且只调用一次
参考自以下资料
https://bbs.csdn.net/topics/390124968
https://blog.csdn.net/fyyyr/article/details/79298636

参考资料

首先是是场景漫游:实现场景漫游有两种方式,一种是固定照相机的位置,对整个场景进行变换,例如当人物前进时,其实是通过将整个场景向后平移实现的,转向时,是通过反向旋转整个场景实现的;另一种方式是使照相机在场景中移动,通过gluLookAt()函数设定照相机的位置,可以任意指定照相机的位置和朝向。

源代码

  • 3
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值