鼠标移动opengl

时间:2011-04-20 18:16:52

标签: c++ opengl mouse glut

我正在使用普通的OpenGL(没有外部工具)创建一个用C ++编写的池游戏,但我可以使用GLUT。我画了一个游泳池提示,我想按照鼠标光标,但我不知道该怎么做。

我知道如何使用键盘输入来移动物体,例如相机位置或绘制物体,但我 我不确定如何使用鼠标输入移动对象。

这是我试图通过鼠标输入移动的提示:

void cue () {
  glBegin;
  glTranslatef(-10,5,0); 
  glRotatef(90,0,1,0); 
  glutSolidCone(0.25, 15, 20, 20);
  glEnd();
}

4 个答案:

答案 0 :(得分:4)

NeHe有一个教程,涵盖了OpenGL中的旋转基础知识:http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=04

如果您想围绕另一个点旋转,请参阅How to change the Center-of-Rotation in OpenGL。它基本上归结为:

  

翻译它以便指出你   想要绕着旋转   原点,然后旋转,然后翻译它   到你想要的位置。

还可以使用glPushMatrix / glPopMatrix或glLoadIdentity来隔离转换。

答案 1 :(得分:3)

Glut有一些鼠标回调功能
Mouse callback
Motion callback

您可以使用回调来确定鼠标的移动,其余的是纯数学。

答案 2 :(得分:2)

为了澄清:OpenGL既不是建模库,也不是场景图。 OpenGL所做的就是将点,线和三角形投射到图像缓冲区。

因此无法使用OpenGL进行此操作。您需要某种建模代码来创建由三角形组成的模型。帮自己一个忙,并且:

  • 使用3D建模器建模对象
  • 将它们导出为您可以阅读的文件格式
  • 程序中的
  • 读取这些文件并从那里将网格发送到OpenGL

任何物理模拟(以及您的游戏池需要一个)都需要访问对象的几何体。正如已经提到的,OpenGL没有建模,所以无论你用OpenGL绘制什么,只需将它发送到OpenGL就不会让它可以被物理模拟所接受。

您的代码无论如何都是错误的:glBegin(...)glEnd()之间只允许进行顶点规范调用。我们不允许您拨打glRotateglTranslateglutSolidCone

答案 3 :(得分:1)

使用一个全局变量来保持鼠标光标的位置,然后在两个函数中使用它。

全局变量似乎是过剩所需的不同功能之间进行通信的唯一方式。考虑到opengl / glut的当前结构,在没有它们的情况下这样做似乎非常困难。