vs中使用openGL

vs中使用openGL

一、准备工作

创建Empty Project,为了能够使用OpenGL的库函数,需要把相关的库连接到项目中:
1、首先添加库的路径
<span>vs中使用openGL</span>
<span>vs中使用openGL</span>
如上,可以把需要添加的include、lib放到一起比较方便管理
这时候,VS就能找到所有需要的文件了。
2、然后把相关库链接到项目中,
<span>vs中使用openGL</span>
<span>vs中使用openGL</span>
 
<span>vs中使用openGL</span>
<span>vs中使用openGL</span>
注:GLFW是一个C写的专门用于OpenGL开发的库,它只提供把物体渲染到屏幕所需的必要功能。它可以给我们创建一个
OpenGL环境,定义窗口参数,以及相应用户输入,这些都是必要的功能。
本节使用GLFW,但是链接的时候除了GLFW,把OpenGL库也添加上了,这里,OpenGL库的添加是和
操作系统有关的。
本文使用的是windows,Microsoft SDK提供了一个opengl32.lib,是vs自带的,所以我们这里链接的是opengl32.lib。
另外,对于不同版本的OpenGL,管理各个版本之间函数调用,通过GLEW这个库实现,也需要添加这个的链接。

如果你使用GLEW的静态库,我们必须在包含GLEW之前定义一个预处理变量GLEW_STATIC。

#DEFINE GLEW_STATIC
#include <GL/glew.h>

 

至此,我们的准备工作已经完成。
 
—————

glfw是辅助创建openGL窗口的开源库.所以在后面配置工程的时候你会发现我们根本就不需要用到MFC窗口框架的,只需要console工程即可

glew是暴露openGL的通用API的开源库,

glm是openGL开发中常用的数学库,主要是一些矩阵变化. 但是该库里面的源文件都是以.hpp这种不用编译的后缀形式存在,所以只要include就行,在此环境配置中不用理会.

—————

二、openGL操作过程

1、初始化、配置GLFW
2、初始化、配置GLEW
3、设置窗口维度
4、消息循环、渲染
5、释放资源
相应例子代码:
// GLEW
#define GLEW_STATIC
#include <GL/glew.h>

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

#include<iostream>
//Function prototypes
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);

// Window dimensions
const GLuint WIDTH = 800, HEIGHT = 600;

// The MAIN function, from here we start the application and run the game loop
int main()
{
    std::cout << "Starting GLFW context, OpenGL 3.3" << std::endl;
    // 初始化GLFW
    glfwInit();  
    // 配置 GLFW
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    // 创建 GLFW 窗口
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);
    if (window == nullptr)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    //通知GLFW将我们窗口的上下文设置为当前线程的主上下文
    glfwMakeContextCurrent(window);

    // 为窗口设置回调函数(事件响应)
    glfwSetKeyCallback(window, key_callback);

    // 让GLEW在管理OpenGL的函数指针时更多地使用现代化的技术
    glewExperimental = GL_TRUE;
    // 初始化GLEW
    if (glewInit() != GLEW_OK)
    {
        std::cout << "Failed to initialize GLEW" << std::endl;
        return -1;
    }

    //设置窗口的维度,即告诉OpenGL渲染窗口的尺寸大小
    //我们实际上也可以将视口的维度设置为比GLFW的维度小,
    //这样子之后所有的OpenGL渲染将会在一个更小的窗口中显示,
    //这样子的话我们也可以将一些其它元素显示在OpenGL视口之外。
    int width, height;
    glfwGetFramebufferSize(window, &width, &height);
    glViewport(0, 0, width, height);

    // 游戏循环
    while (!glfwWindowShouldClose(window))
    {
        //检查有没有触发什么事件(比如键盘输入、鼠标移动等),然后调用对应的回调函数
        glfwPollEvents();

        // Render
        // Clear the colorbuffer
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // 交换颜色缓冲
        glfwSwapBuffers(window);
    }

    // 释放/删除之前的分配的所有资源
    glfwTerminate();
    return 0;
}

// Is called whenever a key is pressed/released via GLFW
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    std::cout << key << std::endl;
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119500.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月18日 下午11:00
下一篇 2021年11月19日 上午6:00


相关推荐

  • ie兼容性视图在哪里设置win10_ie11兼容性视图设置

    ie兼容性视图在哪里设置win10_ie11兼容性视图设置在访问一些网站时被告知只能使用IE浏览器进行访问,我个人更新了win11的预览版本之后更是在系统中找不到IE的踪迹,edge中的“兼容性视图”选项并没有直接在设置出显示出来,于是一番努力后我发现了在edge中使用IE兼容性视图的设置方法。一、打开“设置”在edge右上角“…”选项中选择“设置”打开。二、设置“InternetExplorer模式”在设置页面的左侧选择“默认浏览器”,右侧将“允许在InternetExplorer模式下重新加载网站”的下拉选择由“默认值”改为“允许

    2025年10月1日
    6
  • Visual Studio 2019 Community 离线注册教程「建议收藏」

    Visual Studio 2019 Community 离线注册教程「建议收藏」VS2019社区版是免费的,但是需要登录微软账户,不登录只能使用30天,30天之后就无法使用了,如下图:首先使用能够访问外网的电脑登录微软账户注册VS。也可以使用我这个Licensing,直接进入第三步 找到注册文件,路径:C:\Users\{系统登录用户}\AppData\Local\Microsoft\VSCommon 将两个文件夹复制到需要注册的电脑上,路径:C:\…

    2022年10月13日
    7
  • 由近期裁员想到的

    由近期裁员想到的经济形势一路走低,公司裁员的消息也偶尔听闻,其中闹的比较醒目的则是摩托罗拉移动的裁员。从报道来看,南京摩托罗拉移动的各位对这个公司还是很有些恋恋不舍的,甚至提出了希望再为公司工作一年的期望。具体情形其实不太了解,不妄发评论了,但这事再次提醒我们一个很本质的事情:职场如市场,本质上就是一场交换。员工可以跳槽,公司可以裁员,都是非常的正常。很多公司都会强调企业文化,希望能营…

    2022年7月17日
    18
  • Python、 Pycharm、Django安装详细教程

    Python、 Pycharm、Django安装详细教程最近做项目要用到 python 那么不用说就得先配置好 python 环境以及选择好 python 工具 接下来分享自己的安装过程 一 Python 的安装 1 先进入官网下载 python 版本 https www python org downloads 2 下载完成后双击 exe 文件进行安装 可以自定义安装 也可以默认安装 我选择的是自定义安装 注意 我这里是选择自

    2026年3月27日
    2
  • 【JS语法糖】常见的几种JS语法糖

    【JS语法糖】常见的几种JS语法糖JS 语法糖 常见的几种 JS 语法糖今天遇到一个前端方面的新词汇语法糖第一次听到这个词我的第一反应是 这是一个糖可能是像这样的 或者像这样 PS 旺仔牛奶是不是该给我打钱了 手动 dog 正经的分割线语法糖 Syntactic

    2026年3月26日
    1
  • 如何设计一个通用的权限管理系统

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:PioneerYi juejin.im/post/6850037267554287629 一个系统,如果没有安…

    2021年6月27日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号