1.1 开始

这是我在学习 OpenGL 时的记录,所以文章以简单叙述为主。1
计算机创建和显示图像时,一般由计算机显卡渲染完成,而显卡中就记录了一些渲染图形的 API,其中 OpenGLDirectX 最为常用,这系列文章讲的就是如何使用 openGL 在计算机上绘图并显示在屏幕上。由于 OpenGL 的 API 是显卡提供的,所以请保证显卡较新,最好使用更新的显卡驱动。

1.2 开发环境

1.2.1 准备

Windows 操作系统(这是我使用的,其他操作系统差异不大,具体情况变通一下即可)
Microsoft Visual Studio(版本最好高于2012,我使用的是 vs2017,推荐使用 vs2015 或 vs2017,在安装程序里选中 linux 的 C++ 库会减少一些麻烦)
CMake 工程文件生成工具
下载链接:http://www.cmake.org/cmake/resources/software.html/
c++ 库:(下载时最好下源码32位版本,源码后面需要用 CMake+VS 编译好后使用)
GLFW 库 用于 OpenGL 创建窗口和处理输入
下载链接:http://www.glfw.org/download.html/
GLEW 库 能够简化 OpenGL 库函数调用的库
下载链接:http://glew.sourceforge.net/index.html/
ps:下载链接失效/速度慢,可以从我的 csdn 资源里下载。(我的 FLEW 库是编译好的文件)

1.2.2 编译构建库

将 GLFW 和 GLEW 的压缩包解压到各自的文件夹;
在各自的目录下创建额外的目录 /build (在该目录下存放编译后的文件,也可以自行指定位置);
安装并打开 CMake,指定好 GLFW 的存放目录、编译后文件的存放目录(前面创建的 /build 目录);

点击配置(configure)按钮,设置好你安装的编译器版本,其他选项默认,没有出错的话就点击生成(generate)按钮,完成编译;
这时构建目录就会生成一些文件,其中包含一个 GLFW.sln(VS 解决方案文件),用 VS 打开这个文件,点击构建/生成,GLFW 库就构建好了;
如果你的 GLEW 文件是源码,则需要进行上述的同样步骤。(如果你下载的是我的文件,就无视吧)

1.2.3 项目配置

打开 Visual Studio 新建一个项目,右键点击项目->属性,在属性窗口中编辑库函数的目录:

打开 vc++目录选项卡,编辑包含目录(include),添加 2个新行,选中 GLFW 的 include 目录和 GLEW 的 include 目录;

编辑库目录(lib),添加 2个新行,选中 GLFW 的构建(/build)目录中的 src/Debug 目录和 GLEW 的 lib/Release/Win32 目录,也就是存放 glfw3.lib 和 glew32s.lib 的地址;
切换到链接器->输入选项卡,编辑附加加载项,添加新行,写入 glfw3.libglew32s.lib


至此项目的环境配置完成了,下面就能在代码中调用使用 OpenGL 的库函数进行绘图了,只要在代码段前将头文件包含即可:

// GLEW
#define GLEW_STATIC
#include <GL/glew.h>
// GLFW
#include <GLFW/glfw3.h>

1.3 第一个项目

1.3.1 头文件

包含 GLFW 和 GLEW 库,包含了另一些库来解决找不到库函数的问题,代码如下:

// GLEW
#define GLEW_STATIC
#include <GL/glew.h>
// GLFW
#include <GLFW/glfw3.h>
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")
1.3.2 主循环

这里用游戏循环模式来进行绘图,防止画面输出后直接退出程序,代码如下:

 // 创建游戏循环while (!glfwWindowShouldClose(window)) {// 事件处理glfwPollEvents();// 交换颜色缓冲(双缓冲),绘制图像glfwSwapBuffers(window);}
1.3.3 用 GLFW 创建窗口
 // 初始化 GLFWglfwInit();// glfwWindowHint() // 配置 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);// Mac OS 额外增加// glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);// 创建一个窗口GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);if (window == nullptr) {cout << "Failed to create GLFW window" << endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);
1.3.4 初始化 GLEW
 // 初始化 GLEWglewExperimental = GL_TRUE;if (glewInit() != GLEW_OK) {cout << "Failed to initialize GLEW" << endl;return -1;}
1.3.5 设置窗口大小及释放内存
 // 设置窗口大小int width, height;glfwGetFramebufferSize(window, &width, &height);glViewport(0, 0, width, height);// 创建游戏循环while (!glfwWindowShouldClose(window)) {// dosomething();}// 释放 GLFW 内存glfwTerminate();
1.3.6 源码
#include <iostream>
// GLEW
#define GLEW_STATIC
#include <GL/glew.h>
// GLFW
#include <GLFW/glfw3.h>
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")using namespace std;int main (void) {// 初始化 GLFWglfwInit();// glfwWindowHint() // 配置 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);// Mac OS 额外增加// glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);// 创建一个窗口GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", nullptr, nullptr);if (window == nullptr) {cout << "Failed to create GLFW window" << endl;glfwTerminate();return -1;}glfwMakeContextCurrent(window);// 初始化 GLEWglewExperimental = GL_TRUE;if (glewInit() != GLEW_OK) {cout << "Failed to initialize GLEW" << endl;return -1;}// 设置窗口大小int width, height;glfwGetFramebufferSize(window, &width, &height);glViewport(0, 0, width, height);// 创建游戏循环while (!glfwWindowShouldClose(window)) {// 事件处理glfwPollEvents();// 交换颜色缓冲(双缓冲),绘制图像glfwSwapBuffers(window);}// 释放 GLFW 内存glfwTerminate();return 0;
}

