【问题标题】:how to get coordinate of image using mouse click when resize window?调整窗口大小时如何使用鼠标单击获取图像坐标?
【发布时间】:2016-12-28 22:31:47
【问题描述】:

我在 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);

【问题讨论】:

    标签: c++ opengl graphics


    【解决方案1】:

    其实变化的是鼠标点击坐标。您必须将鼠标单击位置 (x,y) 从视口坐标转换为绘图坐标(即 Ortho2D 坐标)。

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

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

    然后测试按钮边界。

    【讨论】:

      【解决方案2】:

      实现这一点的正确方法是使用selection buffer

      这样,您就知道点击了哪个多边形。这不受窗口大小的影响。

      【讨论】:

      • 感谢这个独特的建议,我一定会实施选择缓冲区(Y)
      猜你喜欢
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多