如何转换GLUT坐标到窗口坐标

时间:2012-10-12 22:19:49

标签: c++ opengl glut

  

可能重复:
  Glut Mouse Coordinates

假设我有一个600x600的窗口 当我收到鼠标事件时,我不知道鼠标的实际位置是什么,在OpenGL中我使用它来绘制点:

(-0.5,0.5) | (0.5,0.5)
           |
 --------(0,0)-------
           |
           |
(-0.5,-0.5) | (0.5,-0.5)

但是当我收到GLUT鼠标事件时,取决于窗口的大小,我得到不同的坐标。我想要一个亲戚(到窗口)坐标系。我怎么得到这个?

2 个答案:

答案 0 :(得分:4)

我很确定过剩会给你窗口空间中的鼠标坐标(即如果窗口是800x600而鼠标位置在中间,它会给你x:400,y:300),所以如果你想要把它带到你上面发布的opengl空间,你会做以下事情:

float x = (400 / 800) - 0.5f; //0.0
float y = (300 / 600) - 0.5f; //0.0

所以通用版本看起来像这样:

float mouseX = (theGlutMouseXCoordinate / theGlutWindowWidth) - 0.5f;
float mouseY = (theGlutMouseYCoordinate / theGlutWindowHeight) - 0.5f;

答案 1 :(得分:1)

也许我误解了你的问题,或者过度简化了答案,但你不是只想找到类似的东西:

float x = mouse.x / screen.width;  //x now in [0,1]
float y = mouse.y / screen.height; //y now in [0,1]
x-=0.5f;
y-=0.5f;

或者逆转:

float wx = (x + 0.5f) * screen.width;
float wy = (Y + 0.5f) * screen.height;