将代码保存到源文件目录中,启动项目,你会看到一个黑色的窗口,这证明:你成功了!


  1. 我在学习时参考了许多资料,其中有个非常好用的 OpenGL 学习网站
    网站链接:https://learnopengl-cn.readthedocs.io/zh/latest/ ↩︎

OpenGL 简明教程(一)开篇相关推荐

  1. vbs简明教程(转载)

    Vbs脚本编程简明教程之一       -为什么要使用Vbs?2007年03月26日 星期一 下午 04:46 在Windows中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周 ...

  2. 安卓python3开发环境搭建,Python3开发环境搭建简明教程

    Python3开发环境建立简明教程 ★ 「锐玩道」原文链接 " 剁手得很决绝的今日 那就来份平平无奇的教程吧 (作为 Scrapy 系列的开篇) Python 环境设备 下载 Python ...

  3. CGIC简明教程(转摘)

    CGIC简明教程 本系列的目的是演示如何使用C语言的CGI库"CGIC"完成Web开发的各种要求. *********************************     基础 ...

  4. kangle web server源代码安装简明教程

    kangle web server源代码安装简明教程 - kangle使用交流 - kangle软件 是一款高性能web服务器,反向代理服务器,提供虚拟主机管理系统及代理服务器,web服务器架设 - ...

  5. CentOs6.5中安装和配置vsftp简明教程

    这篇文章主要介绍了CentOs6.5中安装和配置vsftp简明教程,需要的朋友可以参考下 一.vsftp安装篇 复制代码代码如下: # 安装vsftpd yum -y install vsftpd # ...

  6. sqlalchemy mysql_SQLAlchemy简明教程

    原文可见:SQLAlchemy简明教程 - Jiajun的编程随想 SQLAlchemy是Python中常用的一个ORM,SQLAlchemy分成三部分: ORM,就是我们用类来表示数据库schema ...

  7. python tcp server_python scoket 编程 | tcp server client - 简明教程

    TCP 和 UDP 的区别 这两个协议都是传输层的协议,解决的问题,都是端口与端口的通信问题. TCP 每次建立通信,都需要三次握手,确定双方状态完毕,在发送数据.如果发送的数据出现了异常,TCP 也 ...

  8. 简明python教程pdf-python简明教程中文pdf

    python简明教程中文pdf电子书是作者通过自己对计算机语言多年来的研究和学习得出的学习经验,对于python新手来说非常有用,值得大家下载学习. python简明教程中文pdf文章目录 1.介绍 ...

  9. 简明python教程在线-Python简明教程

    Python简明教程在线阅读地址: https://bop.molun.net/ DocStrings 该文档字符串所约定的是一串多行字符串,其中第一行以某一大写字母开始,以句号结束.第二行为空行,后 ...

最新文章

  1. [导入]用Javascript实现interface的类似功能
  2. 基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】...
  3. 转载 JDK + Android-SDK + Python + MonkeyRunner 的安装
  4. db2 本地db 到实例_如何登录到FreeCodeCamp的本地实例
  5. Qt常用类——QWidget
  6. ORA-00018-超出最大连接数
  7. 2019华为软件精英挑战赛经验总结
  8. uniapp微信公众号跳转小程序(vue项目)
  9. 服务器英文系统怎么切中文,云服务器怎么把英文改成中文
  10. win7java浏览器崩溃_win7系统打开网页就出现崩溃现象的原因及解决方法
  11. 体验灵魂出窍:错觉延伸人体对自身感觉
  12. 融捷能源携手企企通,打造智能化、数字化采购平台
  13. Electron屏幕截图的技术方案MacWindows
  14. 解决THINKBOOK 14安装windows系统不识别固态硬盘的问题
  15. 常见电脑硬件故障有哪些?如何解决?~~~显卡故障
  16. matlab2010 notebook,Matlab在Win10 64位下用notebook的问题
  17. KK模组、同步带模组和线性模组的区别在哪里?
  18. MinIO安装及使用教程(windows) 及java 上传 下载 windows minio 修改密码修改 MINIO_ACCESS_KEY minio开机启动
  19. 自己实现一个complex class(复数类)
  20. 树形选择变成表格树选择

热门文章

  1. AutoAugment中16种数据增强方法可视化直观展示
  2. 思科9124光纤交换机配置管理使用手册
  3. win10隐藏任务栏_win10系统任务栏彰显个性的设置方法
  4. 800名科学家联名反对统计学意义,放弃P值“决定论”!
  5. Ubuntu20.4 搭建OnlyOffice文档服务器
  6. 程序员是吃青春饭的吗?
  7. android电视 怎么调电视机的信号源,如何设置智能电视、盒子信号源?原来这么简单!具体方法如下...
  8. c语言程序压缩解压缩文件夹,【转】使用VC++压缩解压缩文件夹
  9. 程序员如何管理好自己的思维?
  10. Primitives vs Objects