鼠标移动打开

mouse movement opengl

本文关键字:移动 鼠标      更新时间:2023-10-16

我正在使用普通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, glTranslateglutSolidCone的调用是不允许的。

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

全局变量似乎是在过剩所要求的不同函数之间进行通信的唯一方法。考虑到opengl/glut的当前结构,没有它们要做到这一点似乎非常困难。