什么是OpenGL

OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。
OpenGL支持多种编程语言绑定,如C、C++、Java、JavaScript(通过WebGL)等,并且可以在Windows、UNIX、Linux、MacOS等多种操作系统平台上运行。

类似的开放平台库还有:

OpenGLES(opengl的子集,专为适配嵌入式设备)
webGL(网页适配,适配JavaScript语言)
Metal(Apple公司研发,专供IOS,macOs设备使用)
Vulkan(OpenGL同公司发布,号称下一代opengl)
Direct3D(DirectX)(微软提供,Windows专属)
目前基本所有图形库都是基于渲染管线做的,但具体语法、着色器等都各有不同,了解原理后可在具体学习。

如何搭建OpenGL环境

要搭建可运行的opengl环境,需要一下几个部分:

  • C++运行环境
    如果使用Windows电脑,我们推荐使用Microsoft Visual Studio ;如果在Mac上,我们推荐使用Xcode.
  • OpenGL/GLSL
    要使用GL肯定要配置可用的GL库了,具体如何配置的在这就不详细介绍了
    windows可参考:https://blog.csdn.net/FatalFlower/article/details/108686549#:~:text=%E5%AE%89%E8%A3%85OpenGL.
    MacOS 出厂应默认安装,可直接使用
  • 窗口管理库
    OpenGL实际上并不是把图像直接绘制到计算机屏幕上,而是将之渲染到一个帧缓冲区,然后由计算机来负责把帧缓冲区中的内容绘制到屏幕上的一个窗口中。有不少库都可以支持这一部分工作。一个选择是使用操作系统提供的窗口管理功能,比如Microsoft Windows API。但这通常不实用,因为需要很多底层的编码工作。GLUT库曾经是一个很流行的选择,但现在已经被弃用了。它的一个现代化的变体是freeglut库。其他相关的选项还有CPW库、GLOW库、GLUI库等。
    GLFW是最流行的选择之一,它内置了对Windows、macOS、Linux和其他操作系统的支持。它可以在其官网下载,并且需要在要使用它的计算机上编译。
    GLFW的安装: windows同样可以参考上边链接,macos建议使用homebrew进行安装。
  • 数学库
    3D图形编程会大量使用向量和矩阵代数。因此,配合一个支持常见数学计算任务的函数库或者类包,能极大地方便OpenGL的使用。常常和OpenGL一起使用的两个这样的库是Eigen和vmath。后者在流行的《OpenGL超级宝典》中使用。
    这边推荐使用GLM(OpenGL Mathematics)。它是一个只有头文件的C++库,兼容Windows、macOS和Linux 。GLM命令能很方便地遵循和GLSL相同的命名惯例,使得来回阅读特定应用程序的C++和GLSL代码时更容易。GLM可以在其官网下载。
    GLM可提供与图形概念相关的类和基本数学函数,例如矢量、矩阵和四元数。它还包含各种工具类,用于创建和使用常见的3D图形结构,例如透视和视角矩阵。
  • 纹理图像加载库
    在后续的教程里我们将使用图像文件来向图形场景中的对象添加“纹理”。这意味着我们会频繁加载这些图像文件到我们的C++/OpenGL代码中。从零开始编写一个纹理图像加载器是可以做到的。但是,考虑到各种各样的图像文件格式,使用一个纹理图像加载库通常是更好的。比如FreeImage、DevIL、GLI和Glraw等。但此处先不做详细介绍,到使用时在进行介绍。

示例代码(以MacOs环境 xcode编辑器为例)

下边是我们简单配置的gl初始化环境的
环境搭建过程:
brew install glew
brew install glfw
xCode 创建c++ Command Line tool

创建命令行程序
增加库依赖
在这里插入图片描述
在这里插入图片描述
增加头文件目录
在这里插入图片描述

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;
void init(GLFWwindow* window) { }
void display(GLFWwindow* window, double currentTime)
{
    glClearColor(1.0, 1.0, 0.0, 1.0); // 清屏颜色(RGBA 配置颜色为黄色)
    glClear(GL_COLOR_BUFFER_BIT);
}
int main(void)
{
    
    if (!glfwInit()) {
        exit(EXIT_FAILURE);
    }
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    GLFWwindow* window = glfwCreateWindow(600, 600, "test", NULL, NULL);
    glfwMakeContextCurrent(window);
    if(glewInit() != GLEW_OK) {
        exit(EXIT_FAILURE);
    } 
    glfwSwapInterval(1); 
    init(window); 
    while (!glfwWindowShouldClose(window))
    { 
        display(window, glfwGetTime()); 
        glfwSwapBuffers(window); 
        glfwPollEvents(); 
    } 
    glfwDestroyWindow(window); 
    glfwTerminate(); 
    exit(EXIT_SUCCESS);
}

如果程序正常执行(环境配置正常)的话,运行后结果为如下黄色窗口
在这里插入图片描述
到此,一个基础的gl开发环境就搭建完成了,如果过程中遇到问题,欢迎关注留言。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