opengl入门

来源:互联网 发布:南航 java岗位 编辑:程序博客网 时间:2024/04/30 12:32

基本概念

1,OpenGL:是图形硬件的一种软件接口。通俗点讲就是一套API,调用接口而已,用于图像的渲染。与微软的Direct类似,不过它是跨平台的。
2,OpenGL渲染管线:是指从调用OpenGL图形程序到图形最终渲染到屏幕的实现过程。其实就是OpenGL底层代码执行的一个流程。具体流程是这样的:它首先是一个CS的架构模式,它的程序允许通过网络运行,运行图形程序并发出绘图命令的计算机称为客户机(类似发送者,就是处理逻辑代码与调用API,一般由cpu执行),接收这些命令并执行绘图任务的计算机称为服务器(类似接收者,通过客服端发来的命令完成图形渲染,一般由GUP执行)。如果程序并不通过网络运行,那么客户机同时也是服务器。而渲染过程就是cup不停的往缓冲区送逻辑处理数据,GPU再去执行这些数据进行渲染。一般我们最希望的情况就是cup与GPU都在不停的工作,而如果有任何一方有等待,我们把这种情况称为管线停滞。下面贴个服务端操作流程图,如下:
这里写图片描述
3,GLUT:OpenGL工具库,进一步封装,屏蔽了一些繁琐的操作,简化了窗口,输入等的操作。
4,像素的颜色是储存在一个名为位平面的图形硬件中的,可以采用的储存方式有两种:可以把像素颜色的R,G,B和alpha值直接储存到位平面中,也可以储存一个颜色索引值,用它来引用颜色查找表中的一个颜色项。其实就是一块内存区域被称为颜色缓冲区,通常被计算机所绘制的前一副图像所填充(所以每帧需要清屏)。
5,OpenGL使用的坐标系是右手坐标系,左右手坐标系只有Z的朝向不同,如下图:
这里写图片描述

示例程序

#include "GLTools.h"#include "GLShaderManager.h"#ifdef __APPLE__#include <glut/glut.h>#else#define FREEGLUT_STATIC#endifvoid display(){    glClear(GL_COLOR_BUFFER_BIT);  //清除颜色缓冲区    glColor3f(1.0, 0.0, 0.0);   //设置颜色    glBegin(GL_POLYGON);  //绘制多边形        glVertex3f(0.25, 0.25, 0.0);  //指定顶点        glVertex3f(0.75, 0.25, 0.0);        glVertex3f(0.75, 0.75, 0.0);        glVertex3f(0.25, 0.75, 0.0);    glEnd();    glFlush(); //让缓冲区中的图像最终显示,而不是一直放在缓冲区等待}void init(){    glClearColor(0.0, 0.0, 1.0, 0.0);  //背景颜色    glMatrixMode(GL_PROJECTION);  //指定当前矩阵(一般与glLoadIdentity一起使用)    glLoadIdentity();  //重置当前指定的矩阵为单位矩阵,类似于一个复位操作    /*正交投影(Xmin, Xmax, Ymin, Ymax, Zmin, Zmax),参数指定了投影的长方体,     这个函数简单理解起来,就是一个物体摆在那里,你怎么去截取他。*/    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);}int main(int argc,char* argv[]){    glutInit(&argc, argv);    //窗口初始化    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);  //显示模式:单缓冲,RGB模式    glutInitWindowSize(250, 250);  //窗口大小    glutInitWindowPosition(100, 100); //窗口位置    glutCreateWindow("hello"); //窗口标题    init();    glutDisplayFunc(display); //窗口内容改变时重绘的回调函数    glutMainLoop(); //循环    return 0;}

这里写图片描述

0 0