OpenGL 入门13
来源:互联网 发布:数控机床与编程教程 编辑:程序博客网 时间:2024/06/01 09:56
原帖地址:
http://ogldev.atspace.co.uk/www/tutorial14/tutorial14.html
这篇教程里,我们将学会操控我们的相机在空间中随意移动。我们用键盘来控制相机的位置并且用鼠标来控制相机的朝向。大多数的第一人称射击游戏都是采用这种操作方式,不过让我们暂时专注于实现键盘的控制。
根据游戏界的悠久传统,我们会实现四个方向的键盘控制:前后左右。影响摄像机的变量包括摄像机的位置,up方向以及lookat方向,这里我们只更改摄像机的位置,其他的两个变量保持不变。
是时候来一个全新的API了:
glutSpecialFunc()
这个api会注册一个函数。注册的这个函数在我们按下特定的按钮之后会被调用。这个API支持键盘上的所有按键,包括功能键,方向键以及PAGE-UP/PAGE-DOWN/HOME/END/INSERT。如果你只想使用字母和数字按键的话,记得用glutKeyboardFunc()。
步骤
首先我们在代码里面添加这个按键回调的函数:
static void SpecialKeyboardCB(int Key, int x, int y){ GameCamera.OnKeyboard(Key);}
这个函数里面调用了GameCamera.onKeyboard(key),而这个函数是做啥的呢?
bool Camera::OnKeyboard(int Key){ bool Ret = false; switch (Key) { case GLUT_KEY_UP: { m_pos += (m_target * StepSize); Ret = true; } break; case GLUT_KEY_DOWN: { m_pos -= (m_target * StepSize); Ret = true; } break; case GLUT_KEY_LEFT: { Vector3f Left = m_target.Cross(m_up); Left.Normalize(); Left *= StepSize; m_pos += Left; Ret = true; } break; case GLUT_KEY_RIGHT: { Vector3f Right = m_up.Cross(m_target); Right.Normalize(); Right *= StepSize; m_pos += Right; Ret = true; } break; } return Ret;}
我们发现,这里就是处理我们按键消息的地方。没按一次按键,摄像机的位置就会增加stepSize。计算出新位置之后,记得要将新的位置传送给vertexShader。
我们注册这个按键回调函数的代码如下:
glutSpecialFunc(SpecialKeyboardCB);
0 0
- OpenGL 入门13
- OpenGL入门
- OpenGL 入门
- Opengl入门
- OpenGL 入门
- OpenGL 入门
- opengl入门
- OpenGL入门
- opengl入门
- OpenGL入门
- openGL入门
- opengl入门
- opengl入门
- OpenGL入门
- OPENGL入门
- OpenGL入门
- OpenGl入门
- OpenGL入门
- 远程实习第一周学习总结
- 同时安装python2.x和python3.x用pip
- Oracle优化07-分析及动态采样-DBMS_STATS 包
- 关闭csrf办法
- python数据结构学习笔记-2017-01-08-01-N皇后问题、迷宫问题和跳马问题的递归解决
- OpenGL 入门13
- 翻译:结合卫星图像和机器学习预测贫穷
- JAVA 多线程
- tomcat出现403问题
- Swift-内存管理(初级)
- 深入理解Java虚拟机:垃圾收集
- 一些投资理财渠道(仅供参考)
- 一念永恒 > 第520章 黑色光柱!
- Android textview 属性大全