最近发现了一个优秀的图形学框架,Glitter。Glitter已经包含了新手学习图形学(openGL)需要的绝大部分框架,不需要再另行配置。

Glitter

Glitter简介

       正如Glitter官网简介中的一样,Glitter是一个绝对简单的OpenGL模板,内部配置好了一切所需要的库。你唯一需要的外部软件就是cmake

Glitter集成的库

       Glitter默认集成的库如下

Functionality Library
Mesh Loading assimp
Physics bullet
OpenGL Function Loader glad
Windowing and Input glfw
OpenGL Mathematics glm
Texture Loading stb

其中,glad作用是取代glew,std是SOIL的底层实现

Glitter使用教程

git clone --recursive https://github.com/Polytonic/Glitter
cd Glitter
cd Build

# UNIX Makefile
cmake ..

# Mac OSX
cmake -G "Xcode" ..

# Microsoft Windows
cmake -G "Visual Studio 14" ..
cmake -G "Visual Studio 14 Win64" ..

之后就可以使用自己习惯的IDE了。而clion用户的话,直接用clion打开Glitter根目录即可。

LearnOpenGL

LearnOpenGL简介

       LearnOpenGL以及中文版,是一个非常优秀的OpenGL教程,由浅入深,从窗口绘制一直教到HDR,SSAO,PBR等高级技术,全教程坚持使用实例来演示,非常适合新人学习。

LearnOpenGL-Glitter版本

       我自己用了10天不到的时间,把LearnOpenGL上的实例用Glitter框架重新实现了一遍,链接在这里

Glitter使用时的一些注意事项

  1. 使用glad获取opengl函数
// Load OpenGL Functions
gladLoadGL();
std::cout << "OpenGL " << glGetString(GL_VERSION) << std::endl;
  1. 使用stb读取图片
#define STB_IMAGE_IMPLEMENTATION
int width, height;
unsigned char* image = stbi_load("wall.jpg", &width, &height, 0, 0);
stbi_image_free(image);
  1. 在mac上强制glfw使用版本向前兼容
// Mac 10.9以后OpenGL版本为祖传OpenGL4.1,不能改变
// 如果使用3.3或以下版本,需要兼容
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  1. 在retina屏上设置viewport只占屏幕1/4
// 直接设置窗口分辨率是retina拉伸后的
// 而设置viewport的尺寸是retina拉伸前的
// 从帧缓冲中获取viewport尺寸是正确做法
int width, height;
glfwGetFramebufferSize(window, &width, &height);
glViewport(0, 0, width, height);