1. 程式人生 > 程式設計 >OpenGL實現滑鼠移動方塊

OpenGL實現滑鼠移動方塊

本文例項為大家分享了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;
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。