【C++ OpenGL入门-1】创建环境

39 阅读3分钟

最新大型开源项目-云游戏,云桌面系统,欢迎关注

GammaRay源码地址

本项目代码仓库

点击这里

说明: 本系列在Windows10系统下进行,IDE主要用Clion(可以使用Qt、Visual Studio等任何IDE),组织代码用CMake,依赖下载用vcpkg。如果是Linux系统,可不用vcpkg,直接用系统自带的安装包管理就可以,如Ubuntu/Linux mint 用apt,CentOS/Fedora用dnf。OpenGL的版本为 3.3。
1.下载安装软件

安装Visual Studio,安装时注意要勾选C++开发套件,因为要用到它的C/C++编译工具。
安装Git。
安装CMake。
安装Clion。

2.下载vcpkg

按照vcpkg的github网站给出的步骤即可,这里简单描述如下:

  • 2.1 创建一个目录,并在这个目录里面执行clone
> git clone https://github.com/microsoft/vcpkg
  • 2.2 获取vcpkg.exe
> .\bootstrap-vcpkg.bat
  • 2.3 检查安装情况
执行命令查看版本
PS C:\source\vcpkg> .\vcpkg.exe version
如果得到类似的版本信息,则说明成功
Vcpkg package management program version 2021-01-13-d67989bce1043b98092ac45996a8230a059a2d7e

See LICENSE.txt for license information.
3.用Clion创建C++工程,并运行通过,输出Hello World

4.用vcpkg安装OpenGL开发需要的库
  • 4.1 glfw,提供OpenGL运行的窗口
1 安装命令
PS C:\source\vcpkg> .\vcpkg.exe install glfw3
Computing installation plan...
The following packages are already installed:
    glfw3[core]:x86-windows -> 3.3.3
2 已经安装好了
Package glfw3:x86-windows is already installed

Total elapsed time: 3.03 ms

The package glfw3:x86-windows provides CMake targets:
3 如何使用
    find_package(glfw3 CONFIG REQUIRED)
    target_link_libraries(main PRIVATE glfw)

同样的方式安装以下两个库

  • 4.2 glew,帮助加载OpenGL函数。
.\vcpkg.exe install glew
  • 4.3 glm, OpenGL数学库。
 .\vcpkg.exe install glm

安装完成后,将依赖写入CMake配置文件CMakeLIsts.txt中,这是完整的CMakeLists配置:

cmake_minimum_required(VERSION 3.16)

#这里要注意是自己vcpkg的安装目录,如果不想写绝对路径,可以将vcpkg作为自己项目的git子模块使用
SET(CMAKE_TOOLCHAIN_FILE C:/source/vcpkg/scripts/buildsystems/vcpkg.cmake CACHE STRING "")

project(opengl_tutorial)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

#如果find 失败,删除cmake-build-debug,重新reload cmake
find_package(glfw3 REQUIRED)
find_package(GLEW REQUIRED)
find_package(glm REQUIRED)

add_executable(opengl_tutorial main.cpp)

target_link_libraries(opengl_tutorial PRIVATE glfw)
target_link_libraries(opengl_tutorial PRIVATE GLEW::GLEW)
target_link_libraries(opengl_tutorial PRIVATE glm::glm)
5. 通过GLFW显示窗口

进入GLFW的Doc网站,看到Example Code,将其拷贝,粘贴在我们的main.cpp中,并从GLEW官网拷贝示例,整合到里面,完整的示例代码如下

#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
#include <GL/glew.h>
#include <glm/glm.hpp>

#include <iostream>

int main(int argc, char** argv)
{
    // GLFW
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "OpenGL Tutorial C++", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    // GLEW
    GLenum err = glewInit();
    if (GLEW_OK != err)
    {
        /* Problem: glewInit failed, something is seriously wrong. */
        std::cerr << "GLEW init error : " << glewGetErrorString(err) << std::endl;
    }

    std::cout <<"Status: Using GLEW Version : " << glewGetString(GLEW_VERSION) << std::endl;

    glm::mat4 model(1.0);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {
        /* Render here */
        glClear(GL_COLOR_BUFFER_BIT);
        glClearColor(0.2, 0.5, 0.5, 1.0);

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

需要注意的是,在代码的最开头,我们添加了一个宏定义,这是GLFW官方文档提到的,防止gl.h重复引用的定义,详细请看这里

6.编译运行,我们将得到如下的窗口