2011-04-20 181 views
2

我创建了一个用C++编写的使用普通OpenGL(没有外部工具)的游戏池游戏,但是我可以使用GLUT。我画了一个我想跟随鼠标光标的游泳池提示,但我不确定如何执行此操作。鼠标移动opengl

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

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

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

当你说cue时,你的意思是排队吗?我不敢编辑它。 – orlp 2011-04-20 18:19:08

+0

不,它意味着提示...你在斯诺克或游泳池中使用的棍子的名字:) – DK10 2011-04-20 18:21:53

+1

@nightcracker:[pool cue](http://en.wikipedia.org/wiki/Cue_stick) – genpfault 2011-04-20 18:24:04

回答

1

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

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

2

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

所以纯粹使用OpenGL是不可能的。您将需要某种建模代码来创建由三角形组成的模型。请你帮个忙和:

  • 模型与3D建模
  • 其导出到文件格式,你的对象,你可以阅读
  • 在你的程序读取这些文件并发送网从那里
  • 到OpenGL

任何物理模拟(和你的池游戏都需要一个)需要访问物体的几何。正如已经提到的,OpenGL不会建模,所以无论您使用OpenGL进行绘制,只要将其发送到OpenGL都不会使其可用于物理模拟。

无论如何,您的代码是错误的:只允许顶点规范调用glBegin(...)glEnd()之间。您的电话glRotateglTranslateglutSolidCone不允许在那里。

+0

我们不允许使用3D模型...它的任务.. ..当我运行它时,我的代码也能很好地绘制? – DK10 2011-04-29 18:49:44

+2

@ DK10:呃,我不知道该怎么说,但是谁给了你这个任务的限制是一个白痴。为什么:因为强迫人们*编写他们的对象*给他们一个关于如何使用OpenGL的错误想法。如果你的老师坚持使用GLU或GLUT来绘制东西,那么你可以给他我的邮件地址“opengl-dev(at)wolfgang-draxinger(dot)net”,他也可以谷歌的“Wolfgang Draxinger OpenGL”。告诉他:“GLUT已经过时了,GLU不能和OpenGL-3以及更高版本一起工作”,并且拒绝了解将来不会从中受益的东西,请帮自己一个忙。 – datenwolf 2011-04-29 19:41:07

+0

@ DK10:顺便说一句:你的代码吸引人的是,因为你实际上并没有调用glBegin。你在那里写的语句只是指向函数glBegin的指针,然后立即丢弃它。你必须调用glBegin(GL_TRIANGLES)才有意义。 – datenwolf 2011-04-29 20:14:58