将 Glut 鼠标坐标转换为 opengl

Posted

技术标签:

【中文标题】将 Glut 鼠标坐标转换为 opengl【英文标题】:Convert Glut mouse coordinates to opengl 【发布时间】:2015-11-22 02:36:16 【问题描述】:

我的屏幕尺寸为 1000x1000 像素,我正在尝试获取 opengl 坐标。我理解的OpenGL坐标系如下:

(-1,1)     |     (1,1)
           |
 --------(0,0)-------
           |
           |
(-1,-1)    |   (1,-1)

void mouse(int btn, int state, int x, int y)
    float mx = x ;
    float my = y ;
    ox = (mx/1000 -0.5);
    oy = -(my/1000 -0.5);
    switch(btn)
        case GLUT_LEFT_BUTTON:
            if(state==GLUT_DOWN)
                printf("%f\n",mx);
                printf("%f\n",my);
                //p1->setPoint(x, y, 1.0);
            
            break;
    

;

我的窗口分辨率为 1000x1000。当前行为跟踪鼠标,但不完全跟踪。它靠近鼠标着陆,接近 0,0 时更准确。我以为我必须将 - 0.5 更改为 -1 但这最终会翻转所有内容。

【问题讨论】:

添加 1- 完全偏移并反转我的 y 除以 500,而不是 1000 谢谢,我乘以 2 也得到了。 这不是“OpenGL 坐标系”。这通常是标准化的设备坐标。许多不同的图形 API 共享该空间,如果您没有设置任何转换矩阵,这就是您绘制的内容。 【参考方案1】:
void mouse(int btn, int state, int x, int y)
    float mx = x ;
    float my = y ;
    ox = (mx/500-1.0);
    oy = -(my/500 -1.0);
    switch(btn)
        case GLUT_LEFT_BUTTON:
            if(state==GLUT_DOWN)
                printf("%f\n",mx);
                printf("%f\n",my);
            
            break;
    

;

ox = (glutx/(屏幕的一半 x) - 1

oy = -((gluty/(屏幕y的一半) - 1)

【讨论】:

此代码将给出介于 -0.5 和 1.5 之间的值。你需要减去 1.0,而不是 0.5。 感谢我在描述中更改了它但忘记更改代码

以上是关于将 Glut 鼠标坐标转换为 opengl的主要内容,如果未能解决你的问题,请参考以下文章

gluUnProject 尝试将鼠标坐标转换为 opengl 坐标的奇怪行为

Opengl 鼠标点击矩形

当涉及旋转时,将鼠标坐标转换为 OpenGL 中的模型坐标

窗口调整大小后将鼠标位置转换为 2D openGL 中的世界坐标

glm::unProject 将鼠标位置转换为 3 个坐标

从视口坐标转换为 [-1,1]^2 顶点 [OpenGL]