LearnOpenGL环境搭建

506 阅读4分钟

教程中使用的环境是Visual Studios + CMake + MSVC,我没用过也没安装过Visual Studio。所以我选择的环境是vscode + CMake + MinGW-w64,在linux直接gcc就行了,mac用gcc、clang都可以。这样的好处是在win、linux、mac上都能搭建这套环境。

工具安装

我的系统是win,因为要打游戏(

  • vscode 就不多说了,用其他编辑器/IDE也行

mingw-w64

编译器肯定是必须的,我没用过msvc,只用过gcc,mingw-w64就是win上的gcc。

  • 下载地址:www.mingw-w64.org/downloads/

  • 双击打开,选择native windows,x86_64,如果是32位系统则选i686。设置好安装目录

    https://blog-1256556944.file.myqcloud.com/public/mingw-install.png

  • 直接点process安装

    https://blog-1256556944.file.myqcloud.com/public/mingw-install2.png

  • 完成后,安装目录的bin文件夹里就有gcc了

    https://blog-1256556944.file.myqcloud.com/public/mingw-install3.png

  • 最后吧bin目录添加到系统环境变量PATH里:此电脑-属性-高级系统设置-环境变量-PATH-添加D:\app\mingw-w64\bin

cmake

c++在编译的时候,需要引用各种头文件,链接这个那个的各种动态库、静态库。项目复杂的时候编译会很麻烦,cmake相当于一个构建系统,用不怎么简洁的语法,描述如何编译目标,帮我们生成makefile文件,自动编译项目。

  • 下载地址:cmake.org/download/,选择.msi安装

  • 一路点next,安装路径无所谓,记得加入PATH就行

    https://blog-1256556944.file.myqcloud.com/public/cmake-install.png

  • 完事检查下安装成功

    https://blog-1256556944.file.myqcloud.com/public/cmake-install2.png

依赖库安装

需要用到以下库:

  • GLFW - 负责创建OpenGL上下文并显示窗口
  • GLAD - 查找openGL函数指针

GLFW

在画出出色的效果之前,首先要做的就是创建一个OpenGL上下文(Context)和一个用于显示的窗口。然而,这些操作在每个系统上都是不一样的,OpenGL有目的地从这些操作抽象(Abstract)出去。这意味着我们不得不自己处理创建窗口,定义OpenGL上下文以及处理用户输入。

  • 解压后进入目录

    https://blog-1256556944.file.myqcloud.com/public/GLFW-install.png

  • 在此目录执行

    cmake -S . -B build -G "MinGW Makefiles" -DBUILD_SHARED_LIBS=ON
    

    ,其中

    -S
    

    指定源码所在目录,

    -B
    

    指定构建/输出目录,

    -G
    

    指定我们是给MinGW生产makefile,最后一个参数是告诉CMake,我们要动态库

    https://blog-1256556944.file.myqcloud.com/public/GLFW-install2.png

  • 最后,进入

    build/
    

    目录,执行

    mingw32-make.exe -j4
    

    -j4
    

    指定我们用4个cpu核心,注意由于我们装的mingw,所以

    make
    

    命令变成了

    mingw32-make.exe
    

    https://blog-1256556944.file.myqcloud.com/public/GLFW-install3.png

  • 完事后我们就得到了lib文件

    https://blog-1256556944.file.myqcloud.com/public/GLFW-install4.png

  • GLFW就编译完了,关键目录只有两个

    • 头文件path\to\glfw-3.3.6\include
    • lib文件path\to\glfw-3.3.6\build\src
  • path\to\glfw-3.3.6\build目录执行mingw32-make.exe install(需要管理员权限),文件会被安装到C:/Program Files (x86)/GLFW/

  • 最后手动复制glfw3.dllC:\Windows\System32下,不然运行程序会报找不到dll,其他库类似

GLAD

OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的。由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询。

GLAD会帮我们找到函数位置

https://blog-1256556944.file.myqcloud.com/public/GLAD.png

  • 下载解压后,include目录里是俩头文件,src目录里面就一个glad.c
  • 这个glad.c后面会直接和程序一起参与编译

到这里就可以创建项目了

创建项目

建立一个名为LearnOpenGL的文件夹作为项目根目录。整个项目结构是这样的:

  • root(LearnOpenGL)

    • CMakeLists.txt - cmake构建文件
    • cmake/modules/ - 存放cmake自动查找库的find文件
    • include/ - 存放头文件
    • src/ - 存放源代码

可以参考:github.com/kirito41dd/…

创建窗口

先给出目录细节再详细说,所有参与文件如下:

  • CMakeLists.txt - cmake构建文件

  • cmake/modules/ - 存放cmake自动查找库的find文件

    • FindGLFW3.cmake - 负责自动查找glfw的头文件路径和lib路径
  • include/ - 存放头文件

    • glad.c - 把安装GLAD时的文件复制过来

    • glad/ - 安装GLAD时的头文件目录,复制过来

      • glad.h
    • KHR/ - 安装GLAD时的头文件目录,复制过来

      • khrplatform.h
  • src/ - 存放源代码

    • start/ - 存放LearnOpenGL教程第一部分源码

      • CMakeLists.txt - 子目录构建文件
      • HelloWindow.cpp - 创建窗口示例程序

1.主CMakeLists.txt

根目录下的CMakeLists.txt文件是引导cmake的入口,主要做一些项目设置,和头文件,lib等查找工作,详细如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16cmake_minimum_required(VERSION 2.9) # 指定cmake最小版本 project(learnopengl) # 设置项目名 # 依赖环境 # ------------------------------------------------------------------------------ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") find_package(GLFW3 REQUIRED) include_directories(${GLFW3_INCLUDE_DIR}) add_library(glad include/glad.c) # ------------------------------------------------------------------------------ include_directories(./include) # 添加头文件搜索目录 # 子目录 add_subdirectory(src/start) # 子目录也会有CMakeLists.txt文件,环境是相通的

主要来看依赖环境部分:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")` 这句是往`CMAKE_MODULE_PATH`里追加一个目录, 这些目录里存放着各种find文件,命名为`Find${LIB}.cmake

find_package(GLFW3 REQUIRED)表示调用FindGLFW3.cmake查找GLFW3的头文件和lib,而且是必须找到,否则构建终止。 如果找到了,会设置GLFW3_XXX等一系列变量

include_directories(${GLFW3_INCLUDE_DIR}),find执行成功才会执行这句,变量GLFW3_INCLUDE_DIR里存放着GLFW头文件的路径,然后添加头文件搜索目录

add_library(glad include/glad.c)声明一个名为glad的lib,后面可以指定链接它,glad.c就会参与编译

2.FindGLFW.cmake

看下项目里GLFW的搜索文件cmake/modules/FindGLFW3.cmake,这个文件可以在网上找到很多例子,cmake本身也会预装很多find文件。

3.创建窗口

这里和LearnOpenGL里教的一样了就,src/start/HelloWindow.cpp

4.子CMakeLists.txt

最后来写下src/start目录里的CMakeLists.txt,来告诉cmake如何编译上面的cpp文件:

1 2 3# 你好,窗口 add_executable(HelloWindow HelloWindow.cpp) # 添加可执行程序 target_link_libraries(HelloWindow ${GLFW3_LIBRARY} glad) # 链接lib glfw glad.c

5.编译

回到项目根目录执行:cmake -S . -B build/ -G"MinGW Makefiles"

进入build目录执行:mingw32-make.exe

编译结束后,在build/src/start/目录里能看到名为HelloWindow.exe的可执行程序,恭喜

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0305704c508c4778a3321a203656f016~tplv-k3u1fbpfcp-zoom-1.image

三角形也可以画出来了,具体跟着教程走吧

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/eaa5d167f68847d48565878218b7f922~tplv-k3u1fbpfcp-zoom-1.image