OpenGL实现CS死后的摄像机漫游方式
2012-07-31 19:39
204 查看
这里着重介绍对WASD键的响应动作。
因为这个比较简单,呵呵。
对视图矩阵中的 m[3][0] 进行加加减减就可以完成对AD键对应的动作。
对视图矩阵中的 m[3][2] 进行加加减减就可以完成对WS键对应的动作。
简单的写两句代码:
原理:
模型视图矩阵:由模型矩阵和视图矩阵的乘积得到的。
对于一个3D坐标的变换在数学上可以认为是先乘模型矩阵再乘视图矩阵:(Mmv = Mm * Mv)
然而对于视图矩阵又可以理解为先进行一次仿射变换再进行一次平移变换,
Mv11 Mv11 Mv11 0 1 0 0 0
Mv = Mv21 Mv11 Mv11 0 * 0 1 0 0
Mv31 Mv11 Mv11 0 0 0 1 0
0 0 0 1 x y z 1
在opengl中摄像机是被固定在世界坐标的原点上的,朝向z的负半轴。
在逻辑上对摄像机的移动其实是对世界的移动来完成的。
通过以上分析得出,对世界移动的最后一步是一次平移,
是不是很简单了。
因为这个比较简单,呵呵。
对视图矩阵中的 m[3][0] 进行加加减减就可以完成对AD键对应的动作。
对视图矩阵中的 m[3][2] 进行加加减减就可以完成对WS键对应的动作。
简单的写两句代码:
// 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)
然而对于视图矩阵又可以理解为先进行一次仿射变换再进行一次平移变换,
Mv11 Mv11 Mv11 0 1 0 0 0
Mv = Mv21 Mv11 Mv11 0 * 0 1 0 0
Mv31 Mv11 Mv11 0 0 0 1 0
0 0 0 1 x y z 1
在opengl中摄像机是被固定在世界坐标的原点上的,朝向z的负半轴。
在逻辑上对摄像机的移动其实是对世界的移动来完成的。
通过以上分析得出,对世界移动的最后一步是一次平移,
是不是很简单了。
相关文章推荐
- 转‘OpenGl鼠标控制摄像机camera实现三维漫游
- OpenGL实现摄像机漫游/三次贝塞尔曲线
- [Unity3D 版本5.X]实现一个自由漫游的摄像机
- OpenGL漫游的实现
- openGL漫游功能简单实现
- 多无线AP用中继方式实现漫游
- NGUI中以添加摄像机的方式实现SCROLL LIST
- MFC对话框程序中使用opengl实现漫游
- 转 在OpenGL中使用gluLookAt实现漫游
- 利用Opengl实现类似于角色漫游的场景
- 用glew,glfw,FreeImag实现opengl画图->第五课 摄像机
- 【OpenGL】用OpenGL shader实现将YUV(YUV420,YV12)转RGB-(直接调用GPU实现,纯硬件方式,效率高) 这段时间一直在搞视频格式的转换问题,终于最近将一个图片的YUV
- 三维世界里的坐标和变换,逆方向旋转移动三维世界的方式来实现3D漫游
- 3D+OpenGL里的光照平面镜面反射以及漫游移动物体位置等的具体实现
- 在OpenGL中使用gluLookAt实现漫游
- 三维漫游控制方式与实现技术
- 无线路由器通过有线扩展信号覆盖范围(非桥接方式),实现无缝漫游
- OpenGL 实现的粒子系统、自由摄像机及Billboard
- opengl实现cs、liang-barsky直线裁剪算法
- 三维漫游控制方式与实现技术