鼠标移动opengl
Posted
技术标签:
【中文标题】鼠标移动opengl【英文标题】:mouse movement opengl 【发布时间】:2011-04-20 18:16:52 【问题描述】:我正在使用普通的 OpenGL(无外部工具)创建一个用 C++ 编写的台球游戏,但我可以使用 GLUT。我画了一个台球杆,我想跟随鼠标光标,但我不知道该怎么做。
我知道如何使用键盘输入来移动物体,例如相机位置或绘制对象,但我 我不确定如何使用鼠标输入移动对象。
这是我试图通过鼠标输入移动的提示:
void cue ()
glBegin;
glTranslatef(-10,5,0);
glRotatef(90,0,1,0);
glutSolidCone(0.25, 15, 20, 20);
glEnd();
【问题讨论】:
你说 cue 的意思是排队吗?我不敢编辑它。 不,它的意思是提示...您在斯诺克或台球中使用的球杆的名称 :) @nightcracker: pool cue 请不要使用 glutSolidCone,很别扭。另外我建议你远离 GLU。 GLU 和 GLUT 都严重过时,如今几乎没有人使用它们。 GLUT 不是 OpenGL BTW 的一部分(GLU 也不是,但它们倾向于共同发布)。 这里有一个非常相似的问题:***.com/questions/5835372/moving-a-pool-cue这是一个家庭作业吗? 【参考方案1】:Glut有几个鼠标回调函数Mouse callback Motion callback
您可以使用回调来计算鼠标的移动,剩下的就是纯数学。
【讨论】:
【参考方案2】:NeHe 有一个介绍 OpenGL 旋转基础的教程:http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=04
如果您想绕另一点旋转,请参阅How to change the Center-of-Rotation in OpenGL。它基本上归结为:
翻译它,这样你就明白了 想旋转是在 原点,然后旋转,然后平移 到你想要的位置。
还可以使用 glPushMatrix/glPopMatrix 或 glLoadIdentity 来隔离转换。
【讨论】:
【参考方案3】:澄清一下:OpenGL 既不是建模库,也不是场景图。 OpenGL 所做的只是将点、线和三角形扔到图像缓冲区中。
因此,纯粹使用 OpenGL 是不可能的。您需要某种建模代码来创建由三角形组成的模型。帮自己一个忙,然后:
使用 3D 建模器为您的对象建模 将它们导出为您可以阅读的文件格式 在您的程序中读取这些文件并将网格从那里发送到 OpenGL任何物理模拟(以及您的台球游戏都需要)都需要访问对象的几何体。如前所述,OpenGL 不会建模,因此无论您使用 OpenGL 绘制什么,仅将其发送到 OpenGL 都不会使其可供物理模拟访问。
无论如何,您的代码都是错误的:在glBegin(...)
和glEnd()
之间只允许调用顶点规范。那里不允许您拨打glRotate
、glTranslate
和glutSolidCone
。
【讨论】:
我们不允许使用 3d 建模器......它用于分配......我的代码在我运行时也画得很好? @DK10: 嗯,我不知道怎么说,但是谁给你这个任务限制,那是个白痴。原因:因为强迫人们对他们的对象进行编码会让他们对如何使用 OpenGL 产生非常错误的想法。如果你的老师坚持让你使用 GLU 或 GLUT 来画东西,你可以给他我的邮件地址“opengl-dev (at) wolfgang-draxinger (dot) net”,他也可以谷歌“Wolfgang Draxinger OpenGL”。告诉他:“GLUT 已经过时,GLU 不适用于 OpenGL-3 及更高版本”并拒绝学习将来不会从中受益的东西,帮自己一个忙。 @DK10: 顺便说一句:你的代码画了一些东西,是因为你实际上并没有调用 glBegin。您在那里编写的语句只是评估指向函数 glBegin 的指针,然后立即丢弃它。您必须调用 glBegin(GL_TRIANGLES) 才有意义。【参考方案4】:使用一个保持鼠标光标位置的全局变量,然后在两个函数中使用它。
全局变量似乎是 glut 所需的不同函数之间进行通信的唯一方式。鉴于当前的 opengl/glut 结构,没有它们似乎很难做到这一点。
【讨论】:
以上是关于鼠标移动opengl的主要内容,如果未能解决你的问题,请参考以下文章