OpenGL中与鼠标的交互——点击鼠标左键,在鼠标处画点

    下面介绍如何运用实现在鼠标点击处,实现画点。(C++实现)

    

     要将鼠标有关的数据发送给应用程序,则需要将鼠标事件注册到glutMouseFunc(myMouse)。其中myMouse(int button, int state, int x,int y);函数名可以自己制定,在回调函数glutMouseFunc()中替换成相应的函数头就好。但是其中的四个参数是不可缺少的:button:GLUT_LEFT_BUTTON,GLUT_MIDDLE_BUTTON,GLUT_RIGHT_BUTTON,分别指代鼠标左键,中间键(鼠标滚轮),右键;state:鼠标的状态GLUT_UP,GLUT_DOWN;x和y指明鼠标在窗口中的位置(x为鼠标距离窗口左边的像素数,y为鼠标距离窗口顶端的像素数,在计算是为(x,screenLength-y)。)

   
#include<iostream.h>
#include<math.h>
#include<windows.h>
#include<gl/glut.h>

/////////////myInit////////////////////
void myInit()
{
 glClearColor(1.0,1.0,1.0,0.0);
 glColor3f(0.5f,0.4f,0.9f);
 glPointSize(5.0);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 gluOrtho2D(0.0,640,0.0,480);
}
///////////////////myDisplay//////////////
void myDisplay()
{
 glClear(GL_COLOR_BUFFER_BIT);
 glBegin(GL_POINTS);
  glVertex2i(1,1);
 glEnd();
 glFlush();

}
/////////////myMouse///////////////////////
void myMouse(int button,int state,int x,int y)
{
 if(state==GLUT_DOWN)
 {
  glBegin(GL_POINTS);
   glVertex2i(x,480-y);
  glEnd();
  glFlush();
 }
 else if(button==GLUT_RIGHT_BUTTON)
 {
  glClearColor(0.8,0.6,0.7,0.0);
  glClear(GL_COLOR_BUFFER_BIT);
  glFlush();
 }
}
/////////////////main///////////////
void main(int argc,char **argv)
{
 glutInit(& argc , argv);
 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
 glutInitWindowSize(640,480);
 glutInitWindowPosition(100,150);
 glutCreateWindow("sfere");
 
 myInit();
 glutDisplayFunc(myDisplay);
 glutMouseFunc(myMouse);
 glutMainLoop();
}
 

    

 在程序中myDisplay()在测试中如果丢失则会出现,调试通过,而运行过程中出现错误的情况。因此在这里用myDisplay()画了一个点出来。本想用myDispy(int x,int y)画点,但是提示glutDisplayFunc()不接受有参数的myDisplay。因此作罢。在该函数中还可以实现,右键时将窗口的背景色指定为自己规定的颜色。  

你可能感兴趣的:(c,测试,buffer,UP,button)