Opengl_12_相机控制

Posted 细语细语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Opengl_12_相机控制相关的知识,希望对你有一定的参考价值。

1,使用键盘控制位置的移动

没有使用
glutSpecialFunc,glutKeyboardFunc因为我这个win32程序。

2,
相机类里面定义了相机的三个方向成员:位置
(position),target向量和up向量

前后移动是最简单的,因为这俩种移动方向和
tartget向量在一条线上,我们只需要从起始位置加上或者减去一定数量的tartget向量即可实现前后移动,target向量本身不会变化。
在加减之前我们是使用一个常量\'步长\' const static float STEP_SCALE = 1.0f;
不管哪个方向的移动都会乘上这个步长,其实就是改变移动速度



左右的移动需要一个和
tartget向量与up向量所在平面垂直的一个移动向量
两种组合:target * up 和 up * tartget,都有一个向量和平面垂直并且方向相反。


上下移动,修改y值就行。

3,
因为修改的是相机的位置,所以相对于观察物体,方向都是相反的。
相机向上移相当于观察物体下移了,相机左移相当于观察物体右移 。
只有前后移动是相同的,相机靠近或远离观察物体也是观察物体机靠近或远离相视角。


4,鼠标拖动调整相机方向:




5,

绕垂直于地面的向量(0,1,0)360度旋转,这个旋转的角度叫做\'水平倾角\',这个向量叫做\'垂直轴线\'。绕一个和地面平行的向量上下旋转,这个倾斜角叫做\'垂直倾角。

鼠标左右滑动改变水平倾角使相机左右旋转,鼠标上下滑动改变垂直倾角使相机抬头低头。有了这两个倾角,我们想以此计算出旋转后最终的target向量和up向量。

6,

xy参数是鼠标在屏幕中的新的位置坐标。我先计算从之前的点到当前点在X和Y轴上的变化。然后将鼠标的位置设置为当前的点坐标作为下次调用的上个点坐标。按比例缩小后更新改变当前水平方向和竖直方向上的倾角。这里使用了一个效果比较好的缩放比例值20.0,但是在,
不同的电脑可能要调整不同的值是旋转的速度看上去合适(改变鼠标灵敏度相当于)。

7,

以上是关于Opengl_12_相机控制的主要内容,如果未能解决你的问题,请参考以下文章

java中的openGL:使用TouchEvent移动相机

使用 OpenGL 定向图形以查看相机

GLFW 相机和鼠标控制

计算机图形学输出图元_12_OpenGL顶点数组

OpenGL相机方向

OpenGL ES 无法正常工作