2016-12-28 232 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) –

相關問題