今天学习了OpenGL的入门,了解了一下他的流程框架,具体什么什么直接操作硬件啊什么的OpenGL的资料就不讲了,什么时候整理一下。直接进入流程框架:
我们用的glut辅助库,他能让我们减少好多的操作,例如创建窗口,初始化设备,他都为我们建好了。
开始:
1.初始化opengl
2.设置渲染模式为:GLUT_DOUBLE | GLUT_RGBA
3.设置窗口大小,和标题,
4.创建窗口,
5.进入Opnegl里面的初始化。Opengl里面的初始化这里的初始化一定要在创建窗口以后。
6.设置渲染的函数
7.设置变化窗口大小,调整视口的函数
8.主程序循环。
这就是程序的主框架,我们只要把这些内容写入到main函数中,然后再自己实现相关的函数就可以了。是不是给我们带来了很大的方便呢。废话少说。奉上源代码:
#include <gl\glut.h>
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清楚颜色数据和深度数据(清屏)
glBegin(GL_TRIANGLES); //绘制一个三角型
glColor3f(1.0,0,0); //绘制颜色为红色
glVertex3f (0, 0, -2.0); //绘制三角型的一个顶点0,0,-2
glColor3f(0,1.0,0); //同理绘制其他两个顶点
glVertex3f (1, 1, -2.0);
glColor3f(0,0,1.0);
glVertex3f (1, 0, -2.0);
glEnd(); //结束绘制三角型
glutSwapBuffers(); //交换缓冲区。显示图形
}
//初始化
void init (void)
{
glClearColor (1.0, 0.0, 0.0, 0.0); //清理颜色,为黑色,(也可认为是背景颜色)
}
//当窗口大小改变时,会调用这个函数
void reshape(GLsizei w,GLsizei h)
{
//这里小说明一下:矩阵模式是不同的,他们各自有一个矩阵。投影相关
//只能用投影矩阵。(只是目前情况下哦,等我学多了可能就知道为什么了。)
glViewport(0,0,w,h); //设置视口
glMatrixMode(GL_PROJECTION); //设置矩阵模式为投影变换矩阵,
glLoadIdentity(); //变为单位矩阵
gluPerspective(60, (GLfloat)w / h, 0, 1000); //设置投影矩阵
glMatrixMode(GL_MODELVIEW); //设置矩阵模式为视图矩阵(模型)
glLoadIdentity(); //变为单位矩阵
}
int main(int argc, char** argv)
{
glutInit(&argc, argv); //Opnegl初始化
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA); //设置显示模式为双缓冲,RGEBA
glutInitWindowSize (250, 250); //窗口大小
glutInitWindowPosition (100, 100); //窗口位置
glutCreateWindow ("hello"); //创建一个标题为hello的窗口
init (); //初始化资源,这里一定要在创建窗口以后,不然会无效。
glutDisplayFunc(display); //窗口大小改变时的回调
glutReshapeFunc(reshape); //绘制图形时的回调
glutMainLoop(); //主循环。
return 0;
}
在这里只是话了一个三角形。呵呵。