返回「计算机、信息技术与工程」

学习笔记——计算机图形学与OpenGL

更多
Markdown 结构化数据
本文目录 5 个章节

学习笔记——计算机图形学与OpenGL

创建时间:2019/12/27 16:32


绪论

什么是OpenGL? OpenGL(Open Graphics Library,开放式图形库),是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。 这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。

OpenGL规范描述了绘制2D和3D图形的抽象API。尽管这些API可以完全通过软件实现,但它是为大部分或者全部使用硬件加速而设计的。 OpenGL的API定义了若干可被客户端程序调用的函数,以及一些具名整型常量。

相关程序库

OpenGL不仅语言无关,而且平台无关。OpenGL纯粹专注于渲染,而不提供输入、音频以及窗口相关的API。

早期的 OpenGL 版本会一同发布配套的GLU库,提供一些同时代硬件尚不支持的简单功能。

  • GLFW
  • GLUT
  • GLEW、GLEE
  • OpenGL Performer库——由SGI开发并可以在IRIX、Linux和Microsoft Windows的一些版本上使用,构建于OpenGL,可以创建实时可视化仿真程序。

当开发者需要使用最新的OpenGL扩展时,他们往往需要使用GLEW库或者是GLEE库提供的功能,可以在程序的运行期判断当前硬件是否支持相关的扩展,防止程序崩溃甚至造成硬件损坏。这类库利用动态加载技术(dlsym、GetProcAddress等函数)搜索各种扩展的信息。

还有几个库也创建在OpenGL之上,提供了OpenGL本身没有的功能:

上下文与窗口包

OpenGL 上下文(英语:OpenGL context)的创建过程相当复杂,在不同的操作系统上也需要不同的做法。因此很多游戏开发和用户界面库都提供了自动创建 OpenGL 上下文的功能,其中包括SDL、Allegro、SFML、FLTK、Qt等。也有一些库是专门用来创建 OpenGL 窗口的,其中最早的便是GLUT,后被freeglut取代,比较新的也有GLFW可以使用。

  • 学习方法:刷视频,一边学一边实现项目(复杂不重要的部分,如果有整理的比较好的文档,可以copy的就copy,真正与OpenGL有关的、锻炼能力的内容,自己上手敲),不太清楚的知识点做注释,有不懂得问题查书,精华性的东西整理在笔记上。计算机专业知识的学习,最重要的是实践练习。一边学一边练手,才能真正学会,光看一遍是学不会的。 最终达到的效果是,在学的过程中,自己完成了一个完整的OpenGL项目,实现了学习的知识,并且方便复习。
  • 快速刷一边视频,达到能看懂代码,能自己扩展编写修改代码的程度就够了。
  • 关于查阅用的资料:windows窗口部分的知识,看windows API,OpenGL的内容,看书。很多东西能找到查阅的资料就可以,不需要自己再浪费时间记录整理了。
  • 不要听一行敲一行,那样效率太低了。听完一整段,然后跟着例子过一遍。 不懂得知识再查阅

OpenGL学习网站 我主要使用:https://learnopengl-cn.readthedocs.io/zh/latest/

  • http://www.scratchapixel.com/ 同样是知乎推荐。看起来更倾向于计算机图形学,而不仅仅是一个 OpenGL 的教程。打算在刷完上面两个教程后看一下
  • https://learnopengl-cn.readthedocs.io/zh/latest/ 补充一个 ,这个网站也很基础,内容非常好,水平和第一个类似,并且还有中文。至少看到纹理映射这篇的教程,讲得比第一个链接更翔实。可以和第一个互相参考,强推。

创建windows窗口

  • 第一个BUG: const wchar_t * 类型的实参与 "LPCSTR" 类型的形参不兼容 宽类型和窄类型不兼容所导致

windowsAPI中 LPCTSTR用来表示你的字符是否使用UNICODE。 是两种类型:LPCSTR和LPCWSTR其中之一 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,即为 LPCWSTR,否则就是标准的ANSI字符串,即为LPCSTR。

VS默认项目是ANSI字符串编码。此时,LPCTSTR==LPCWSTR。 若把宽类型 L"stringTest"传递给LPCTSTR,就会报错。 方法一: 使用_T宏,它在“tchar.h”中定义,它能够自动识别当前编译器字符串的储存格式并做出相应转换,避免这种类型的编译错误。 方法二: 右击“解决方案资源管理器”中的项目,“属性→配置属性→常规→项目默认值→字符集”,默认的选项是“使用多字节字符集”,将它改为“使用Unicode字符集”即可。

搭建OpenGL渲染环境

Step

  1. 选定像素格式
  2. 创建渲染环境
  3. 使渲染环境生效

设置OpenGL矩阵

assets/%E4%B8%96%E7%95%8C%E5%9D%90%E6%A0%87.png