2016-12-28 229 views
2

我在openGl中制作了包含开始菜单画面的游戏。问题是当我点击开始游戏按钮(这是一个纹理图像)游戏启动成功,但是当我调整窗口大小然后点击开始游戏按钮纹理图像坐标变化和游戏没有开始如何防止在调整窗口大小后更改图像坐标。如何在调整窗口大小时使用鼠标点击图像坐标?

这里是我的鼠标funtion

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

回答

1

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

假设每当窗口大小即widthheight变量由系统提供的,尝试以下方法:

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

然后测试按钮边界。

+0

非常感谢它的工作<3 –

0

实现此目的的正确方法是使用selection buffer

用这个,你知道哪个多边形被点击。这不受窗口大小的影响。

+0

感谢这个独特的建议,我一定会实现选择缓冲区(Y) –

相关问题