OpenGL 入门13
2017-01-08 20:49
148 查看
原帖地址:
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);
相关文章推荐
- OpenGL入门13——多边形偏移
- VS2010 下OpenGL配置、测试、入门
- OpenGL入门学习[十]
- OpenGL: CG编程入门
- 【一步步学OpenGL 13】 -《相机空间》
- OpenGL绘图入门
- java程序员的大数据之路(13):Pig入门
- VC6.0下opengl编程入门
- opengl入门教程(2)
- OpenGL入门笔记(六)
- OpenGL (1) 入门
- java入门学习(13)—异常处理
- OpenGL入门学习
- opengl 教程(13) 摄像机坐标系
- OpenGL入门
- OpenGL入门学习——第十课 BMP文件与像素操作
- opengl 入门学习 随笔五
- PHP学习总结(13)——PHP入门篇之常量
- OpenGL入门示例3——黑色背景绘制绿色圆形
- OpenGL学习入门之VS2010环境配置 [转]