基于 Visual Studio 配置 opengl 环境

这篇具有很好参考价值的文章主要介绍了基于 Visual Studio 配置 opengl 环境。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于 Visual Studio 配置 opengl 环境


下载内容

  • Visual Studio 2022
  • glfw
  • glad

Visual Studio 2022

打开链接,看到如下界面:
基于 Visual Studio 配置 opengl 环境

傻瓜式安装即可,如果不知道需要安装什么环境,可以什么都不装。

glfw

打开链接,看到如下界面:
基于 Visual Studio 配置 opengl 环境

注意下载 win32 版本。

glad

打开链接,看到如下界面:
基于 Visual Studio 配置 opengl 环境
选择上述内容后,点击 generate。跳转后下载出现的安装包即可。

环境配置

调整 Visual Studio

首先打开 Visual Studio Installer,点击修改,安装如下两个环境:
基于 Visual Studio 配置 opengl 环境
基于 Visual Studio 配置 opengl 环境

创建项目

打开 Visual Studio,并创建项目:
基于 Visual Studio 配置 opengl 环境
这里选控制台应用:
基于 Visual Studio 配置 opengl 环境

注意勾选以下选项:
基于 Visual Studio 配置 opengl 环境
如果没有问题你将会跳转到如下界面:
基于 Visual Studio 配置 opengl 环境

放置项目文件

打开项目所在文件夹:基于 Visual Studio 配置 opengl 环境
我们创建如下的文件夹:

  • build:这将是 vs 的工作目录
  • include:这将是头文件的存放目录
  • libs:这将是链接文件的存放目录
  • src:这将是源文件的存放目录
  • utils:这将是辅助文件的存放目录
    基于 Visual Studio 配置 opengl 环境

打开之前下载的 glad 压缩包:

  • 将 glad-include 中的文件移动到本项目的 include
  • 将 glad-src 中的文件移动到本项目的 src
    基于 Visual Studio 配置 opengl 环境

打开之前下载的 glfw 压缩包:

  • 将 glfw-include 中的文件移动到本项目的 include
  • 将 glfw-lib-vc2022 中的文件移动到本项目的 libs
    基于 Visual Studio 配置 opengl 环境

顺便,你可以删除 project.cpp 文件。
现在项目如下所示:
基于 Visual Studio 配置 opengl 环境

设置项目

打开项目属性:
基于 Visual Studio 配置 opengl 环境

常规部分:将工作目录改为./build
基于 Visual Studio 配置 opengl 环境
调试部分同理:
基于 Visual Studio 配置 opengl 环境

注意将位于窗口顶部的配置选项设为所有配置平台选项设为Win32

c/c++ 部分:
附加包含目录 处添加./include
基于 Visual Studio 配置 opengl 环境

链接器部分:
附加库目录处添加./libs
基于 Visual Studio 配置 opengl 环境

附加依赖项处添加如下信息:

opengl32.lib
glfw3.lib
msvcrt.lib

基于 Visual Studio 配置 opengl 环境

点击右下角应用,即可保存。

测试

显示所有文件,在 ./src 中找到之前放入的 glad.c,将其包括到项目中:
基于 Visual Studio 配置 opengl 环境
基于 Visual Studio 配置 opengl 环境

右击右侧空白,在 ./src 中创建 main.cpp 文件:
基于 Visual Studio 配置 opengl 环境
基于 Visual Studio 配置 opengl 环境

通过这种方式创建的文件,会被自动包含到项目中。

打开 main.cpp,加入以下内容:
基于 Visual Studio 配置 opengl 环境

#include <glad/glad.h>
#include <GLFW/glfw3.h>

#include <iostream>

void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow *window);

// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;

const char *vertexShaderSource = "#version 330 core\n"
    "layout (location = 0) in vec3 aPos;\n"
    "void main()\n"
    "{\n"
    "   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
    "}\0";
const char *fragmentShaderSource = "#version 330 core\n"
    "out vec4 FragColor;\n"
    "void main()\n"
    "{\n"
    "   FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
    "}\n\0";

