OpenGL的环境搭建(cmake+glfw+glew+vs2017)

材料准备

1、visual studio 2012版本以上的一种,本篇教程依靠源码编译,不受vs版本影响,装自己方便的一种。
2、cmake,百度cmake官网下载安装,感到困难的先百度个cmake安装教程。
3、解压的软件……

glfw的编译

第一步我们要得到这两个库的.h文件和.lib文件。

1.下载

glfw官网
打开链接后我们在页面找到适合自己系统的源码包下载下来。
glfw
下载后解压之。

2.编译

再新建文件夹,名称随意,用来存放cmake编译出来的一大堆东西。
在这里插入图片描述
打开cmake的gui
在这里插入图片描述
源路径我们要找到cmakelist.txt所在的文件夹,目标就用我们新建的空文件夹了,具体设置如图所示
在这里插入图片描述

设置好路径第一次点击configure,设置自己的vs版本,然后finish开始产生设置页面(一堆红色的)。
在这里插入图片描述
这里glfw全部默认设置(红色的一堆不要动),不要去更改多选框,第2次configure,出现configure done后,再generate很快出现Generating done就OK了。在这里插入图片描述
完毕后空的文件夹下就会出现VS的工程,下一步我们要使用VS。

3.VS生成.h和.lib

cmake任务结束了,关闭之。
打开目标文件夹找到glfw.sln,双击从VS打开。
点击菜单栏的 生成–生成解决方案 将工程生成。
在这里插入图片描述
等待VS生成完毕,在工程目录\src\Debug下可以找到glfw3.lib。这就是我们所需要的静态库,除此之外在我们最初解压出来的文件夹中包含一个存储.h头文件的GLFW文件夹,这个也是我们需要的内容。
在这里插入图片描述

glew的下载

glew下载
与glfw相比glew简单了很多。在官网我们下载二进制版本,不用源码编译了。
在这里插入图片描述
下载后解压得到的文件夹
在这里插入图片描述
我们能在include文件夹下找到存储.h的GL文件夹 ,能在 \lib\Release\Win32下找到glew32s.lib静态库(注意要win32路径下的静态库别要x64的)。至此我们找到了一共四样东西(两个头文件夹GL和GLFW,两个静态库 glfw3.lib和glew32s.lib)下一步就可以新建工程链接他们四个了。

VS下新建opengl工程完成链接

新建一个工程,找到空项目这一选项,设置名字路径后确定。
在这里插入图片描述
文件资源管理器下打开空项目的文件夹,新建一个lib文件夹和include文件夹。
在这里插入图片描述
找到之前提到的GL和GLFW文件夹,放进include中。而两个lib文件放在lib中。
在这里插入图片描述
在这里插入图片描述
回到VS,右键工程名字点击属性打开工程设置的面板
在这里插入图片描述
在链接输入下设置附加依赖项,添加三个lib(glew32s.lib opengl32.lib glfw3.lib)
在这里插入图片描述
vc++ – 包含目录 添加我们安排好的include
在这里插入图片描述

vc++ – 库目录 添加我们安排好的lib。在这里插入图片描述

确定保存 至此环境搭建完毕,以后每当新建一个opengl工程,就把我们的include lib文件夹复制粘贴放进新的空项目然后配置工程属性就好了。

TRY

本教程全程参考良心的learnopengl翻译版本
这一段代码给坚持到现在的你,源文件下新建.cpp文件,粘贴后运行。

#include <iostream>

// GLEW
#define GLEW_STATIC

#include <GL/glew.h>

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


// 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;
    // Init GLFW
    glfwInit();
    // Set all the required options for 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);

    // Create a GLFWwindow object that we can use for GLFW's functions
    GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);    
    if (window == nullptr)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    // Set the required callback functions
    glfwSetKeyCallback(window, key_callback);

    // Set this to true so GLEW knows to use a modern approach to retrieving function pointers and extensions
    glewExperimental = GL_TRUE;
    // Initialize GLEW to setup the OpenGL Function pointers
    if (glewInit() != GLEW_OK)
    {
        std::cout << "Failed to initialize GLEW" << std::endl;
        return -1;
    }    

    // Define the viewport dimensions
    int width, height;
    glfwGetFramebufferSize(window, &width, &height);  
    glViewport(0, 0, width, height);

    // Game loop
    while (!glfwWindowShouldClose(window))
    {
        // Check if any events have been activiated (key pressed, mouse moved etc.) and call corresponding response functions
        glfwPollEvents();

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

        // Swap the screen buffers
        glfwSwapBuffers(window);
    }

    // Terminate GLFW, clearing any resources allocated by GLFW.
    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);
}

可能出现的坑就是开头的#define 和 #include有时候不能挨在一起,靠在一起会导致我的VS的代码提示功能不好用(不知道VS搞什么幺蛾子),所以我帮大家做了空行了。

控制台可以读取键盘输入字符ascll码,按下一次输出松开一次输出,完结撒花~~。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值