0


OpenGL: 计算机图形学OpenGL在Visual Studio 2019/2022中的环境配置

前言

  1. 在查找了众多有关OpenGL相关的环境配置后,对openglvs中的初步配置终是有了收获,总结作以此篇以免自己遗忘,也希望对大家有所帮助。

一、OpenGL简介

  1. OpenGLOpen Graphics Library)是一个跨语言、跨平台的应用程序编程接口(API),用于渲染二维和三维矢量图形。它被广泛应用于图形密集型应用程序,如视频游戏、科学可视化、信息可视化、仿真、虚拟现实和许多其他领域。OpenGL定义了一个跨操作系统的函数集,这些函数可以操作图形处理单元(GPU)来渲染图像。
  2. OpenGL是一个强大的工具,它为开发者提供了广泛的功能来创建高质量的图形内容。随着技术的发展,OpenGL也在不断更新,以支持更先进的图形处理技术。
  3. 在**计算机图形学**中,OpenGL是许多游戏引擎的基础,用于渲染游戏中的3D场景和特效。在科学计算和工程领域,OpenGL用于将复杂的数据集可视化,帮助研究人员理解数据。对于需要将大量数据以图形方式展示的应用,OpenGL提供了强大的工具来创建直观的图表和图形。

二、安装Visual Studio

  1. 详情可以去查找另外下载vs的教程,目前我使用的仍然是vs2019Visual Studio 2022 在性能、用户界面、功能扩展和新技术支持方面都比 Visual Studio 2019 有显著提升。对于处理大型项目和使用最新技术的开发者,VS2022 是更好的选择。而 VS2019 依然是一个稳定、成熟的 IDE 选项,适合多数日常开发需求。
  2. VS下载官网:点这里

三、创建visual studio project

  1. 进入vs创建新项目:
  2. ![](https://i-blog.csdnimg.cn/direct/64e7546b8caf40d9a65f29475629fdf1.png)
  3. 选择控制台,它会自动创建一个.cpp文件:

  1. 测试自动生成的"Hello World"有无问题:

四、添加OpenGL依赖项

  1. 下面介绍的四种库,选择其二进行组合便可。

1、freeglut 库安装和使用

  1. 工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 程序包

  1. 选择freeglut(哪一个都可以) -> 右边项目打勾 -> 安装

  1. 在控制台检查是否安装成功

  1. 附上一则freeglut库测试代码:
  1. #include <GL/freeglut.h>
  2. // 初始化窗口
  3. void init(int width, int height) {
  4. glClearColor(0.0, 0.0, 0.0, 1.0); // 设置背景颜色为黑色
  5. glMatrixMode(GL_PROJECTION); // 选择投影矩阵
  6. gluOrtho2D(0.0, width, 0.0, height); // 设置正交投影
  7. }
  8. // 绘制图形
  9. void display() {
  10. glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区
  11. glColor3f(1.0, 1.0, 1.0); // 设置绘制颜色为白色
  12. glBegin(GL_TRIANGLES); // 开始绘制三角形
  13. glVertex2f(0.0, 0.0); // 第一个顶点
  14. glVertex2f(200.0, 0.0); // 第二个顶点
  15. glVertex2f(0.0, 200.0); // 第三个顶点
  16. glEnd(); // 结束绘制
  17. glutSwapBuffers(); // 交换前后缓冲区
  18. }
  19. // 主函数
  20. int main(int argc, char** argv) {
  21. glutInit(&argc, argv); // 初始化glut
  22. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); // 设置显示模式
  23. glutInitWindowSize(400, 400); // 设置窗口大小
  24. glutCreateWindow("FreeGLUT Test"); // 创建窗口
  25. init(400, 400); // 初始化窗口
  26. glutDisplayFunc(display); // 设置绘制函数
  27. glutMainLoop(); // 进入glut事件处理循环
  28. return 0;
  29. }
  1. 运行成功实例:

