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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • VS2019、VS2017、VS2013产品密钥

    VS2019、VS2017、VS2013产品密钥VisualStudio2013VisualStudioUltimate2013KEY:BWG7X-J98B3-W34RT-33B3R-JVYW9VisualStudioPremium2013KEY:FBJVC-3CMTX-D8DVP-RTQCT-92494VisualStudioProfessional2013KEY:XDM3T-W3T3V-MGJWK-8B…

    2022年5月19日
    51
  • Java自学视频整理(持续更新中…)

    Java自学视频整理(持续更新中…)1.Java基础视频 《张孝祥JAVA视频教程》完整版[RMVB](东西网)历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播客)张孝祥2010年贺岁视频:Java高新技术(传智播客)Java多线程与并发库高级应用(传智播客)尚学堂JAVA视频下载大全(持续更新中…请关注!)(尚学堂)《动力节点,王勇JAVA系列视频教程》(东西网)张孝祥Java高新技术

    2022年7月8日
    22
  • C# winform窗体程序的美化之路「建议收藏」

    C# winform窗体程序的美化之路「建议收藏」写在前面:今天帮同学做毕业设计一个简单的Windows窗体程序实现备忘录的效果,要求使用数据库,我想着很简单于是上手开始做,两天完成,于是同学拿去给老师检查,检查后老师认为不错功能实现完整。就是。。。界面太!丑!了!强迫症的我当然不能忍受于是今天学习一下c#winform窗体程序的美化(我也是新手,各位大佬请多多指教)。因为最近写的安卓程序中用了大量第三方开源框架,就想着c#会不会也有

    2022年5月28日
    42
  • linux查看硬盘smart信息_检查中ctl是检查什么

    linux查看硬盘smart信息_检查中ctl是检查什么知识介绍SMART是一种磁盘自我分析检测技术,早在90年代末就基本得到了普及每一块硬盘(包括IDE、SCSI)在运行的时候,都会将自身的若干参数记录下来这些参数包括型号、容量、温度、密度、扇区、寻道时间、传输、误码率等硬盘运行了几千小时后,很多内在的物理参数都会发生变化某一参数超过报警阈值,则说明硬盘接近损坏此时硬盘依然在工作,如果用户不理睬这个报警继续使用那么硬盘将变得非常不可靠,随时可能故障启用SMARTSMART是和主板BIOS上相应功能配合的要使用SMART,必须先进入到主板

    2022年10月8日
    2
  • 海思AI芯片(Hi3516DV300/CV500)开发(1.资料介绍)「建议收藏」

    海思AI芯片(Hi3516DV300/CV500)开发(1.资料介绍)「建议收藏」目录1、SVP资料介绍1.1SVP简介1.2开发框架1.3开发流程2、Hi3516DV300/CV500SDK内容介绍1、SVP资料介绍1.1SVP简介SVP(SmartVisionPlatform)是海思媒体处理芯片智能视觉异构加速平台。该平台包含了CPU、DSP、NNIE(NeuralNetworkInferenceEngine)等多个…

    2022年9月23日
    2
  • vue中显示静态图片怎么引用

    vue中显示静态图片怎么引用

    2022年4月2日
    38

发表回复

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

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