OPENGL(ubuntu下的实践)——基础篇(2)之红宝书
课前甜点:
这是一些怎么查看Ubuntu下opengl版本,下载的库在哪里,以及怎么编译地一些内容。
glxinfo | grep "OpenGL"
为什么阅读OpenGL编程指南(第七版)
我们的目的是从前三章中学习基本概念,并绘制手部模型,因为上一个基础篇的内容,只能让我们了解绘制的流程,虽然连着色器编程都涉及到了,但是还有很多opengl的基本概念、基本方法并不清楚。
第 1 章 OpenGL 简介 1
OpenGL官网这个网站包含了各种类型的通用信息,包括软件、示例程序、文档、FAQ、讨论版和新闻等。如果读者遇到任何 OpenGL 问题,这是首先应该想到的去处。OpenGL 实际上是一种独立于硬件的程序接口规范。在一种特定类型的硬件上,所使用的是它的一种特定实现。OpenGL 3.1 采用了废弃模式,删除了很多与现代图形系统不太兼容的旧功能。
1.1 什么是OpenGL 1
opengl大致包含700个以上的函数,
opengl不包含:
- 用户输入处理。初始化窗口的initXXX函数与opengl没有关系。
- 不包括复杂模型的绘制。只有一些基本几何图元,不过我们可以在其上开发自己的库。
opengl包含的操作:
- 根据集合图元创建形状,建立数学描述
- 选择视角
- 计算颜色
- 转换成屏幕的像素,光栅化
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)之红宝书相关推荐
- 【红宝书】OpenGL Demo code编译与运行
本人就职于国际知名终端厂商,负责modem芯片研发. 在5G早期负责终端数据业务层.核心网相关的开发工作,目前牵头6G算力网络技术标准研究. [红宝书]OpenGL Demo code编译与运行 文章 ...
- 红宝书背诵笔记 — 简单基础词语
简单基础词 a开头的简单基础词 b开头的简单基础词 c开头的简单基础词 d开头的简单基础词 e开头的简单基础词 f开头的简单基础词 g开头的简单基础词 h开头的简单基础词 i开头的简单基础词 j开头的 ...
- OpenGL红宝书正序解读(一)
OpenGL红宝书正序解读(一) 第一章:OpenGL简介 第二章:状态管理和绘制几何物体 绘图工具箱 清除窗口 指定颜色 强制完成绘图操作 坐标系统工具箱 描述点.直线.多边形 什么是点.直线.多边 ...
- 《JavaScript高级程序设计》红宝书第二遍阅读(动手实践)
<JavaScript高级程序设计>红宝书第二遍阅读(动手实践) 第1章--什么是JavaScript 第2章--HTML中的JavaScript 第3章--语言基础 第4章--变量.作用 ...
- OpenGL红宝书的部分学习记录
我看的OpenGL红宝书为: <OpenGL编程指南>-- 原书第9版 OpenGL Programming Guide – The Official Guide to Learning ...
- 这一届科研计算人赶DDL红宝书:学生篇
问:实验室的硬件条件好坏对你的科研有多大影响? 答:啥条件都行,没有影响. 我们坚信以下三点: 1.科学家就是专门负责搞科研的: 2.不依赖别人,你的研究效率和节奏必须掌握在你自己手里: 3.不管是尝 ...
- 用最简单的方法配置运行OpenGL红宝书第9版源码示例
笔者真是苦逼啊,之前花了很多时间去学习"基于OpenGL的图形学"的开头部分,包括书本和老师的PPT.但是到自己尝试编译运行示例代码的时候真是困难重重.而且!在自己胡乱摸爬滚打终于 ...
- Mac上构建OpenGL红宝书上的triangles程序
最近查考的资源较多,列几个主要出处: 参考:stackoverflow上的问答 参考:opengl/glut官网文档 参考:github上的源码 参考:apple上对opengl支持的介绍 (Owed ...
- CCNA专业英文词汇红宝书---B、C篇(转)
CCNA专业英文词汇红宝书---B.C篇(转)[@more@] 作者:深圳浪人 CCNA为思科最基础的入门认证,其中,考试偏重网络概念和理论,对于初学者来说,不少专业英文术语难以理解,导致学员学习进度 ...
- 红宝书阅读笔记——OPENGL渲染管线
之前读的时候一直觉得红宝书是很艰涩难懂的,不如NEHE的教程简单. 后来才发觉是自己没基础,几番折腾之后也只能用OPENGL做些简单的东西.半年没写,连glBegin都给忘了. 图形学的大作业要求写个 ...
最新文章
- 剑指 offer set 28 实现 Singleton 模式
- ASP.NET MVC Beta 新特性之 IValueProvider
- 前端学习(1928)vue之电商管理系统电商系统之美化一层循环的UI结构for循环ui美化
- 消息队列(4):Kafka
- 这款免费小工具,让你的Mac也能实现右键新建
- Array类filter方法实例--查找功能.
- HttpModule和HttpHandler的常见用法
- Vensim学习之Random Normal函数的使用
- [SDOI2016]征途
- xposed+JustTrustMe抓包SSLping
- 计算机相关美文摘抄,唯美的散文段落摘抄
- 利用user-agent取得浏览器版本号
- 记录一次接入Unity IAP Tapjoy 等SDK的过程,坑了一周,快吐血了
- 信息安全从业者书单推荐(2020.6.28更新)
- 51单片机的键盘分类和运用
- 未来的量子计算机模型,量子计算机上量子人工生命模型
- 微信小程序支付绑定商户号问题
- 真空灾难:物理学最著名的未解难题之一
- director入门
- 字母,数字,下划线,数字的正则表达式
热门文章
- 管理信息系统需要哪些计算机基础,管理信息系统以先进的计算机系统为物质基础,不需要人工参与。...
- c语言中1e10有何作用,C语言中“1e-6”是什么意思?
- 如何让adobe pdf记住上次打开的位置
- 第100篇博客——用Python爬取我前99篇博客内容,分词并生成词云图
- Python-常见的反爬虫手段
- 露天矿卡车数学建模_鼓风机和露天GPU散热器之间有何区别?
- 现代中医与传统中医的差别
- linux操作系统 第03章 vi文本编辑器
- 云计算要具备什么技能 如何学好云计算架构
- 安卓打包 进阶 配置文件解释