【OpenGL】计算机图形学OpenGL基础
前面几节是跟着B站视频学习的OpenGL基础操作,算是熟悉了一下环境,下面进入学习opengl中文教程网站,开始真正进入OpenGL的大门。
下面开始学习计算机图形编程,收获自己做出很酷的东西的喜悦。
文章目录
- 前置知识
- OpenGL基础
- 立即渲染模式与核心模式
- 扩展
- 状态机
- 对象
- OpenGL函数库
前置知识
由于OpenGL是一个图形API,并不是一个独立的平台,它需要一个编程语言来工作,在这里我们使用的是C++。并不需要你是一个C++专家,但至少能写出比一个“Hello World”
复杂的程序。
除此之外,我们也将用到一些数学知识(线性代数、几何、三角学),但大部分的功能甚至都不需要你理解这些数学知识,只要你会使用就行。(数学与程序设计的关系)
OpenGL基础
OpenGL一般被认为是一个API,包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。
OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现(Implement)的,将由OpenGL库的开发者自行决定(实际的OpenGL库的开发者通常是显卡的生产商)。
立即渲染模式与核心模式
早期的OpenGL使用立即渲染模式(Immediate mode),这个模式下绘制图形很方便。OpenGL的大多数功能都被库隐藏起来,开发者很少有控制OpenGL如何进行计算的自由。在这种情况下,从OpenGL3.2开始,规范文档开始废弃立即渲染模式,并鼓励开发者在OpenGL的核心模式(Core-profile)下进行开发。
当使用OpenGL的核心模式时,OpenGL迫使我们使用现代的函数。现代函数要求使用者真正理解OpenGL和图形编程,它有一些难度,然而提供了更多的灵活性,更高的效率,更重要的是可以更深入的理解图形编程。
扩展
OpenGL的一大特性就是对扩展(Extension)的支持,当一个显卡公司提出一个新特性或者渲染上的大优化,通常会以扩展的方式在驱动中实现。
使用扩展的代码大多看上去如下:
if(GL_ARB_extension_name)
{// 使用硬件支持的全新的现代特性
}
else
{// 不支持此扩展: 用旧的方式去做
}
状态机
OpenGL自身是一个巨大的状态机(State Machine):一系列的变量描述OpenGL此刻应当如何运行。OpenGL的状态通常被称为OpenGL上下文(Context)。我们通常使用如下途径去更改OpenGL状态:设置选项,操作缓冲。最后,我们使用当前OpenGL上下文来渲染。
对象
OpenGL库是用C语言写的,同时也支持多种语言的派生,但其内核仍是一个C库。由于C的一些语言结构不易被翻译到其它的高级语言,因此OpenGL开发的时候引入了一些抽象层。“对象(Object)”就是其中一个。
在OpenGL中一个对象是指一些选项的集合,它代表OpenGL状态的一个子集。比如,我们可以用一个对象来代表绘图窗口的设置,之后我们就可以设置它的大小、支持的颜色位数等等。可以把对象看做一个C风格的结构体(Struct):
struct object_name {float option1;int option2;char[] name;
};
OpenGL函数库
OpenGL相关的函数库有核心库(gl),实用库(glu),辅助库(aux)、实用工具库(glut),窗口库(glx、agl、wgl)和扩展函数库等。gl是核心,glu是对gl的部分封装。glx、agl、wgl 是针对不同窗口系统的函数。glut是为跨平台的OpenGL程序的工具包。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。
窗口管理
- freeglut
- GLUT:glut或者freegult主要是OpenGL 1.0的基本函数功能,前面几节主要用的这个库。
- GLFW:glfw的开发目的是用于替代glut的。它是一个轻量级的,开源的,跨平台的library。中文学习网站用的这个库。
函数加载
- GLEW:glew是使用OpenGL 2.0之后的一个工具函数。中文学习网站用的这个库。
- GLAD:glad是继gl3w,glew之后,当前最新的用来访问OpenGL规范接口的第三方库。简单说glad是glew的升级版。
部件工具
- Qt
- wxWidgets
OpenGL官方网站如下:https://www.opengl.org/
了解了OpenGL的基础知识后,下面就开始创建一些很酷的图形吧。
【OpenGL】计算机图形学OpenGL基础相关推荐
- 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具
计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具 一 基础 1:向量分析和变换 两个工具 可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...
- 计算机图形学 opengl版本 第三版------胡事民 第三章更多的绘图工具
opengl 计算机图形学 第三版 第二部分 第三章更多的绘图工具 3.1 概述 第2章中 我们绘图使用的是屏幕窗口的基础坐标系 以像素为单位 屏幕坐标从左下角x从0延伸到scr ...
- 计算机图形Opengl的实验报告,opengl计算机图形学实验报告之3D漫游世界.doc
opengl计算机图形学实验报告之3D漫游世界.doc 北师大珠海分校信息技术学院计算机图形学实验报告实验报告文件命名方式学号姓名_实验序号_实验名称.doc姓名学号1001010092专业计算机任课 ...
- 计算机图形学 裁剪算法源代码,OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果.doc...
OpenGL计算机图形学梁友栋裁剪算法实验代码及运行结果.doc (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 .<计算 ...
- 计算机图形Opengl的实验报告,计算机图形学OpenGL实验四.doc
计算机图形学OpenGL实验四 实验报告 学院(系)名称: 姓名学号专业班级实验项目实验四:场景漫游课程名称计算机图形学课程代码实验时间实验地点批改意见成绩教师签字:实验环境(软.硬件环境) 实验目的 ...
- 计算机图形学——OpenGL学习系列之绘制3D下的小桌子
计算机图形学--OpenGL学习系列之绘制3D下的小桌子 做的一个小练习,主要用到了几何变换还有gl自带的一个绘制立方体的函数,顺便体会一下glPush和glPop的用法.另外,从2D到3D,开心到飞 ...
- OpenGl计算机图形学入门
OpenGl计算机图形学入门 前言 一.OpenGl及GLSL 二.语言 1.C++及C++应用程序 (1)C++ (2)C++应用程序 三.库 1.GLFW 窗口管理库 2.GLEW 扩展库 3.G ...
- Games101计算机图形学入门基础之一:向量变换、矩阵变换、视图变换、欧拉角与四元数
Games101计算机图形学入门基础之一:向量变换.矩阵变换.齐次坐标.欧拉角与四元数 目录 Games101计算机图形学入门基础之一:向量变换.矩阵变换.齐次坐标.欧拉角与四元数 前言 向量 向量加 ...
- Games101计算机图形学入门基础之二:光栅化
Games101计算机图形学入门基础之二:光栅化 引言 三角形的离散化 采样 走样 走样带来的瑕疵 反走样 先模糊再采样 傅里叶变换 低通滤波 卷积 多重采样抗锯齿(超采样) 深度缓存 可见性与遮挡( ...
最新文章
- 妙用vector:根据第一个不等的元素比较两个序列大小的利器
- rsync 安装使用详解
- mysql 5.7直接安装版,mysql5.7怎么安装 mysql 5.7安装图文教程
- C语言编程规范--------2 注释
- Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
- linux命令行设置编码,编码样式-Linux命令行开关和参数是否有标准?
- [Microsoft][SQL Server 2000 Driver for JDBC]Error establishing socket
- 未能加载文件或程序集 Newtonsoft.Json, Version=4.5.0.0 的报错,解决方法
- 【限时免费】架构和运维技术高峰论坛 (成都站)
- Atitit 大脑能够储存多大的数据量
- 挥泪推荐6款非常非常非常实用的软件!
- 阿里云移动热修复Sophix问题汇总
- c++读写json,JsonCpp配置
- 微信多开脚本2.0 批处理bat,可一键关闭微信
- android studio白屏,首次集成到Android studio的工程运行起来就是白屏
- 三分钟了解如何准备简历面试
- ios开发者平台生成App 专用密码
- BI案例:BI在连锁零售业应用(ZT)【转】
- 弹幕穿人技术实践 — AI 在视频领域的运用
- 全文索引JAVA_全文索引Sphinx和sphinx的中文分词
热门文章
- 双11倒计时3天!凯诘、华扬、多准:“三波段脉冲式促收”策略解读
- 各厂商放疗设备的参数对照表及说明
- twitch 无法载入抽搐_抽搐数据科学家访谈
- 【金融项目】尚融宝项目(一)
- 海鲜店利用一套抽奖方案,让他在5天内净赚23万,背后的思维!
- 利用SOLIDWORKS Simulation顺应性机制进行线性静态研究,案例讲解
- 定向越野赛事成绩是否合格算法
- Error:java:无效的标记:E:\IdeaProjects\项目名\src\main\webapp\WEB-INF\lib
- 高性能MySQL读书计划
- 【券商报告】汽车行业深度报告:新能源高速发展,热管理迎产业春风——附下载链接