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

阿卜杜勒·瓦哈卜|

我正在包含开始菜单屏幕的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);
Jadh4v

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

假设每当调整窗口大小时系统都会提供widthheight变量,请尝试以下操作:

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

然后测试按钮范围。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章