#include<stdio.h>
#include<windows.h>
#include<glut.h>
#include<glaux.h>
void init(void);
void drawCoordinates(void);
void CALLBACK reshape(GLsizei w,GLsizei h);
void CALLBACK display(void);
void init(void)
{
}
void CALLBACK reshape(GLsizei w,GLsizei h)//回调函数,用于在改变窗口大小时由系统自行调用
//!!注意!!GLsizei为正确类型!而非GLsize
{
glViewport(100,50,w/4,h/2);//视口函数,指定了视口的左下角(在第一象限内,以(0,0)为原点)位置?
glMatrixMode(GL_PROJECTION);//指定哪一个矩阵是当前矩阵
glLoadIdentity();//将当前用户坐标系的原点移到了屏幕中心,类似于一个复位操作
}
void CALLBACK display(void)//回调函数,用于在窗口内显示图像时由系统调用,在窗口大小改变后会被自动调用
{
glClearColor(0.0f,0.0f,0.0f,0.0f);//清理窗口内容,设置背景颜色。由RGBA数字代表颜色;
//绘制图形时尽量避免设置透明图形,因为透明效果显示时需要对图像显示层数进行排序
glClear(GL_COLOR_BUFFER_BIT);//清除缓冲,此参数代表清除颜色缓冲,color改为depth为清除深度缓冲
drawCoordinates();
glFlush();//强制刷新缓冲函数,保证图形绘制命令被执行而不是存储在缓冲区
}
void drawCoordinates(void)//绘制坐标轴
{
glLineWidth(3.0f);//设置绘制线段的宽度
glColor3f(1.0f,0.0f,0.0f);//设置接下来绘制图形的颜色,此为红色
glBegin(GL_LINES);//此函数代表某种图形绘制的开始,参数为所要绘制图形的类型;
glVertex3f(-1.0f,0.0f,0.0f);
glVertex3f(1.0f,0.0f,0.0f);//代表绘制的线段的两个端点在坐标系中的位置
//!!注意!!坐标系中一个单位长度为视口高/宽的1/2
glEnd();//此图形绘制结束
glColor3f(0.0f,1.0f,0.0f);//设置接下来绘制图形的颜色,此为绿色
glBegin(GL_LINES);//此函数代表某种图形绘制的开始,参数为所要绘制图形的类型;
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,1.0f,0.0f);//代表绘制的线段的两个端点在坐标系中的位置
glEnd();//此图形绘制结束
glColor3f(0.0f,0.0f,1.0f);//设置接下来绘制图形的颜色,此为蓝色
glBegin(GL_LINES);//此函数代表某种图形绘制的开始,参数为所要绘制图形的类型;
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(0.0f,0.0f,1.0f);//代表绘制的线段的两个端点在坐标系中的位置
glEnd();//此图形绘制结束
}
void main(void)
{
auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);//glaux函数:设置显示模式,single代表单缓冲,一般用于静态绘制,RGBA表示红绿蓝透明度色彩模式
auxInitPosition(0,0,500,500);//glaux函数:设置窗口位置和大小,前两位代表新建窗口时左上角的位置,后两位代表窗口的宽和高
auxInitWindow("MyWindow");//glaux函数:创建窗口,函数参数为窗口的名字
init();
auxReshapeFunc(reshape);//注册回调函数,使之能被系统调用
auxMainLoop(display);//注册回调函数,使之能被系统调用
}
}