int main()
{
    // glfw: initialize and configure
    // ------------------------------
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

#ifdef __APPLE__
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif

    // glfw window creation
    // --------------------
    GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

    // glad: load all OpenGL function pointers
    // ---------------------------------------
    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }


    // build and compile our shader program
    // ------------------------------------
    // vertex shader
    unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    glCompileShader(vertexShader);
    // check for shader compile errors
    int success;
    char infoLog[512];
    glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
    if (!success)
    {
        glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
        std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
    }
    // fragment shader
    unsigned int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    glCompileShader(fragmentShader);
    // check for shader compile errors
    glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
    if (!success)
    {
        glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
        std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
    }
    // link shaders
    unsigned int shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
    glLinkProgram(shaderProgram);
    // check for linking errors
    glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
    if (!success) {
        glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
        std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
    }
    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);

    // set up vertex data (and buffer(s)) and configure vertex attributes
    // ------------------------------------------------------------------
    float vertices[] = {
        -0.5f, -0.5f, 0.0f, // left  
         0.5f, -0.5f, 0.0f, // right 
         0.0f,  0.5f, 0.0f  // top   
    }; 

    unsigned int VBO, VAO;
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);
    // bind the Vertex Array Object first, then bind and set vertex buffer(s), and then configure vertex attributes(s).
    glBindVertexArray(VAO);

    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);

    // note that this is allowed, the call to glVertexAttribPointer registered VBO as the vertex attribute's bound vertex buffer object so afterwards we can safely unbind
    glBindBuffer(GL_ARRAY_BUFFER, 0); 

    // You can unbind the VAO afterwards so other VAO calls won't accidentally modify this VAO, but this rarely happens. Modifying other
    // VAOs requires a call to glBindVertexArray anyways so we generally don't unbind VAOs (nor VBOs) when it's not directly necessary.
    glBindVertexArray(0); 


    // uncomment this call to draw in wireframe polygons.
    //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

    // render loop
    // -----------
    while (!glfwWindowShouldClose(window))
    {
        // input
        // -----
        processInput(window);

        // render
        // ------
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // draw our first triangle
        glUseProgram(shaderProgram);
        glBindVertexArray(VAO); // seeing as we only have a single VAO there's no need to bind it every time, but we'll do so to keep things a bit more organized
        glDrawArrays(GL_TRIANGLES, 0, 3);
        // glBindVertexArray(0); // no need to unbind it every time 
 
        // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
        // -------------------------------------------------------------------------------
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    // optional: de-allocate all resources once they've outlived their purpose:
    // ------------------------------------------------------------------------
    glDeleteVertexArrays(1, &VAO);
    glDeleteBuffers(1, &VBO);
    glDeleteProgram(shaderProgram);

    // glfw: terminate, clearing all previously allocated GLFW resources.
    // ------------------------------------------------------------------
    glfwTerminate();
    return 0;
}

// process all input: query GLFW whether relevant keys are pressed/released this frame and react accordingly
// ---------------------------------------------------------------------------------------------------------
void processInput(GLFWwindow *window)
{
    if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
        glfwSetWindowShouldClose(window, true);
}

// glfw: whenever the window size changed (by OS or user resize) this callback function executes
// ---------------------------------------------------------------------------------------------
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
    // make sure the viewport matches the new window dimensions; note that width and 
    // height will be significantly larger than specified on retina displays.
    glViewport(0, 0, width, height);
}

修改运行选项,并开始运行:
基于 Visual Studio 配置 opengl 环境

最后,你应该能看到一个三角形:
基于 Visual Studio 配置 opengl 环境文章来源地址https://www.toymoban.com/news/detail-448287.html

参考资料

  • https://blog.csdn.net/weixin_44716867/article/details/110726972
  • https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/

