天天看点

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

目录

  • 前言
  • OpenGL是什么
  • 依赖的库
    • GLEW
    • freeglut
    • glm
  • 开发环境
    • visual studio
    • vcpkg
  • 小结之环境配置
  • 使用vcpkg安装c++库
  • 你好!窗口
  • 总结

前言

来开坑了。。。快进到挖坑不填

怎么说呢?感觉学校教的图形学,有点囫囵吞枣的感觉,害得课后自己琢磨琢磨才能玩明白。

还有一个原因是现在网上到处都是各种OpenGL的博客,但是大多都是引了一堆头文件,一顿操作,代码很多。过度的封装,导致我根本不知道其代码实现逻辑。

前几天我想实现一个shadowmapping,都要查半天的资料,看一堆博客,导致学习体验很不好。。。于是自己开坑记录下自己学习的过程。

代码方面,我尽量保证 每篇博客有且仅有一个 .cpp 文件,争取做到复制即可运行。(快进到自己骂自己:”🐖β吧我是“

OpenGL是什么

参考:https://www.khronos.org/opengl/wiki/

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

OpenGL,世界上最阴间的API ,可以理解为一组包含操作图像图形的函数的API,但是其实它是一个规范,为了跨平台而制定,不同的平台,都需要按照这一规范进行实际的开发。

依赖的库

我们基于c++进行OpenGL的学习,本章节介绍c++中OpenGL编程所必要的库。如同深度学习有tensorflow,后台服务有node.js。通过c++实现图形学编程,也需要有库帮助我们。

需要的库一共有三个,他们分别是:

  1. freeglut
  2. GLEW
  3. glm

下面单独介绍下:

GLEW

参考:http://glew.sourceforge.net/basic.html

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

因为OpenGL负责指定规范,而显卡厂商负责在其驱动程序中实现这些接口。那么不同的厂商对于OpenGL标准的实现和扩展都不同。

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结
引自:https://learnopengl-cn.readthedocs.io/zh/latest/01%20Getting%20started/02%20Creating%20a%20window/

所以我们需要一个能够发现并且加载这些接口的库。

freeglut

参考:http://freeglut.sourceforge.net/docs/api.php

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

显示图形,首先必须有窗口。因为在不同平台下,窗口的控制不尽相同,OpenGL有意将这些操作抽象出来,以便跨平台实现OpenGL。

在c++下,比较流行的窗口控制的库就是freeglut了,它允许我们创建OpenGL上下文,并且处理用户的各种输入,比如鼠标或者是键盘等等,提供一个 “交互式” 的开发环境。

glm

参考:http://glm.g-truc.net/0.9.8/api/index.html

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

说到图形学就不得不提各种矩阵,向量运算。而我们cpu要向GPU传递数据,就必须用到矩阵,向量等类型,而这些类型是c++ STL所不具备的,于是我们需要glm库作为拓展。

线性代数老师:还就内个逮到!

开发环境

介绍主要的开发环境及其工具。

visual studio

说到c++编程,就不得不提我们的开发环境了。微软为我们提供了一个方便的解决方案 — visual studio

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

visual studio 具有管理大型c++工程的能力,并且提供良好的debug和release,此外,vs community 是免费使用的!

在其 官网 可以快速的开始下载

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

vcpkg

此外,和任何包依赖的语言一样(比如python的pip或者node.js的npm),我们也需要对应的包管理工具,这个工具叫 vcpkg。

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

在其 官方网站 也可以快速找到安装的门路。

vcpkg 需要 git 的支持。请将 git 加入环境变量。此外,vcpkg还需要用到 cmake,如果没有安装,将会自动安装。

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

小结之环境配置

一图流。。。

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

总之就是。。。唔。。。我们需要安装 ⑤ 样东西:

  1. visual studio
  2. vcpkg

其中三个c++库(GLEW,freeglut,glm)我们通过 vcpkg 来进行安装。

使用vcpkg安装c++库

假设我们已经成功安装vcpkg,那么我们在 power shell 或者 cmd 中运行命令:

vcpkg install xxx
           

即可安装对应的包。假如安装过程很卡,一直下载不下来,比如:

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

我们就可以手动用浏览器访问上图中画红框的地址并且手动下载(你可以爬梯什么的)

我们以安装glm库为例:首先我们复制下载好的文件到 downloads 目录

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

然后先正常启动一次 vcpkg install 命令,发现 temp 文件夹里面有一个临时文件,我们把下载好的文件重命名成这个名字,然后丢进temp目录。

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

我们打开 power shell,然后再次执行 install 命令

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

我这里安装 glm 包,必须指定x86的版本,否则vs找不到路径,目前原因不明,可能是vcpkg默认的include路径就是x86路径

最好同时安装 x86 和 x64 的版本。。。

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

运行命令查看是否安装成功:

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

最后一步:我们运行命令,将 vcpkg 聚合到 visual studio,注意需要管理员权限

vcpkg integrate install
           

出现绿色字体说明聚合成功!

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

你好!窗口

安装完毕。我们开始进行OpenGL的第一个编程。我们创建一个窗口,但是不绘制任何东西(只是为了验证)

首先使用 visual studio 创建工程:

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

dddd

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

dddd

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

随后我们编写 main 函数,我们测试安装的三个库是否都能够顺利运行。下面是代码:

#include <iostream>
#include <GL/glew.h>
#include <GL/freeglut.h>
#include <glm/glm.hpp>

// 显示回调函数 -- 咱啥也不做
void display()
{

}

int main(int argc, char** argv)
{
    // ---- freeglut测试 ----//
    glutInit(&argc, argv);              // glut初始化
    glutInitDisplayMode(GLUT_RGBA);     // 显示模式 -- RGBA
    glutInitWindowSize(512, 512);       // 窗口大小
    glutCreateWindow("hello window");   // 标题
    glutDisplayFunc(display);           // 设置显示回调函数 -- 每帧执行
    glutMainLoop();                     // 进入主循环

    // ----   GLEW测试   ----//
    GLuint vao;
    glGenBuffers(1, &vao);              // 创建顶点数组对象
    glBindVertexArray(vao);             // 绑定vao

    // ----   glm测试    ----//
    glm::vec3 myColor(1.0, 0.5, 0.2);   // 创建三维向量
    glm::mat4 myMatrix();               // 创建矩阵

    return 0;
}
           

严格意义上来说,这段代码的逻辑是错的。但是如果我们能够通过编译并且运行产生一个纯白的窗体,说明我们环境配置成功!

OpenGL学习(一) freeglut / GLEW 环境搭建与窗口创建前言OpenGL是什么依赖的库开发环境小结之环境配置使用vcpkg安装c++库你好!窗口总结

总结

肝了一晚上,👴去睡了。俗话说万事开头难,OpenGL环境的配置是最搞心态的。但是我们仍然跌跌撞撞的完成了(当然中间会遇到很多的问题 Orz)

继续阅读