码迷,mamicode.com
首页 > 其他好文 > 详细

Opengl_12_相机控制

时间:2017-02-02 10:43:24      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:const   spec   ati   相对   设置   没有   ack   targe   电脑   

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_相机控制

标签:const   spec   ati   相对   设置   没有   ack   targe   电脑   

原文地址:http://www.cnblogs.com/liuhan333/p/6360781.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!