Glew的配置与使用

参考网址:https://learnopengl-cn.github.io/legacy/
编译和链接GLEW
OpenGL定义的这些GL基元类型的内存布局是与平台无关的,使用GL基元类型可以保证你的程序在不同的平台上工作一致。
GLEW是OpenGL Extension Wrangler Library的缩写,因为GLEW也是一个库,我们同样需要构建并将其链接进工程。
Glew的下载地址为:http://glew.sourceforge.net/index.html
对于Glew的选择,如果不确定的话,选择32位的二进制版本。
使用GLEW的静态版本glew32s.lib(注意这里的“s”),将库文件添加到你的库目录,将include内容添加到你的include目录。接下来,在VS的链接器选项里加上glew32s.lib。

Glew的配置与使用

Glew的配置与使用
GLEW的初始化
GLEW是用来管理OpenGL的函数指针的,所以在调用任何OpenGL的函数之前我们需要初始化GLEW。

Glew的配置与使用

我们在初始化GLEW之前设置glewExperimental变量的值为GL_TRUE,这样做能让GLEW在管理OpenGL的函数指针时更多地使用现代化的技术。
视口
我们必须告诉OpenGL渲染窗口的尺寸大小,这样OpenGL才只能知道怎样相对于窗口大小显示数据和坐标。
我们可以通过调用glViewport函数来设置窗口的维度。
glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)。
实际上也可以将视口的维度设置为比GLFW的维度小,这样子之后所有的OpenGL渲染将会在一个更小的窗口中显示。
OpenGL幕后使用glViewport中定义的位置和宽高进行2D坐标的转换,将OpenGL中的位置坐标转换为你的屏幕坐标。处理过的OpenGL坐标范围只为-1到1。
具体的应用示例:

Glew的配置与使用
输入
按键回调是众多回调函数中的一种。当我们设置了按键回调之后,GLFW会在用户有键盘交互时调用它。

Glew的配置与使用

按键回调函数接受一个GLFWwindow指针作为它的第一个参数;第二个整形参数用来表示按下的按键;action参数表示这个按键是被按下还是释放;最后一个整形参数表示是否有Ctrl、Shift、Alt、Super等按钮的操作。

Glew的配置与使用
具体的示例:
上述实例说明:在我们(新创建的)key_callback函数中,我们检测了键盘是否按下了Escape键。如果键的确按下了(不释放),我们使用glfwSetwindowShouldClose函数设定WindowShouldClose属性为true从而关闭GLFW。main函数的while循环下一次的检测将为失败,程序就关闭了。
最后就是通过GLFW注册我们的函数至合适的回调:Glew的配置与使用
SOIL
SOIL是简易OpenGL图像库(Simple OpenGL Image Library)的缩写,它支持大多数流行的图像格式。
SOIL的下载网址:http://www.lonesock.net/soil.html
要想使用SOIL必须自己生成.lib。可以使用/projects文件夹内的任意一个解决方案(Solution)文件。还要添加src文件夹里面的文件到includes文件夹;将SOIL.lib添加到链接器选项,并在代码文件的开头加上#include <SOIL.h>。
使用SOIL加载图片的示例:

Glew的配置与使用

函数首先需要输入图片文件的路径。然后需要两个int指针作为第二个和第三个参数,SOIL会分别返回图片的宽度和高度到其中。后面我们在生成纹理的时候会用图像的宽度和高度。第四个参数指定图片的通道(Channel)数量,但是这里我们只需留为0。最后一个参数告诉SOIL如何来加载图片:我们只关注图片的RGB值。结果会储存为一个很大的char/byte数组。
生成纹理
纹理是使用ID引用的。glGenTextures函数首先需要输入生成纹理的数量,然后把它们储存在第二个参数的GLuint数组中。

Glew的配置与使用
我们需要绑定它,让之后任何的纹理指令都可以配置当前绑定的纹理。

Glew的配置与使用

我们可以使用前面载入的图片数据生成一个纹理了。纹理可以通过glTexImage2D来生成:

Glew的配置与使用Glew的配置与使用

Glew的配置与使用


Glew的配置与使用

Glew的配置与使用

Glew的配置与使用

Glew的配置与使用

Glew的配置与使用