OpenGL学习-2-鼠标事件响应练习工程代码(排错补档)

来源:互联网 发布:淘宝球鞋世家是真的吗 编辑:程序博客网 时间:2024/06/07 20:45
#include <stdio.h>#include <windows.h>#include <GL/gl.h>#include <GL/glaux.h>void init(void);void CALLBACK reshape(GLsizei w,GLsizei h);void CALLBACK OnLButtonDown(AUX_EVENTREC *);void CALLBACK OnLButtonMove(AUX_EVENTREC *);void CALLBACK display(void);void drawCoordinates(void);GLint mx,my; //position of mouse;GLfloat x_angle, y_angle; //angle of eyevoid init(void){}void CALLBACK reshape(GLsizei w,GLsizei h){glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w > h)glOrtho(-1.0f*w/h, 1.0f*w/(GLfloat)h, -1.0f, 1.0f, -1.0, 1.0);//绘制平行投影空间,六个参数分别代表修剪空间的左右下上近远坐标//此处参数的取值是为了保证在窗口大小变化时图形能够适应新窗口的大小变化并且不会扭曲elseglOrtho(-1.0f, 1.0f, -1.0f*h/w, 1.0f*h/(GLfloat)w, -1.0, 1.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void CALLBACK OnLButtonDown(AUX_EVENTREC *event){mx=event->data[AUX_MOUSEX];my=event->data[AUX_MOUSEY];}void CALLBACK OnLButtonMove(AUX_EVENTREC *event)//鼠标位移事件响应{GLint dx,dy; //offset of mouse;dx = event->data[AUX_MOUSEX]-mx;dy = event->data[AUX_MOUSEY]-my;//获取鼠标的位移y_angle += dx*0.01f;x_angle += dy*0.01f;//计算坐标系分别绕两轴旋转的角度并保存display();mx=event->data[AUX_MOUSEX];my=event->data[AUX_MOUSEY];//更新鼠标位移起始点以保证获取的位移正确}void CALLBACK display(void){glClearColor(0.0f,0.0f,0.0f,0.0f);glClear(GL_COLOR_BUFFER_BIT);glRotatef(x_angle, 1.0f, 0.0f, 0.0f);glRotatef(y_angle, 0.0f, 1.0f, 0.0f);drawCoordinates();glFlush();auxSwapBuffers();//利用双缓冲技术交换内外缓冲以避免在图形频繁变化时造成的闪烁}void drawCoordinates(void){glLineWidth(3.0f);glColor3f(1.0f,0.0f,0.0f); //画红色的x轴glBegin(GL_LINES);glVertex3f(0.0f, 0.0f, 0.0f);glVertex3f(1.0f, 0.0f, 0.0f);glEnd();glColor3f(0.0,1.0,0.0); //画绿色的y轴glBegin(GL_LINES);glVertex3f(0.0f, 0.0f, 0.0f);glVertex3f(0.0f, 1.0f, 0.0f);glEnd();glColor3f(0.0,0.0,1.0); //画蓝色的z轴glBegin(GL_LINES);glVertex3f(0.0f, 0.0f, 0.0f);glVertex3f(0.0f, 0.0f, 1.0f);glEnd();}void main(void){auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);auxInitPosition(0,0,500,500);auxInitWindow("gl_1_2");init();auxReshapeFunc(reshape);auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSEDOWN, OnLButtonDown);auxMouseFunc(AUX_LEFTBUTTON, AUX_MOUSELOC, OnLButtonMove);auxMainLoop(display);}

0 0
原创粉丝点击