【问题标题】:Converting Window coordinates to Axis coordinates in OpenGL在OpenGL中将窗口坐标转换为轴坐标
【发布时间】:2015-11-11 18:02:28
【问题描述】:

我正在 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 的窗口坐标转换为轴坐标和各自的象限?

【问题讨论】:

    标签: c++ opengl window coordinates


    【解决方案1】:

    试试:

    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;
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        如果你试试这个,它应该可以工作:

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

        【讨论】:

        • 您的替代版本适用于 glOrtho(),但不适用于透视变换(而 gluUnproject() 将适用于这两种情况)
        猜你喜欢
        • 2011-11-21
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        • 2011-04-30
        • 2023-03-21
        • 2015-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多