课前甜点:

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

glxinfo | grep "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

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

  1. 【红宝书】OpenGL Demo code编译与运行

    本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. [红宝书]OpenGL Demo code编译与运行 文章 ...

  2. 红宝书背诵笔记 — 简单基础词语

    简单基础词 a开头的简单基础词 b开头的简单基础词 c开头的简单基础词 d开头的简单基础词 e开头的简单基础词 f开头的简单基础词 g开头的简单基础词 h开头的简单基础词 i开头的简单基础词 j开头的 ...

  3. OpenGL红宝书正序解读(一)

    OpenGL红宝书正序解读(一) 第一章:OpenGL简介 第二章:状态管理和绘制几何物体 绘图工具箱 清除窗口 指定颜色 强制完成绘图操作 坐标系统工具箱 描述点.直线.多边形 什么是点.直线.多边 ...

  4. 《JavaScript高级程序设计》红宝书第二遍阅读(动手实践)

    <JavaScript高级程序设计>红宝书第二遍阅读(动手实践) 第1章--什么是JavaScript 第2章--HTML中的JavaScript 第3章--语言基础 第4章--变量.作用 ...

  5. OpenGL红宝书的部分学习记录

    我看的OpenGL红宝书为: <OpenGL编程指南>-- 原书第9版 OpenGL Programming Guide – The Official Guide to Learning ...

  6. 这一届科研计算人赶DDL红宝书:学生篇

    问:实验室的硬件条件好坏对你的科研有多大影响? 答:啥条件都行,没有影响. 我们坚信以下三点: 1.科学家就是专门负责搞科研的: 2.不依赖别人,你的研究效率和节奏必须掌握在你自己手里: 3.不管是尝 ...

  7. 用最简单的方法配置运行OpenGL红宝书第9版源码示例

    笔者真是苦逼啊,之前花了很多时间去学习"基于OpenGL的图形学"的开头部分,包括书本和老师的PPT.但是到自己尝试编译运行示例代码的时候真是困难重重.而且!在自己胡乱摸爬滚打终于 ...

  8. Mac上构建OpenGL红宝书上的triangles程序

    最近查考的资源较多,列几个主要出处: 参考:stackoverflow上的问答 参考:opengl/glut官网文档 参考:github上的源码 参考:apple上对opengl支持的介绍 (Owed ...

  9. CCNA专业英文词汇红宝书---B、C篇(转)

    CCNA专业英文词汇红宝书---B.C篇(转)[@more@] 作者:深圳浪人 CCNA为思科最基础的入门认证,其中,考试偏重网络概念和理论,对于初学者来说,不少专业英文术语难以理解,导致学员学习进度 ...

  10. 红宝书阅读笔记——OPENGL渲染管线

    之前读的时候一直觉得红宝书是很艰涩难懂的,不如NEHE的教程简单. 后来才发觉是自己没基础,几番折腾之后也只能用OPENGL做些简单的东西.半年没写,连glBegin都给忘了. 图形学的大作业要求写个 ...

最新文章

  1. 剑指 offer set 28 实现 Singleton 模式
  2. ASP.NET MVC Beta 新特性之 IValueProvider
  3. 前端学习(1928)vue之电商管理系统电商系统之美化一层循环的UI结构for循环ui美化
  4. 消息队列(4):Kafka
  5. 这款免费小工具,让你的Mac也能实现右键新建
  6. Array类filter方法实例--查找功能.
  7. HttpModule和HttpHandler的常见用法
  8. Vensim学习之Random Normal函数的使用
  9. [SDOI2016]征途
  10. xposed+JustTrustMe抓包SSLping
  11. 计算机相关美文摘抄,唯美的散文段落摘抄
  12. 利用user-agent取得浏览器版本号
  13. 记录一次接入Unity IAP Tapjoy 等SDK的过程,坑了一周,快吐血了
  14. 信息安全从业者书单推荐(2020.6.28更新)
  15. 51单片机的键盘分类和运用
  16. 未来的量子计算机模型,量子计算机上量子人工生命模型
  17. 微信小程序支付绑定商户号问题
  18. 真空灾难:物理学最著名的未解难题之一
  19. director入门
  20. 字母,数字,下划线,数字的正则表达式

热门文章

  1. 管理信息系统需要哪些计算机基础,管理信息系统以先进的计算机系统为物质基础,不需要人工参与。...
  2. c语言中1e10有何作用,C语言中“1e-6”是什么意思?
  3. 如何让adobe pdf记住上次打开的位置
  4. 第100篇博客——用Python爬取我前99篇博客内容,分词并生成词云图
  5. Python-常见的反爬虫手段
  6. 露天矿卡车数学建模_鼓风机和露天GPU散热器之间有何区别?
  7. 现代中医与传统中医的差别
  8. linux操作系统 第03章 vi文本编辑器
  9. 云计算要具备什么技能 如何学好云计算架构
  10. 安卓打包 进阶 配置文件解释