今天学习了OpenGL的入门,了解了一下他的流程框架,具体什么什么直接操作硬件啊什么的OpenGL的资料就不讲了,什么时候整理一下。直接进入流程框架:
我们用的glut辅助库,他能让我们减少好多的操作,例如创建窗口,初始化设备,他都为我们建好了。
开始:
1.初始化opengl
2.设置渲染模式为:GLUT_DOUBLE | GLUT_RGBA
3.设置窗口大小,和标题,
4.创建窗口,
5.进入Opnegl里面的初始化。Opengl里面的初始化这里的初始化一定要在创建窗口以后。
6.设置渲染的函数
7.设置变化窗口大小,调整视口的函数
8.主程序循环。
这就是程序的主框架,我们只要把这些内容写入到main函数中,然后再自己实现相关的函数就可以了。是不是给我们带来了很大的方便呢。废话少说。奉上源代码:
 #include <gl\glut.h>
#include <gl\glut.h>

 void display(void)
void display(void)


 {
{
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    // 清楚颜色数据和深度数据(清屏)
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    // 清楚颜色数据和深度数据(清屏)

 
    
 glBegin(GL_TRIANGLES);            //绘制一个三角型
    glBegin(GL_TRIANGLES);            //绘制一个三角型
 glColor3f(1.0,0,0);                //绘制颜色为红色
    glColor3f(1.0,0,0);                //绘制颜色为红色
 glVertex3f (0, 0, -2.0);        //绘制三角型的一个顶点0,0,-2
    glVertex3f (0, 0, -2.0);        //绘制三角型的一个顶点0,0,-2
 glColor3f(0,1.0,0);                //同理绘制其他两个顶点
    glColor3f(0,1.0,0);                //同理绘制其他两个顶点
 glVertex3f (1, 1, -2.0);
    glVertex3f (1, 1, -2.0);
 glColor3f(0,0,1.0);
    glColor3f(0,0,1.0);    
 glVertex3f (1, 0, -2.0);
    glVertex3f (1, 0, -2.0);
 glEnd();                    //结束绘制三角型
    glEnd();                    //结束绘制三角型

 glutSwapBuffers();            //交换缓冲区。显示图形
    glutSwapBuffers();            //交换缓冲区。显示图形
 }
}

 //初始化
//初始化
 void init (void)
void init (void) 


 {
{
 glClearColor (1.0, 0.0, 0.0, 0.0);    //清理颜色,为黑色,(也可认为是背景颜色)
    glClearColor (1.0, 0.0, 0.0, 0.0);    //清理颜色,为黑色,(也可认为是背景颜色)
 }
}

 //当窗口大小改变时,会调用这个函数
//当窗口大小改变时,会调用这个函数
 void reshape(GLsizei w,GLsizei h)
void reshape(GLsizei w,GLsizei h)


 {
{
 //这里小说明一下:矩阵模式是不同的,他们各自有一个矩阵。投影相关
    //这里小说明一下:矩阵模式是不同的,他们各自有一个矩阵。投影相关
 //只能用投影矩阵。(只是目前情况下哦,等我学多了可能就知道为什么了。)
    //只能用投影矩阵。(只是目前情况下哦,等我学多了可能就知道为什么了。)

 glViewport(0,0,w,h);        //设置视口
    glViewport(0,0,w,h);        //设置视口
 glMatrixMode(GL_PROJECTION);    //设置矩阵模式为投影变换矩阵,
    glMatrixMode(GL_PROJECTION);    //设置矩阵模式为投影变换矩阵,
 glLoadIdentity();                //变为单位矩阵
    glLoadIdentity();                //变为单位矩阵
 gluPerspective(60, (GLfloat)w / h, 0, 1000);    //设置投影矩阵
    gluPerspective(60, (GLfloat)w / h, 0, 1000);    //设置投影矩阵
 glMatrixMode(GL_MODELVIEW);        //设置矩阵模式为视图矩阵(模型)
    glMatrixMode(GL_MODELVIEW);        //设置矩阵模式为视图矩阵(模型)
 glLoadIdentity();                //变为单位矩阵
    glLoadIdentity();                //变为单位矩阵
 }
}


 int main(int argc, char** argv)
int main(int argc, char** argv)


 {
{
 glutInit(&argc, argv);        //Opnegl初始化
    glutInit(&argc, argv);        //Opnegl初始化
 glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA); //设置显示模式为双缓冲,RGEBA
    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA); //设置显示模式为双缓冲,RGEBA

 glutInitWindowSize (250, 250);            //窗口大小
    glutInitWindowSize (250, 250);            //窗口大小
 glutInitWindowPosition (100, 100);        //窗口位置
    glutInitWindowPosition (100, 100);        //窗口位置
 glutCreateWindow ("hello");                //创建一个标题为hello的窗口
    glutCreateWindow ("hello");                //创建一个标题为hello的窗口
 init ();                                //初始化资源,这里一定要在创建窗口以后,不然会无效。
    init ();                                //初始化资源,这里一定要在创建窗口以后,不然会无效。
 glutDisplayFunc(display);                //窗口大小改变时的回调
    glutDisplayFunc(display);                //窗口大小改变时的回调
 glutReshapeFunc(reshape);                //绘制图形时的回调
    glutReshapeFunc(reshape);                //绘制图形时的回调
 glutMainLoop();                            //主循环。
    glutMainLoop();                            //主循环。
 return 0;
    return 0;  
 }
}
在这里只是话了一个三角形。呵呵。