最新大型开源项目-云游戏,云桌面系统,欢迎关注
本项目代码仓库
说明: 本系列在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重复引用的定义,详细请看这里