OpenGL|OpenGL实现CS死后的摄像机漫游方式
这里着重介绍对WASD键的响应动作。
因为这个比较简单,呵呵。
对视图矩阵中的 m[3][0] 进行加加减减就可以完成对AD键对应的动作。
对视图矩阵中的 m[3][2] 进行加加减减就可以完成对WS键对应的动作。
简单的写两句代码:
【OpenGL|OpenGL实现CS死后的摄像机漫游方式】
// get the modelview matrix
float mat[4][4];
glGetFloatv(GL_MODELVIEW_MATRIX, (float*)mat);
if(KeyDown('W')){
mat[3][2] += speed;
}
...
glLoadMatrixf((float*)mat);
原理:
模型视图矩阵:由模型矩阵和视图矩阵的乘积得到的。
对于一个3D坐标的变换在数学上可以认为是先乘模型矩阵再乘视图矩阵:(Mmv = Mm * Mv)
然而对于视图矩阵又可以理解为先进行一次仿射变换再进行一次平移变换,
Mv11Mv11Mv1101000
Mv =Mv21Mv11Mv110*0100
Mv31Mv11Mv1100010
0001xyz1
在opengl中摄像机是被固定在世界坐标的原点上的,朝向z的负半轴。
在逻辑上对摄像机的移动其实是对世界的移动来完成的。
通过以上分析得出,对世界移动的最后一步是一次平移,
是不是很简单了。
推荐阅读
- 死结。
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- java中如何实现重建二叉树
- 杀死一只知更鸟
- 《生不带来死不带去》