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);
}

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 不确定度用计算机怎么算,算A类不确定度用计算器该怎样按[通俗易懂]

    不确定度用计算机怎么算,算A类不确定度用计算器该怎样按[通俗易懂]不可以。根号也只能显示平方根,立方根以上就别想了,这三次方程解出来不知道是几次方根。这种计算器下面那个L-R=0是用来检验的,说明就不是用公式解的,估计是二分法或者什么其它近似解法,L-R=0只是在计算器内部算法允许的精度范围内保证L-R=0,所以肯定不支持根号。A类不确定度的计算方法。n=6时,u(a)=S(x)。数据平均值设为q。用贝塞尔公式S(x)*S(x)=[(X1-q)*(X1-q)+(…

  • NBNS扫描工具nbtscan-unixwiz

    NBNS扫描工具nbtscan-unixwizNBNS扫描工具nbtscan-unixwizNBNS是NetBIOSNameService的缩写,表示NetBIOS名称解析服务。NETBIOS是一种网络协议,用于实现消息通信和资源共享。利用该服务,可以基于NETBIOS协议获取计算机名称,从而进一步判断共享资源。KaliLinux提供了专用工具nbtscan-unixwiz。它可以直接扫描单个或者多个计算机名称或者IP地址,然后搜索…

    2022年10月21日
  • 命名规范与规则

    命名规范与规则命名规范1、项目名全部小写,就是如果项目名是多个英语单词组成的,每个单词都要全部小写。如:doubanssm。2、包名全部小写。3、类名首字母大写,若类名由多个单词构成,每个单词首字母大写,即

  • Linux之软件安装

    Linux之软件安装3.软件安装3.1软件安装介绍学软件开发,各种台的软件熟练安装是必须要熟练掌握。大家都知道,Windows下安装软件时,只需用鼠标双击软件的安装程序,或者用Zip等解压缩软件解压缩即可安装;在android或者apple中安装软件时,只需要在手机应用商店点击安装即可。而在Linux下安装软件难度高于Windows、Android、ios和windowsphone下软件安装。下面我就详细讲…

  • javascript的一些bug建议收藏

    JavaScript是如今最受欢迎的编程语言之一,但受欢迎同时就是该语言自身的各种特性带来的副作用,无论该语言多美妙,每天还是有成千上万的程序员弄出一堆bug。先不要嘲笑别人,或许你也是其中之一。给你

    2021年12月20日
  • executorservice线程池建立_线程池 threadlocal

    executorservice线程池建立_线程池 threadlocalExecutorService建立多线程的步骤:1。定义线程类classHandlerimplementsRunnable{}2。建立ExecutorService线程池ExecutorServiceexecutorService=Executors.newCachedThreadPool();或者intc

发表回复

您的电子邮箱地址不会被公开。

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