到了这里,关于基于 Visual Studio 配置 opengl 环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【配置环境】Visual Studio 配置 OpenCV

    目录 一,环境 二,下载和配置 OpenCV 三,创建一个 Visual Studio 项目 四,配置 Visual Studio 项目 五,编写并编译 OpenCV 程序 六,解决CMake编译OpenCV报的错误 七,本人编译好的库 Windows 11 家庭中文版 Microsoft Visual Studio Community 2022 (64 位) - Current版本 17.5.3 CMake – 3.24.1 OpenCV – 4.8.0

    2024年02月08日
    浏览(55)
  • Visual Studio项目环境配置

    一. 静态库环境配置 1.1 添加静态库对应的头文件所在目录 1.1.1 使用尖括号引用头文件的配置 右键项目-属性-配置属性-VC++目录 点击包含目录,点击右边的下拉箭头,点击编辑,添加新的项,手动输入附加库头文件的路径 点击确定保存,这样就能保证我们能用引用我们想要使

    2024年02月05日
    浏览(46)
  • Visual Studio搭建C++环境 配置教程

    1、下载软件 官网下载需要安装的版本Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器,目前最新版本更新到2022。  2、安装软件 双击下载的安装文件,弹出安装界面, 选择工作负载,勾选 使用C++的桌面开发 和 Visual Studio扩展开发 。我本地已经装了vs2019,直接选择

    2023年04月08日
    浏览(96)
  • MatlabR2022b + Visual Studio环境配置

    在Matlab中输入 mex -setup c++ 命令确认MEX使用VS2022编译环境。 VC++目录-包含目录-添加 D:Matlab2022bexterninclude VC++目录-库目录-添加 D:Matlab2022bexternlibwin64mingw64 D:Matlab2022bexternlibwin64microsoft 链接器-输入-添加 D:Matlab2022bexternlibwin64mingw64libmat.lib D:Matlab2022bexternlibwin64mingw

    2024年02月10日
    浏览(39)
  • MySQL开发环境的配置(visual studio)

    本文主要讲解在visual studio上编写MySQL程序前,需要做的准备。 1、MySQL开发头文件和库文件 找到MySQL的安装目录,在安装目录下找到lib和include目录   2、创建C++项目文件  右键项目方案,打开项目所在文件夹      将第一步,lib文件夹下的libmysql.dll和libmysql.lib文件,以及inclu

    2024年02月05日
    浏览(53)
  • <Visual Studio 2019安装及环境配置教程>

    目录 1.Visual Studio 2019下载安装: 1.1 进入官网 1.2 选择所需Visual Studio 2019安装包 1.3  Visual Studio 2019 版本说明 1.4 点击下载、安装 1.5 登录账户 1.6 使用演示 2.写在最后的话:  后记:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!  

    2024年02月14日
    浏览(49)
  • 一文搞定 Visual Studio 配置 OpenCV环境

    在 Visual Studio 上配置 OpenCV 环境是极其恼人的事情,尤其是对于初学者,经常几个小时过去了都配不好,将我们对代码的热爱扼杀在摇篮之中。 本文根据本人的无数次环境配置经历,总结了一套完整的 OpenCV 环境配置流程,包教包会,百分百成功。 要在 Visual Studio 上配置 Op

    2024年02月16日
    浏览(54)
  • Visual Studio Code配置Python运行环境

    Visual Studio Code配置Python运行环境(保姆级教学) Visual Studio Code是微软针对于编写现代Web和云应用开发的跨平台源代码编辑器,它支持多种语言和文件格式的编写,并且启动速度快,开源,语法高亮,颜值高等优点集于一身,受到许多开发者的热爱。 随着Python编程语言迅速的

    2024年02月16日
    浏览(50)
  • FBX SDK 开发环境配置 visual studio 2022

    FBX | Adaptable File Formats for 3D Animation Software | Autodesk. 下载windows的sdk并安装. 创建一个c++ console 工程 设置include目录 添加预处理宏 FBX_SHARED=1 添加fbx sdk lib 目录 添加依赖lib :  libfbxsdk-md.lib libxml2-md.lib zlib-md.lib 配置完毕.

    2024年02月10日
    浏览(45)
  • Visual Studio 2022 cmake配置opencv开发环境

    这里我用的是 widnows 10 64位 , Visual Studio 用的 Visual Studio Community 2022 (社区版) 对于 Android 开发工程师来说,为什么要使用 Visual Studio 呢 ? 因为在 Visual Studio 中开发调试 OpenCV 方便,可以开发调试好后,再移植到 Android 中。 官方地址在这里 : 官方下载地址 不过官方下载地址可能

    2024年02月07日
    浏览(93)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包