在OpenGL中将窗口坐标转换为轴坐标

时间:2010-12-23 16:00:56

标签: c++ opengl window coordinates

我在OpenGL中创建一个简单的程序,用鼠标绘制矩形。我的目标是单击某处,拖动鼠标并创建一个矩形,就像在绘画或任何其他设计程序中一样。

我的视图定义如下:

glMatrixMode(GL_PROJECTION);
glOrtho(AXIS_X_MIN, AXIS_X_MAX, AXIS_Y_MIN, AXIS_Y_MAX, AXIS_Z_MIN, AXIS_Z_MAX);

和以这种方式定义的窗口:

glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);

如何将从0到WINDOW_WIDTH以及从0到WINDOW_HEIGHT的窗口坐标转换为轴坐标和相应的象限?

3 个答案:

答案 0 :(得分:5)

尝试:

double x = x_mouse / (double) WINDOW_WIDTH 
           * (AXIS_X_MAX - AXIS_X_MIN) + AXIS_X_MIN;
double y = (1 - y_mouse / (double) WINDOW_HEIGHT)
           * (AXIS_Y_MAX - AXIS_Y_MIN) + AXIS_Y_MIN;

答案 1 :(得分:0)

如果您不想通过“手”进行计算,您可以随时查看这篇小文章,该文章使用GLU库中的一个函数,该函数将在内部完成。

http://steinsoft.net/index.php?site=Programming/Code%20Snippets/OpenGL/no8

答案 2 :(得分:0)

gluUnProject - 将地图窗口坐标转换为对象坐标。 说实话,我几乎不知道它是如何工作的。您可以在此处查看:OpenGL - gluUnProject

此外,如果您尝试这样做,它应该有效:

float coorX = mouseX * width / WINDOW_WIDTH + AXIS_X_MIN;  
float coorY = mouseY * heigth/ WINDOW_HEIGHT + AXIS_Y_MIN;