简介
LearnOpenGL(Learn OpenGL, extensive tutorial resource for learning Modern OpenGL),是一个学习OpenGL 3.x版本的技术网站,内容讲解简单通俗,内容几乎涵盖OpenGL初、中、高级技术。国内翻译组同仁已经将其完整翻译发布在Learn OpenGL CN(LearnOpenGL-CN)上,代码托管在“GitHub - JoeyDeVries/LearnOpenGL: Code repository of all OpenGL chapters from the book and its accompanying website https://learnopengl.com”。在学习的过程中遇到很多困难,好几次在作者的帮助下得以解决问题,在此将学习中遇到的细节和问题归纳总结,供后来者借鉴!
中文翻译版:LearnOpenGL CN
配套视频:大名鼎鼎的Learn OpenGL的视频教程(中英字幕)_哔哩哔哩_bilibili
准备
1. 扩展库准备
GLFW -- Download | GLFW
GLEW -- GLEW: The OpenGL Extension Wrangler Library
GLM -- GitHub - g-truc/glm: OpenGL Mathematics (GLM) (GLM 0.1~GLM 0.9.9.4) Readme部分
SOIL -- http://www.lonesock.net/soil.html / http://www.lonesock.net/files/soil.zip
Freetype -- The FreeType Project / FreeType Downloads
irrKlang -- irrKlang - audio and sound library for C++, C# and .NET / download irrKlang
glad -- https://glad.dav1d.de/ / https://pan.baidu.com/s/1uEhS0LrDlWdsfW0DdOxKjA 提取码:6ylq
stb_image -- https://github.com/nothings/stb / https://pan.baidu.com/s/1V02zLpa159WezqXQc6d3iQ 提取码:jtwr
以下是我使用的各扩展库版本
01- glfw-3.2.1.bin.WIN32.zip OpenGL通用窗口扩展
02- glew-2.1.0-win32.zip OpenGL Extension Wrangler Library
03- glm-0.9.8.5.7z OpenGL数学库
04- soil.zip (July 7, 2008) Simple OpenGL Image Library
05- freetype-2.3.5-1-bin.zip 加载字体并将他们渲染到位图以及提供多种字体相关的操作的软件开发库。
06- irrKlang-32bit-1.6.0.zip 音频解码库
07- glad 继GL3W,GLEW之后,当前最新的用来访问OpenGL规范接口的第三方库
08- std_image 一个简单易用的图像解码库
01~08所列包分享:链接: https://pan.baidu.com/s/1eU1nY99-RPCx7xNAi7Wsjg 提取码: ujt3
安装完毕后我的目录结构:
D:.
├─bin
├─include
│ ├─freetype
│ │ └─freetype2
│ │ └─freetype
│ │ └─config
│ ├─GL
│ ├─GLFW
│ ├─glm
│ │ ├─detail
│ │ ├─gtc
│ │ ├─gtx
│ │ └─simd
│ ├─irrKlang
│ └─SOIL
└─lib
├─freetype
│ └─pkgconfig
├─GLEW
├─GLFW
├─irrKlang
└─SOIL
2. 心理准备(随时掉坑里)
SOIL库须知:作者使用的SOIL库加载图片纹理显示为上下颠倒,因此采用(TexCoord = vec2(texCoord.x, 1.0 - texCoord.y);)方式将图片纹理调整为正常状态。但我使用的 soil.zip (July 7, 2008)无需此操作!
GLM库须知:(引用作者原话如下)
Since GLM version 0.9.9
, GLM default initializates matrix types to a 0-initalized matrix, instead of the identity matrix. From that version it is required to initialize matrix types as: glm::mat4 mat = glm::mat4(1.0f)
. For consistency with the tutorials' code it's advised to use a version of GLM lower than 0.9.9
or initialize all matrices as mentioned above.
自GLM版本0.9.9起,GLM默认将矩阵类型初始化为0-initalized矩阵,而不是单位矩阵。 从该版本开始,需要将矩阵类型初始化为:glm::mat4 mat = glm::mat4(1.0f)。 为了与教程代码保持一致,建议使用低于0.9.9的GLM版本或初始化上述所有矩阵。
因此,要和作者提供的代码效果保持一致,请使用GLM Version 0.9.9.0以下版本!
Freetype库须知:
/* `<prefix>/include/freetype2' must be in your current inclusion path */
#include <freetype/config/ftheader.h>
glad库须知:
按上图选择后,点击“GENERATE”生成下载,跳转到下载页面后,点击“glad.zip”下载。
如果项目工程在链接中提示:
1>main.obj : error LNK2001: unresolved external symbol __imp____glewAttachShader
1>main.obj : error LNK2001: unresolved external symbol __imp____glewCreateProgram
1>main.obj : error LNK2001: unresolved external symbol __imp____glewShaderSource
1>main.obj : error LNK2001: unresolved external symbol __imp____glewCreateShader
原因是“glew32s.lib”和“glew32.lib”不一样,在用了“glad.lib”情况下需要使用“glew32.lib”。
实践
如果环境配置没有问题,而且跟随作者在"In practice / 2D Game / Breakout"步骤实现游戏,最后会有不错收获。Demo下载地址:
作者Breakout项目源码:
链接:https://pan.baidu.com/s/1GOK0Iwqau8Mxo6AmMdCggA
提取码:dhte
基于作者Breakout项目源码的完整工程:
链接:https://pan.baidu.com/s/1X2SNVKonX5idjs5LC8giyA
提取码:ouqc
附录:
FreeType是一个能够用于加载字体并将他们渲染到位图以及提供多种字体相关的操作的软件开发库。它是一个非常受欢迎的跨平台字体库,被用于 Mac OSX、Java、PlayStation主机、Linux、Android等。FreeType的真正吸引力在于它能够加载TrueType字体。
TrueType字体不采用像素或其他不可缩放的方式来定义,而是一些通过数学公式(曲线的组合)。这些字形,类似于矢量图像,可以根据你需要的字体大小来生成像素图像。通过使用TrueType字体可以轻易呈现不同大小的字符符号并且没有任何质量损失。
FreeType可以在他们的官方网站中下载到。你可以选择自己编译他们提供的源代码或者使用他们已编译好的针对你的平台的链接库。请确认你将freetype.lib添加到你项目的链接库中,同时你还要添加它的头文件目录到项目的搜索目录中。