OPENGL(ubuntu下的实践)——基础篇(2)之红宝书

课前甜点:

这是一些怎么查看Ubuntu下opengl版本,下载的库在哪里,以及怎么编译地一些内容。

为什么阅读OpenGL编程指南(第七版)

我们的目的是从前三章中学习基本概念,并绘制手部模型,因为上一个基础篇的内容,只能让我们了解绘制的流程,虽然连着色器编程都涉及到了,但是还有很多opengl的基本概念、基本方法并不清楚。

  • 第 1 章 OpenGL 简介 1 

OpenGL官网这个网站包含了各种类型的通用信息,包括软件、示例程序、文档、FAQ、讨论版和新闻等。如果读者遇到任何 OpenGL 问题,这是首先应该想到的去处。OpenGL 实际上是一种独立于硬件的程序接口规范。在一种特定类型的硬件上,所使用的是它的一种特定实现。OpenGL 3.1 采用了废弃模式,删除了很多与现代图形系统不太兼容的旧功能。

  • 1.1 什么是OpenGL 1 

opengl大致包含700个以上的函数,

opengl不包含:

  1. 用户输入处理。初始化窗口的initXXX函数与opengl没有关系。
  2. 不包括复杂模型的绘制。只有一些基本几何图元,不过我们可以在其上开发自己的库。

opengl包含的操作:

  1. 根据集合图元创建形状,建立数学描述
  2. 选择视角
  3. 计算颜色
  4. 转换成屏幕的像素,光栅化
  • 1.2 一段简单的 OpenGL 代码 3 

  • 函数名以gl开头,中间是代表含义的英文单词,3f是指可以接受3个浮点数作为参数

glColor3f函数确定接下来绘制物体的颜色

glOrtho指定绘制图像的坐标

glBegin、glEnd之间定义了绘制的物体

glVertex3f定义了绘制的点的三维坐标

glFlush利用缓冲区的内容执行绘制命令

  • 1.4 OpenGL 是一个状态机 6 

设置一种颜色然后可以让它一直生效,这就是状态。OpenGL还有很多类似的状态变量。着色器会识别这些状态进行绘制。附录B中有所有状态变量的列表(很多、很多)

  • 1.5 OpenGL 渲染管线 6 

  • 1.6 与 OpenGL 相关的函数库 9 

OpenGL只包含基本的渲染操作,为了简化编程任务,由许多基于OpenGL的高级绘图操作可以使用

GLU:执行特定任务的函数,glu开头

GLUT:隐藏不同窗口系统API的复杂性,glut开头

  • 1.6.1 包含文件 9 

#include<GL/gl.h>
#include<GL/glu.h>
//在win上,因为win版本的gl、glu使用了一些windows.h的宏需要包含Windows.h
#include<windows.h>
//图形制造厂商的新特性,体现在glext.h中,有的尚未添加到gl.h中
//所以有
#include "glex.h"
//如果有权限放在/usr/include下就可以用<>了
//要使用GLUT实现窗口管理
#include<freeglut.h>
//其实这里面已经包含了gl.h和glu.h因此不需要再包含这两个了

 

  • 1.6.2 OpenGL 实用工具库(GLUT) 10 

glut是用来实现简化打开窗口、检测输入等任务。glut还包含一些复杂的三维物体的创建:球、圆环、茶壶。

窗口管理

glutInit()
//初始化
glutInitDisplayMode()
//一些显示模式的设定,RGBA or 颜色索引模式;单缓冲or双缓冲
glutInitWindowPosition()
//左上角位置
glutInitWindowSize()
//窗口大小(像素为单位)
glutInitContextVersion()
//声明使用的OpenGL版本
glutInitContextFlags()
//声明渲染环境类型
glutCreateWindow()
//创建一个窗口,返回一个标识符,在glutMainLoop中显示

显示回调函数

glutDisplayFunc()
//用于注册回调函数
glutMainLoop()
//调用已注册的显示回调函数
//所有已经创建的窗口会开始显示,渲染开始生效
//事件处理循环开始启动,已注册的显示回调函数被触发
//一旦进入,永不退出

