我正在使用普通的OpenGL(没有外部工具)创建一个用C ++编写的池游戏,但我可以使用GLUT。我画了一个游泳池提示,我想按照鼠标光标,但我不知道该怎么做。
我知道如何使用键盘输入来移动物体,例如相机位置或绘制物体,但我 我不确定如何使用鼠标输入移动对象。
这是我试图通过鼠标输入移动的提示:
void cue () {
glBegin;
glTranslatef(-10,5,0);
glRotatef(90,0,1,0);
glutSolidCone(0.25, 15, 20, 20);
glEnd();
}
答案 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进行此操作。您需要某种建模代码来创建由三角形组成的模型。帮自己一个忙,并且:
任何物理模拟(以及您的游戏池需要一个)都需要访问对象的几何体。正如已经提到的,OpenGL没有建模,所以无论你用OpenGL绘制什么,只需将它发送到OpenGL就不会让它可以被物理模拟所接受。
您的代码无论如何都是错误的:glBegin(...)
和glEnd()
之间只允许进行顶点规范调用。我们不允许您拨打glRotate
,glTranslate
和glutSolidCone
。
答案 3 :(得分:1)
使用一个全局变量来保持鼠标光标的位置,然后在两个函数中使用它。
全局变量似乎是过剩所需的不同功能之间进行通信的唯一方式。考虑到opengl / glut的当前结构,在没有它们的情况下这样做似乎非常困难。