OpenGL實現滑鼠移動方塊
阿新 • • 發佈:2020-08-19
本文例項為大家分享了OpenGL實現滑鼠移動方塊的具體程式碼,供大家參考,具體內容如下
思路:用變數設定方塊的座標,然後根據滑鼠的位移更改方塊的變數座標。
注意:方塊的繪圖座標系和世界座標系是重合的,滑鼠所在的座標是以視窗的左上角為原點(0,0)的座標系,視窗的左下角的世界座標系為gluOrho2D(left,right,bottom,top)中的(left,bottom)。所以滑鼠的座標(xMouse,yMouse)轉化為世界座標(x,y)為: x = xMouse; y = top - yMouse.且滑鼠位移的Y增量在世界座標系中式減量。
#include <GL/glut.h> #include "Graphics.h" int x1 = 0,y1 = 0,x2 = 100,y2 = 100; //方塊的左下角座標和右上角座標 int x = 0,y = 0; //滑鼠位置 int dx = 0,dy = 0; //滑鼠位移 int b = 0; //判斷滑鼠是否在方塊內 void init() { glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,800.0,0.0,800.0); //視窗左下角的世界座標系為 (0,0) glClearColor(1.0f,1.0f,1.0f); } void test() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f,0.0f,0.0f); glRecti(x1,y1,x2,y2); glutSwapBuffers(); } int inRect(int xMouse,int yMouse) { yMouse = 800 - yMouse; if (xMouse < x2 && xMouse > x1 && yMouse < y2 && yMouse > y1) return 1; else return 0; } void myMouse(int button,int state,int xMouse,int yMouse) { if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { x = xMouse; //xMouse,yMouse是以視窗的左上角為原點(0,0)的視窗座標系中的點 y = yMouse; if (inRect(x,y)) b = 1; } if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) b = 0; //當移動較快時滑鼠會在重新整理間隔移出方塊,所以用DOWN和UP來判斷滑鼠在方塊內 } void moveMouse(int xMouse,int yMouse) { if (b) { dx = xMouse - x; dy = yMouse - y; x1 = x1 + dx; x2 = x2 + dx; y1 = y1 - dy; //滑鼠的視窗座標系和世界座標系的Y軸相反,所以滑鼠向Y軸的正方向移動的時候,在世界座標系是向Y軸的負方向移動 y2 = y2 - dy; x = xMouse; y = yMouse; } } int main(int argc,char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowPosition(0,0); glutInitWindowSize(800,800); glutCreateWindow("Move Square"); init(); glutDisplayFunc(test); glutIdleFunc(test); //移動是動畫,為了流暢,必須開這個 glutMouseFunc(myMouse); glutMotionFunc(moveMouse); glutMainLoop(); return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。