您的位置:首页 > 编程语言

OpenGL学习-1-GLAUX建窗练习工程代码

2015-03-12 23:10 369 查看
#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);//注册回调函数,使之能被系统调用
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: