OpenGL学习(一) OpenGL简介

OpenGL简介

OpenGL是一个开放式的、与硬件无关的图形软件包。
OpenGL是一个专业的、功能强大、调用方便的底层三围图形函数库。
OpenGL是一个图形与硬件的接口。


OpenGL主要特点和功能

  1. 建模
  2. 变换
  3. 着色
  4. 光照处理和材质设置
  5. 位图显示、图像增强和纹理映射
  6. 双缓存动画

OpenGL的工作流程

  1. 根据基本图形单元(点、线、多边形、图像和位图)建立景物模型,并且对所建立的模型进行数学描述。
  2. 把景物模型放置于三围空间中的适当位置,设置视点即观察位置。
  3. 计算模型中所有物体的颜色,同时确定光照条件、纹理映射方式等。
  4. 进行图形的光栅化,即把景物模型的数学描述及其颜色信息经消隐和光栅扫描转换使其适合于光栅扫描显示器上显示的像素。

OpenGL开发库的基本组成

Windowns下的OpenGL组件由如下3部分组成。

  • 函数的头文件:gl.h、glu.h、glut.h、glaux.h
  • 静态连接库文件:glu32.lib、glut32.lib、glaux.lib、opengl32.lib
  • 动态连接库文件:Glu.dll、glu32.dll、glut.dll、glut32.dll、opengl32.dll

OpenGL的库函数采用C语言风格,他们分别属于以下不同的库。
1. OpenGL核心库,函数名前缀gl。
2. OpenGL实用库,函数名前缀glu。
3. OpenGL辅助库,函数名前缀aux。
4. OpenGL工具库,函数名前缀glut。
5. Windows专用库,函数名前缀wgl。
6. Win32 API 函数库。


一个简单的OpengGL程序

    glClearColor(0.0, 0.0, 0.0, 0.0);   //设置窗口clear的颜色  黑色 
    glClear(GL_COLOR_BUFFER_BIT);       //clear窗口 
    glColor3f(1.0, 1.0, 1.0);           //设置绘制物体的颜色  白色 
    //glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.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();

这一段程序绘制出了一个简单的正方形。


OpenGL函数的语法

在上一个程序中,OpenGL的函数使用了前缀”gl”,并把组成函数的每个单词首字母用大写形式表示。除此之外OpengGL的函数中有一些不相关的字母(例如glColor3f()和glVertex3f中的“3f”)。这个后缀中的“3”表示这个函数接受3个参数,“f”表示这些参数都是浮点数。
OpenGL的C++或Ada实现不需要完全遵循这种方案。

函数后缀和参数数据类型

后缀 数据类型 典型的对应C语言类型 OpenGL类型定义
b 8位整数 signed char GLbyte
s 16位整数 short GLshort
i 32位整数 int or long GLint,GLsizei
f 32位浮点数 float GLfloat,GLclampf
d 64位浮点数 double GLdouble,GLclampd
ub 8位无符号整数 unsigned char GLubyte,GLboolean
us 16位无符号整数 unsigned short GLushort
ui 32位无符号整数 unsigned int or unsigned long GLuint,GLenum,GLbitfield

OpenGL是一个状态机

常见状态变量有

  • 当前颜色、视图和投影变换
  • 直线和多边形点画模式
  • 多边形绘图模式
  • 像素包装约定
  • 光照的位置和特征
  • 被绘制物体的材料属性

许多表示模式的状态变量可以用glEnable()和glDisable()函数进行启用和禁用。


OpenGL渲染管线

绝大多数OpenGL实现都有相似的操作顺序,一系列相关的处理阶段叫做OpenGL渲染管线。如下图:
OpenGL学习(一) OpenGL简介_第1张图片

显示列表

求值器

基于顶点的操作

图元装配

像素操作

纹理装配

光栅化

片断操作

你可能感兴趣的:(OpenGL)