opengl 开发之 visual studio 开发环境简单配置(nupengl/glew/glfw/glad)
目录
opengl 开发之 visual studio 开发环境简单配置(nupengl/glew/glfw/glad)
五、使用 glew 和 管理 glfw 配置 opengl 开发环境
六、使用 glfw 和 glad 配置 opengl 开发环境
一、简单介绍
opengl 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。
本节介绍, opengl 使用 visual studio 进行开发,开发时的基础环境配置,主要的 C++ 环境,和 opengl 的包配置。如果有不足之处,欢迎指出,或者你有更好的方法,欢迎留言。
OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。
OpenGL之glut、glfw、glew、glad等库之间的关系
1、glad与glew作用类似,实现对底层OpenGL接口封装
2、glfw与glut作用类似,创建窗口界面
3、glut年代久远,现在用glfw居多,可使用glfw+glad组合方式,比如这个教程: LearnOpenGL CN
二、操作环境
1、win 10
2、visual studio 2019
3、glfw 3.3.8
4、glew 2.1.0-win32
5、nupengl.core 0.1.0.1
6、nupengl.core.redist 0.1.0.1
三、visual studio 安装 C++ 环境
(如果已经安装 C++ 环境,可忽略)
1、默认已经安装visual stdio ,打开 visual studio installer
2、 点击修改,进入安装界面
3、下载安装 “使用 C++ 的桌面开发”
4、在使用 visual studio 创建项目时
5、可以看到 C++ 相关的创建即可
四、使用 nupengl 配置 opengl 开发环境
(注意:NuGet 中 nupengl 相关好似弃用,不在维护)
1、创建一个 C++ 空项目
2、创建一个项目名称、配置项目位置
3、打开 NuGet
4、在浏览中,搜索 nupengl ,安装这两个即可
5、在项目工程中源文件添加一个 TestOpengl001.cpp 脚本
6、添加代码,绘制一个红色三角形
#include <iostream>
#include<GL/freeglut.h>
using namespace std;
void renderWindow() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1, 0, 0);
glBegin(GL_TRIANGLES);
glVertex2f(-.5f, -.5f);
glVertex2f(.5f, -.5f);
glVertex2f(.0f, .5f);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
cout << argc << "\n" << *argv << endl;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(1, 1);
glutInitWindowSize(240, 240);
glutCreateWindow("GL_Front");
glutDisplayFunc(&renderWindow);
glutMainLoop();
return 0;
}
7、点击本地 Windows 调试器,运行代码
8、opengl 红色三角形绘制如图
五、使用 glew 和 管理 glfw 配置 opengl 开发环境
1、下载 glew
下载地址:GLEW: The OpenGL Extension Wrangler Library
2、下载 glfw
下载地址:Download | GLFW
3、下载好后,解压即可
4、使用 visual studio 创建一个工程
4、在源文件下面创建一个 TestOpengl.cpp 文件
5、 选中 TestOpengl002 ,打开属性页
6、 在属性页中的 C/C++常规 中的 附加包含目录 中 添加之前解压的 glew 和 glfw 库中 include 目录
7、在属性页中的 链接器 中的 常规 中的 附加库目录 中添加 glew 和 glfw 的 lib
注意,大家什么版本的 visual studio 的就添加什么版本的 glfw 的 lib
8、 在属性页中的 链接器 中的 输入 中的 附加依赖项 中添加相关的 glew 和 glfw 的 lib 文件
9、然后、再TestOpengl.cpp 中添加测试代码
#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;
// 输入
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) // 如果 ESC 键被按住
{
glfwSetWindowShouldClose(window, true); // 通过把WindowShouldClose属性设置为 true,关闭 glfw 窗口
}
}
int main()
{
glfwInit(); // 初始化GLFW
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // OpenGL主版本号是3,确保用户在没有适当的OpenGL版本支持的情况下无法运行
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // OpenGL次版本号是3
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 告诉GLFW我们使用的是核心模式,即只能使用OpenGL功能的一个子集,不再需要向后兼容特性
// Open GLFW Window
GLFWwindow* window = glfwCreateWindow(800, 600, "My OpenGL Game", NULL, NULL); // 造窗(宽,高,名称)
if (window == NULL)
{
cout << "Create Window Failed." << endl;
glfwTerminate(); // 终止glfw
return -1; // 失败
}
glfwMakeContextCurrent(window); // 通知GLFW将我们窗口的上下文设置为当前线程的主上下文了
// Init GLFW
glewExperimental = true;
if (glewInit() != GLEW_OK)
{
cout << "Init GLEW failed." << endl;
glfwTerminate(); // 终止glfw
return -1; // 失败
}
glViewport(0, 0, 800, 600); // 渲染窗口Viewport的左下角坐标和宽高(像素)
// 循环渲染
while (!glfwWindowShouldClose(window)) // 检查GLFW是否被要求退出
{
// 输入
processInput(window); // 放在开始更稳健
// 渲染指令...
glClearColor(0.2f, 0.3f, 0.3f, 1.0f); // 设置清空屏幕所用的颜色(rgb, 不透明度)
glClear(GL_COLOR_BUFFER_BIT); // 清空颜色缓冲
// 检查并调用事件,交换缓冲
glfwPollEvents(); // 检查出发事件、更新窗口状态,调用回调函数
glfwSwapBuffers(window); // 使用双缓冲交换颜色渲染窗口,防止图像闪烁
}
glfwTerminate(); // 终止glfw,释放资源
return 0;
}
10、点击 本地Windows 调试器,运行效果如下
六、使用 glfw 和 glad 配置 opengl 开发环境
1、下载 glfw
下载地址:Download | GLFW
2、下载 glad
注意:glad 版本可能需要与 glfw 版本对应,这里 glfw 是 3.3.8 ,所以 glad 版本 3.3,其他配置根据需要设置
3、下载好后,解压
4、visual stdio 创建一个 C++ 项目
5、选中项目中的 “TestOpengl003”,右键点击 “属性”,进入属性页
6、选中 “VC++目录” 中的 “包含目录” ,把之前解压的 glfw 和 glad 中的 include 目录包含进来
7、选中 “VC++目录” 中的 “库目录” ,把之前解压的 glfw 中的 lib 目录包含进来
注意:这里是 visual studio 2019 ,所以选择 lib-vc2019,大家根据自己 visual studio 版本选中
8、在 ”链接器“ - ”输入“ 中的 “附加依赖项” 中添加 opengl32.lib 、 glfw3.lib
9、配置完成后,把 glad 解压包中 glad.c 添加到项目工程源文件中
10、修改 TestOpengl003.cpp 脚本内容为
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
// 输入
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) // 如果 ESC 键被按住
{
glfwSetWindowShouldClose(window, true); // 通过把WindowShouldClose属性设置为 true,关闭 glfw 窗口
}
}
int main() {
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = glfwCreateWindow(800, 600, "MyOpenGL", NULL, NULL);
if (window == NULL) {
cout << "Failed to create GLFW window" << endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glViewport(0, 0, 800, 600);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// 循环渲染
while (!glfwWindowShouldClose(window)) // 检查GLFW是否被要求退出
{
// 输入
processInput(window); // 放在开始更稳健
// 渲染指令...
glClearColor(0.2f, 0.3f, 0.3f, 1.0f); // 设置清空屏幕所用的颜色(rgb, 不透明度)
glClear(GL_COLOR_BUFFER_BIT); // 清空颜色缓冲
// 检查并调用事件,交换缓冲
glfwPollEvents(); // 检查出发事件、更新窗口状态,调用回调函数
glfwSwapBuffers(window); // 使用双缓冲交换颜色渲染窗口,防止图像闪烁
}
glfwTerminate();
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
glViewport(0, 0, width, height);
}
11、点击 “本地 windows 调试器” 运行,结果如下
七、其他
1、关于OpenGL在VS2019下找不到glew32.dll问题的解决
参见博文:关于OpenGL在VS2019下找不到glew32.dll问题的解决_apigthatcanfly的博客-CSDN博客_glew32.dll
OpenGL 开发环境配置 Visual Studio + GLFW + GLAD - 知乎