将Glut鼠标坐标转换为opengl

问题描述 投票:0回答:1

我有一个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但最终会翻转所有内容。

c++ opengl glut
1个回答
3
投票
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)

© www.soinside.com 2019 - 2024. All rights reserved.