PC(Windows)上安装与设置
A安装库与开发环境
A1.开发环境
-
使用vs2019,创建vs的一个自定义模板方便后续新项目的创建(会自动添加必要的库和依赖项)
A2.查看显卡是否支持OpenGL4.3
查看自己机器上的显卡支持openGL的版本支持opengl的显卡列表妙为的博客-CSDN博客(转载)
A3.安装GLFW
-
使用CMake编译GLFW源码
(1)下载GLFW源码下载 |格利福 (glfw.org)
(2)下载安装CMake
Windows下CMake的下载与安装详解cmake下载wendy_ya的博客-CSDN博客(转载)
(3)运行CMake选择GLFW源码所在的位置和期望构建的目标文件夹
-
如果变红再次单击Configure
-
单击Generate
用vs2019打开GLFW.sln
编译,得到glfw3.lib,注意该文件的位置
找到最开始下载的glfw的源码中的include文件中的GLFW文件
A4.准备GLEW(64位二进制文件)
glew链接:GLEW: The OpenGL Extension Wrangler Library (sourceforge.net)
所需要的项目:
-
glew32.lib
-
glew32.dll
-
GL文件夹
A5.准备GLM(数学库)
下载链接:GLM download | SourceForge.net
所需要的是glm
A6.准备SOIL2(图像加载库)
安装SOIL2需要使用premake的工具
参考博客:OpenGL学习预备篇——使用premake配置SOIL2库opengl soil配置亭墨的博客-CSDN博客
下载SOIL2
SOIL下载 Releases · SpartanJ/SOIL2 · GitHub
上面已经给出了SOIL2的github地址,我们可以点进去,
点击tags切换
这里选择的release 1.2.0
将下载下来的SOIL2和premake进行解压,并将premake5.exe放进SOIL2文件夹中
在该文件夹中打开cmd运行命令:
premake5.exe vs2019
此时文件夹中会多出一个make的文件夹,在其中打开windows文件夹,找到SOIL2.sln
如果vs提示升级库点击确定
右键单击soli2-static-lib,选择生成
成功后,文件夹中会多lib和obj
A7.准备共享的lib和include文件夹
所需要项目的文件的位置:
-
glew32.lib
-
glew32.dll
-
GL文件夹
文件夹为:
A8.在VS中开发和部署OpenGL项目
将我们得到的共享文件放在电脑的某个位置,例如我放在C盘下
打开vs2019创建一个C++空项目
在包含项目中添加之前我们创建的include文件夹
$(SolutionDir)是一个宏,是当前项目的位置。
然后在链接器,常规,附加目录中添加之前的lib文件夹
在输入中的附加依赖项添加glfw3.lib,glew32.lib,soil2-debug.lib,opengl32.lib。
下面我以为opengl32.lib已经作为标准WindowsSDK的一部分提供了,没写,后面就报错了,希望你们添上。
A.9导出模板
选择项目->导出模板->项目模板
安装好模板后,创建一个新的OpenGLC++项目
-
新建项目
-
选择OpenGL模板
-
从x86修改为x64
-
在你创建的项目中的同名子文件中,添加glew32.dll,src是我之前的文件夹
6.添加一个.cpp文件进行测试
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
void init(GLFWwindow* window) { }
void display(GLFWwindow* window, double currentTime)
{
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}
int main()
{
using namespace std;
if (!glfwInit())
exit(EXIT_FAILURE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
GLFWwindow* window = glfwCreateWindow(600, 600, "Hello, world", nullptr, nullptr);
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);
}
7.输出结果为: