我在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的窗口坐标转换为轴坐标和相应的象限?
答案 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;