在调整大小窗口时,如何使用鼠标单击来获取图像的坐标



我正在用OpenGL制作游戏,其中包含启动菜单屏幕。游戏按钮纹理图像坐标变化,并且游戏没有启动如何在调整窗口后阻止图像坐标。

这是我的鼠标函数

void mouseClick (int button, int state, int x, int  y)    
{
    if (!menu)
    { 
        xMin = 300, xMax = 400, yMin = 350, yMax = 400;
        if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
        {
            y = height - y;
            if (x >= xMin && x <= xMax && y >= yMin && y <= yMax)
            {
                printf_s("starting 2d Game ");
            }
        }
    }
}

这是我的纹理图像代码

glBegin(GL_QUAD_STRIP);

        glTexCoord2f(0, 0);
        glVertex2f(300, 350);
        glTexCoord2f(1, 0);
        glVertex2f(400, 350);
        glTexCoord2f(0, 1);
        glVertex2f(300, 400);

        glTexCoord2f(1, 1);
        glVertex2f(400,400);
        glEnd();
        glFlush();

这是我的矩阵投影代码:

glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    //gluOrtho2D(0.0, 640.0, 0.0, 440);//dino window
    gluOrtho2D(0.0, 640.0, 0.0, 440);//dino window
    //gluOrtho2D(1.0, 1.0, 1.0,1.0);//house window
    //gluOrtho2D(1.0, 1.0, 1.0, 1.0);//bird window
    glViewport(0, 0, width, height);
    //glViewport(220, 100, 100, 200);

实际上,鼠标点击坐标正在改变。您将必须将鼠标单击位置(x,y)从视口坐标转换为图形坐标(即Ortho2d坐标)。

假设widthheight变量是由系统提供的,每当调整窗口时,请尝试以下内容:

x = x/width * 640;
y = (height -y) / height * 440;

然后测试按钮边界。

实现此操作的正确方法是使用选择缓冲区。

这样,您知道要单击哪个多边形。这不受窗户大小的影响。

相关内容

  • 没有找到相关文章

最新更新