1.学习在Visual C++ 6.0 中安装glut库
操作截图:
2. 学习、理解glut库中的基本事件:
测试事件glutDisplayFunc();glutSpecialFunc(); 测试程序:
#include<GL/glut.h>
#include<math.h>
#include<stdlib.h>
int angle;
double pi=3.1415;
void init(void)
{
glOrtho(-5,5,-5,5,-1,1);//视野缩放
}
void display(void){
glClear(GL_COLOR_BUFFER_BIT);//清除所有像素glColor3f(1.0,0,0);
int i;
glPushMatrix();//入栈
glTranslatef(0,0,0);
glRotatef(angle,0,0,1);
glBegin(GL_LINE_LOOP);
glColor3f(1,1,0);
for(i=0; i<1000; ++i)
glVertex2f(0.5*cos(2*pi/1000*i),0.5*sin(2*pi/1000*i));
glEnd();
glBegin(GL_LINE_LOOP);
glColor3f(1,1,0);
for(i=0; i<1000; ++i)
glVertex2f(-0.75+0.25*cos(2*pi/1000*i),0.25*sin(2*pi/1000*i));
glEnd();
glBegin(GL_LINE_LOOP);
glColor3f(1,1,0);
for(i=0; i<1000; ++i)
glVertex2f(0.75+0.25*cos(2*pi/1000*i),0.25*sin(2*pi/1000*i));
glEnd();
glBegin(GL_LINE_LOOP);
glColor3f(1,1,0);
for(i=0; i<1000; ++i)
glVertex2f(0.25*cos(2*pi/1000*i),-0.75+0.25*sin(2*pi/1000*i));
glEnd();
glBegin(GL_LINE_LOOP);
glColor3f(1,1,0);
for(i=0; i<1000; ++i)
glVertex2f(0.25*cos(2*pi/1000*i),0.75+0.25*sin(2*pi/1000*i));
glEnd();
glPopMatrix();
glFlush();
}
void Keyboard(int key, int x, int y) //键盘交互
{
if (key == GLUT_KEY_LEFT)
{
angle+=30;
}
if (key == GLUT_KEY_RIGHT)
{
angle-=30;
}
glutPostRedisplay();//重新调用绘制函数
}
void mymouse(int button,int state,int x,int y)
{
if(state==GLUT_DOWN)
{
if(button==GLUT_LEFT_BUTTON)
{
glTranslatef(-0.5,0,0);//左移
}
else if(button==GLUT_RIGHT_BUTTON)
{
glTranslatef(0.5,0,0);//右移
}
glutPostRedisplay();//重新调用绘制函数
}
return;
}
void main(int argc, char **argv)
{
glutInit(&argc, argv); // 初始化工具包
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置显式模式glutInitWindowSize(640,480); // 设置窗口大小
glutInitWindowPosition(100, 150); // 设置窗口位置
glutCreateWindow("旋转平移"); // 创建屏幕窗口
init();
glutMouseFunc(&mymouse);//调用鼠标响应函数
glutDisplayFunc(display); // 注册绘制函数
glutSpecialFunc(&Keyboard);//调用键盘回调函数
glutMainLoop(); // 进入主循环
}
运行结果:
初始位置:
当按下键盘←键时图形逆时针旋转如图:
同理按下键盘→时,图形顺时针旋转。
当点击鼠标左键时,图形向左移动如图:
当点击鼠标右键时,图形向右移动如图:。