2、glfw 库安装和使用

  1. 同上,在工具包中找到glfw
  2. 选择glfw -> 右边项目打勾 -> 安装

  1. 在控制台检查是否安装成功:

  1. 附上一则glfw库测试代码:
  1. // main.cpp
  2. #include <GLFW/glfw3.h>
  3. #include <iostream>
  4. void error_callback(int error, const char* description) {
  5. std::cerr << "Error: " << description << std::endl;
  6. }
  7. int main() {
  8. // 设置GLFW错误回调
  9. glfwSetErrorCallback(error_callback);
  10. // 初始化GLFW库
  11. if (!glfwInit()) {
  12. return -1;
  13. }
  14. // 创建窗口对象
  15. GLFWwindow* window = glfwCreateWindow(640, 480, "GLFW Window", nullptr, nullptr);
  16. if (!window) {
  17. glfwTerminate();
  18. return -1;
  19. }
  20. // 设置当前窗口的上下文为活动上下文
  21. glfwMakeContextCurrent(window);
  22. // 设置窗口的回调函数
  23. glfwSetKeyCallback(window, [](GLFWwindow* win, int key, int scancode, int action, int mods) {
  24. if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {
  25. glfwSetWindowShouldClose(win, GLFW_TRUE);
  26. }
  27. });
  28. // 主循环
  29. while (!glfwWindowShouldClose(window)) {
  30. // 清除颜色缓冲区,设置背景为蓝色
  31. glClearColor(0.5f, 0.8f, 0.6f, 1.0f); // RGBA格式,分别对应红、绿、蓝、透明度
  32. glClear(GL_COLOR_BUFFER_BIT);
  33. // 交换缓冲区
  34. glfwSwapBuffers(window);
  35. // 处理事件
  36. glfwPollEvents();
  37. }
  38. // 清理资源
  39. glfwDestroyWindow(window);
  40. glfwTerminate();
  41. return 0;
  42. }
  1. 注:运行后可能会报错如下图

  1. 打开解决方案管理器

  1. 找到当前项目

  1. 右键,点击属性:

  1. 找到链接器中的输入:

  1. 在附加依赖项中添加 **opengl32.lib**

  1. 确定并应用后,重新运行,成功实例:

3、glew 库安装和使用

  1. 同上,在工具包中找到glew
  2. 选择glew -> 右边项目打勾 -> 安装

  1. 在控制台检查是否安装成功:

  1. 附上一则glew库测试代码:
  1. #include <GL/glew.h>
  2. #include <GLFW/glfw3.h>
  3. #include <iostream>
  4. #include <cmath>
  5. void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
  6. if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {
  7. glfwSetWindowShouldClose(window, GLFW_TRUE);
  8. }
  9. }
  10. int main() {
  11. // 初始化GLFW
  12. if (!glfwInit()) {
  13. std::cerr << "Failed to initialize GLFW" << std::endl;
  14. return -1;
  15. }
  16. // 创建窗口
  17. GLFWwindow* window = glfwCreateWindow(800, 600, "GLEW Test", NULL, NULL);
  18. if (!window) {
  19. std::cerr << "Failed to create GLFW window" << std::endl;
  20. glfwTerminate();
  21. return -1;
  22. }
  23. // 设置当前窗口的上下文为活动上下文
  24. glfwMakeContextCurrent(window);
  25. // 初始化GLEW
  26. glewExperimental = GL_TRUE; // 启用GLEW的实验性功能
  27. if (glewInit() != GLEW_OK) {
  28. std::cerr << "Failed to initialize GLEW" << std::endl;
  29. return -1;
  30. }
  31. // 设置视口大小
  32. int width, height;
  33. glfwGetFramebufferSize(window, &width, &height);
  34. glViewport(0, 0, width, height);
  35. // 设置清除颜色
  36. glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // 白色背景
  37. // 启用深度测试
  38. glEnable(GL_DEPTH_TEST);
  39. // 主循环
  40. while (!glfwWindowShouldClose(window)) {
  41. // 清除颜色缓冲区和深度缓冲区
  42. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  43. // 绘制绿色的三角形
  44. glMatrixMode(GL_PROJECTION);
  45. glLoadIdentity();
  46. gluPerspective(45.0, (double)width / (double)height, 0.1, 100.0);
  47. glMatrixMode(GL_MODELVIEW);
  48. glLoadIdentity();
  49. gluLookAt(0.0, 0.0, 5.0, // 眼睛位置
  50. 0.0, 0.0, 0.0, // 观察点
  51. 0.0, 1.0, 0.0); // 上方向
  52. glBegin(GL_TRIANGLES);
  53. glColor3f(0.0f, 1.0f, 0.0f); // 绿色
  54. glVertex3f(-0.5f, -0.5f, 0.0f);
  55. glVertex3f(0.5f, -0.5f, 0.0f);
  56. glVertex3f(0.0f, 0.5f, 0.0f);
  57. glEnd();
  58. // 交换缓冲区
  59. glfwSwapBuffers(window);
  60. // 处理事件
  61. glfwPollEvents();
  62. }
  63. // 清理资源
  64. glfwDestroyWindow(window);
  65. glfwTerminate();
  66. return 0;
  67. }
  1. 但是,也有可能会报错(手动狗头):

  1. 原因和步骤2类似,这次缺少的库是 **glu32.lib** ,同样在属性中加入便可(要用回车在下边加上,不能跟在上个库后面加分号添加),故而自行运行其他代码时,出现类似的报错可寻求相近的解决措施。

  1. 确定并应用后,重新运行,成功实例:

4、glad 库安装和使用

  1. 那么老样子,打开Nut包下载glad...
  2. 然后你会发现

  1. 我勒个豆啊安装不了,那就自己去下载库,然后路径填进去就行了,前面步骤若是相同问题也可如此解决。
  2. glad 官网:https://glad.dav1d.de/
  3. 按下面配置选择:

  1. 然后下载压缩包

  1. 解压后有两个文件夹,都要用到:

  1. 首先是include,我们要将它添加到路径pass当中去:
  2. 打开项目属性页,找到C/C++中的附加包含目录:

  1. 找到你的glad文件中的include文件,建议是将这个glad直接放到项目文件里面去:

  1. 然后是将src中的.c文件放到项目中,和.cpp放一起就行了:

  1. 附上一则glad库测试代码:
  1. #include <glad/glad.h>
  2. #include <GLFW/glfw3.h>
  3. #include <iostream>
  4. const float vertices[] = {
  5. // 位置 // 颜色
  6. -0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 1.0f, // 左下角
  7. 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 1.0f, // 右下角
  8. 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 1.0f, // 右上角
  9. -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 1.0f // 左上角
  10. };
  11. unsigned int indices[] = {
  12. 0, 1, 2,
  13. 2, 3, 0
  14. };
  15. void framebuffer_size_callback(GLFWwindow* window, int width, int height) {
  16. glViewport(0, 0, width, height);
  17. }
  18. int main() {
  19. glfwInit();
  20. glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  21. glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  22. glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  23. GLFWwindow* window = glfwCreateWindow(800, 600, "White Quadrilateral", NULL, NULL);
  24. if (window == NULL) {
  25. std::cerr << "Failed to create GLFW window" << std::endl;
  26. glfwTerminate();
  27. return -1;
  28. }
  29. glfwMakeContextCurrent(window);
  30. glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
  31. if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
  32. std::cerr << "Failed to initialize GLAD" << std::endl;
  33. return -1;
  34. }
  35. glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
  36. unsigned int VBO, VAO, EBO;
  37. glGenVertexArrays(1, &VAO);
  38. glGenBuffers(1, &VBO);
  39. glGenBuffers(1, &EBO);
  40. glBindVertexArray(VAO);
  41. glBindBuffer(GL_ARRAY_BUFFER, VBO);
  42. glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  43. glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
  44. glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
  45. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);
  46. glEnableVertexAttribArray(0);
  47. glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(3 * sizeof(float)));
  48. glEnableVertexAttribArray(1);
  49. while (!glfwWindowShouldClose(window)) {
  50. glClear(GL_COLOR_BUFFER_BIT);
  51. glBindVertexArray(VAO);
  52. glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
  53. glfwSwapBuffers(window);
  54. glfwPollEvents();
  55. }
  56. glDeleteVertexArrays(1, &VAO);
  57. glDeleteBuffers(1, &VBO);
  58. glDeleteBuffers(1, &EBO);
  59. glfwDestroyWindow(window);
  60. glfwTerminate();
  61. return 0;
  62. }
  1. 运行成功实例:

五、结语

  1. 新建项目的话环境需要重新配置,也可以将原配置好的项目复制一份就不用再次配置了。好欸写完了,希望能对你有帮助。

标签: visual studio ide

本文转载自: https://blog.csdn.net/m0_59528725/article/details/142997916
版权归原作者 好胖好胖 所有, 如有侵权,请联系我们删除。

“OpenGL: 计算机图形学OpenGL在Visual Studio 2019/2022中的环境配置”的评论:

还没有评论