处理输入事件

glutReshapeFunc()
//窗口大小改变
glutKeyboardFunc()
//键盘
glutMotionFunc()
//鼠标
glutIdleFunc()
//事件列表为空
  • 第 2 章 状态管理和绘制几何物体 19 

opengl中的曲线和曲面都是由点、平面多边形和直线构成的

opengl由两种绘图风格:立即模式和显示列表。立即模式:调用绘图函数时,立刻被绘制,这是默认的模式。显示列表:效率更高,先列出绘制清单,再一起绘制。

  • 2.1 绘图工具箱 20 

  • 2.1.1 清除窗口 20 

  • 2.1.2 指定颜色 22 

  • 2.1.3 强制完成绘图操作 23 

glFlush()
/*
CPU发出一条绘制命令,不需要等待其它硬件,
执行几何变换、裁剪、着色、纹理等操作执行完毕,
就可以继续发出下一个绘制命令
*/
  • 2.1.4 坐标系统工具箱 24 

这里讲的是glutReshapeFunc()函数中注册的回调函数,在移动窗口或者改变窗口大小的时候执行

  • 2.2 描述点、直线和多边形 25 

  • 2.2.2 指定顶点 27 

OpenGL的所有几何物体都被描述为一组有序的顶点

  • 2.2.3 OpenGL 几何图元 27 

  • 2.3 基本状态管理 31 

  • 2.4 显示点、直线和多边形 32 

  • 2.5 法线向量 41 

附录H中有寻找表面法向量的方法

  • 2.6 顶点数组 43 

  • 2.6.1 步骤1:启用数组 44 

  • 2.6.2 步骤2:指定数组的数据 44 

  • 2.6.3 步骤3:解引用和渲染 46 

  • 2.6.4 重启图元 51 

在init函数中使用,可以用glDrawelement代替glmultiDraw*

  • 2.6.5 实例化绘制 53 

  • 2.6.6 混合数组 54 

  • 2.7 缓冲区对象 57 

  • 2.7.1 创建缓冲区对象 57 

  • 2.7.2 激活缓冲区对象 58 

  • 2.7.3 用数据分配和初始化缓冲区对象 58 

  • 2.7.4 更新缓冲区对象的数据值 60 

  • 2.7.5 在缓冲区对象之间复制数据 62 

  • 2.7.6 清除缓冲区对象 63 

  • 2.7.7 使用缓冲区对象存储顶点数组数据 63 

  • 2.8 顶点数组对象 65 

  • 2.9 属性组 69 

  • 2.10 创建多边形表面模型的一些提示 71 

本节接下来的内容是讲怎么用三角面片绘制球。

  • 第 3 章 视图 77 

  • 3.1 简介:用照相机打比方 78 

  • 3.1.1 一个简单的例子:绘制立方体 80 

  • 3.1.2 通用的变换函数 83 

  • 3.2 视图和模型变换 84 

  • 3.2.1 对变换进行思考 85 

  • 3.2.2 模型变换 86 

  • 3.2.3 视图变换 89 

  • 3.3 投影变换 93

  • 3.3.1 透视投影 94 

  • 3.3.2 正投影 95 

  • 3.3.3 视景体裁剪 96 

  • 3.4 视口变换 96 

  • 3.4.1 定义视口 96 

  • 3.4.2 变换深度坐标 97 

  • 3.5 和变换相关的故障排除 98 

  • 3.6 操纵矩阵堆栈 100 

  • 3.6.1 模型视图矩阵堆栈 101 

  • 3.6.2 投影矩阵堆栈 102 

  • 3.7 其他裁剪平面 102 

  • 3.8 一些组合变换的例子 104 

  • 3.8.1 创建太阳系模型 104 

  • 3.8.2 创建机器人手臂 107 

  • 3.9 逆变换和模拟变换 109  

猜你喜欢

转载自blog.csdn.net/duyue3052/article/details/81320431
今日推荐