2013-05-02 66 views
0

我想創建一個遊戲similare到的圖像的下拉這一個http://www.sciencekids.co.nz/gamesactivities/movinggrowing.html阻力和使用的OpenGL C++

1-如何根據來自鼠標座標移動圖像?我知道如何翻譯我喜歡多邊形而不是圖像的物體?

2-如何檢查,如果它在正確的PLCE並使其卡在那裏 我用gltranslate但圖像沒有動,並試圖copypixl但它一直複製圖像 每一個地方的鼠標點擊。

#include <windows.h> 
#include <GL/glut.h> 
#include <gl/glaux.h> 

#pragma comment(lib,"glaux.lib") 

AUX_RGBImageRec *image ; 
GLsizei wh = 600, ww = 800; 
//----------------------------------------------------------------------------------------------- 
void display(void){ 

    image = new AUX_RGBImageRec(); 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
    image = auxDIBImageLoad(L"boy.bmp"); 
    glDrawPixels(image->sizeX, image->sizeY, GL_RGB, 
    GL_UNSIGNED_BYTE,image->data); 

    glFlush(); 
} 
//----------------------------------------------------------------------------------------------- 
void mouse (int btn , int state , int x , int y){ 

    int h = wh-y ; 
    if(btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN){ 

     /*glPushMatrix();*/ 
     /*glTranslatef(x , h , 0);*/ 
     glRasterPos2i(x,h); 
     glCopyPixels(0,0,image->sizeX, image->sizeY,GL_COLOR); 
     //glPopMatrix();} 
     if(btn == GLUT_LEFT_BUTTON && state == GLUT_UP) { 

      // check if it is in right place to stuck it else will retuen to original place 
     } 
    }glFlush(); 

} 
//----------------------------------------------------------------------------------------------- 
void intiate(){ 

    glClearColor(0.0, 0.0, 0.0, 0.0); 
    glMatrixMode (GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0,ww,0,wh); 
} 
//----------------------------------------------------------------------------------------------- 
void main() 
{ 
glutInitDisplayMode (GLUT_RGB); 
glutInitWindowSize (ww, wh); 
glutInitWindowPosition (100, 100); 
glutCreateWindow ("Inside my Body"); 
intiate(); 
glutDisplayFunc(display); 
glutMouseFunc(mouse); 
glutMainLoop(); 
} 
+0

http://stackoverflow.com/questions/20288861/mouse-drag-object-in-opengl-glut – 2016-03-16 21:25:37

回答

1

1-如何根據來自鼠標座標移動圖像?我知道如何翻譯我喜歡多邊形而不是圖像的物體?

首先和最重要的:請不要使用glDrawPixels。改爲使用紋理,應用於常規幾何體。 OpenGL不處理用戶輸入,所以你必須自己實現鼠標交互。 從不在輸入事件處理程序中放置OpenGL繪圖命令。在輸入事件處理程序中,更改一些變量,設置標誌等,但不繪製。隨着標誌設置,發出重繪,以便您可以繪製更新。

2-如何檢查,如果它在正確的PLCE並使其卡在那裏

OpenGL是一個繪圖API,而不是一個場景圖。你告訴它畫什麼,就是這樣。如果事情看起來並不像你期望的那樣,那麼你並沒有把它們畫出來。

Pro-Tip:將所有的OpenGL命令放在繪圖程序中。不要從其他地方調用任何OpenGL函數。你在initiate函數中做的事情實際上屬於顯示函數。