鼠标移动打开
mouse movement opengl
我正在使用普通OpenGL(没有外部工具)创建一个用c++编写的台球游戏,但我可以使用GLUT。我已经画了一个台球球杆,我想跟随鼠标光标,但我不确定如何做到这一点。
我知道如何使用键盘输入来移动的东西,例如相机的位置或绘制一个对象,但我我不知道如何使用鼠标输入来移动对象。
这是我试图通过鼠标输入移动的提示:
void cue () {
glBegin;
glTranslatef(-10,5,0);
glRotatef(90,0,1,0);
glutSolidCone(0.25, 15, 20, 20);
glEnd();
}
Glut有几个鼠标回调函数
鼠标回调
动作回调
您可以使用回调来计算鼠标的移动,其余的都是纯粹的数学。
NeHe有一个教程,涵盖了OpenGL旋转的基础知识:http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=04
如果你想围绕另一个点旋转,参见如何在OpenGL中改变旋转中心。它基本上归结为:
翻译一下,使你明白这一点想要旋转的是原点,然后旋转,然后平移到您想要的位置
还可以使用glPushMatrix/glPopMatrix或glloadiidentity来隔离转换
澄清:OpenGL既不是一个建模库,也不是一个场景图。OpenGL所做的就是将点,线和三角形扔到图像缓冲区中。
所以纯粹用OpenGL做是不可能的。您将需要一些建模代码来创建由三角形组成的模型。帮你自己一个忙:
- 用3D建模器对对象进行建模
- 将它们导出为可以读取的文件格式 程序中的
- 读取这些文件并将网格从那里发送到OpenGL
任何物理模拟(你的台球游戏需要一个)都需要访问物体的几何形状。正如已经提到的OpenGL不建模,所以无论你用OpenGL画什么,只是把它发送到OpenGL将不会使它访问物理模拟。
你的代码是错误的:在glBegin(...)
和glEnd()
之间只允许顶点规范调用。
glRotate
, glTranslate
和glutSolidCone
的调用是不允许的。使用全局变量保存鼠标光标的位置,然后在两个函数中使用它。
全局变量似乎是在过剩所要求的不同函数之间进行通信的唯一方法。考虑到opengl/glut的当前结构,没有它们要做到这一点似乎非常困难。
- SendInput()鼠标移动计算
- Win32 发送输入鼠标移动滞后并冻结
- 如何通过拖动鼠标QT检查按钮?鼠标移动事件
- 使用具有设置延迟C++的mouse_event平滑鼠标移动
- Qt将鼠标移动事件转移到新窗口
- Wince 6.0如何在操作系统靴子后移动鼠标指针
- 鼠标单击背景窗口,而无需移动鼠标C
- 如何使用mouseevent在windows登录屏幕中移动鼠标光标
- 移动鼠标会导致事件不更新
- 按下按键或移动鼠标时,游戏速度会减慢
- 如何从用户代码中移动鼠标光标
- 如何在后台窗口中移动鼠标
- 为什么我的SDL 2应用程序中的帧速率减半,除非我在某个位置移动鼠标
- SDL 在没有焦点时不会停止移动鼠标 - SDL C++
- 只有移动鼠标后,ShowCursor才会生效
- CPP Win32移动鼠标,Wont移动到我指定的位置
- 如何在opencv中使用对象跟踪的概念移动鼠标
- 移动鼠标时抖动
- 如何知道如果我已经移动鼠标到左边或右边
- 移动鼠标位置,然后回到开始位置