1

可能的重复:
Glut 鼠标坐标

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

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

但是当我根据窗口的大小接收到 GLUT 鼠标事件时,我得到不同的坐标。我想要一个相对(相对于窗口)坐标系统。我怎么得到这个?

4

2 回答 2

4

我很确定 glut 会给你窗口空间中的鼠标坐标(即如果窗口是 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;
于 2012-10-12T22:36:54.833 回答
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;
于 2012-10-12T22:36:29.630 回答