2. 第一个OpenGL窗口程序

2.1 glfw库

一个轻量级的,开源的,跨平台的library。支持OpenGL及OpenGL ES,用来管理窗口,读取输入,处理事件等。因为OpenGL没有窗口管理的功能,所以很多热心的人写了工具来支持这些功能,比如早期的glut,现在的freeglut等。那么GLFW有何优势呢?glut太老了,最后一个版本还是90年代的。freeglut完全兼容glut,算是glut的代替品,功能齐全,但是bug太多。GLFW应运而生。
有了这个库,就可以开始着手建立一个OpenGL窗口了,你甚至只用五行代码就能画出一个三角形来
下载地址: glfw.org. 进入后点击Dowload,然后下载32-bit Windows binaries
网盘:https://pan.baidu.com/s/1PsbAhINrbJ2hfFCny0tiyA 提取码:lwlt
下载后你会得到一个压缩包,里边包含一堆lib库。

2.2 创建OpenGL程序

  1. 使用VisualStudio创建一个C++的空项目
  2. 添加源文件
    在程序中添加一个src文件夹用来存放源文件,首先点击解决方案资源管理器器上方的 “显示所有文件”,然后按照下图操作,以创建一个application.cpp文件,当然,名字随意。
  3. 第一个窗口程序代码
#include <GLFW/glfw3.h>int main(void)
{GLFWwindow* window;/* Initialize the library */if (!glfwInit())return -1;/* Create a windowed mode window and its OpenGL context */window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);if (!window){glfwTerminate();return -1;}/* Make the window's context current */glfwMakeContextCurrent(window);/* Loop until the user closes the window */while (!glfwWindowShouldClose(window)){/* Render here */glClear(GL_COLOR_BUFFER_BIT);/* Swap front and back buffers */glfwSwapBuffers(window);/* Poll for and process events */glfwPollEvents();}glfwTerminate();return 0;
}

当你把代码拷贝进入自己的程序中,发现会有一堆的错误,不要着急,下边我们将设置引入GLFW库。

  1. 设置GLFW库

我们在2.1中已经下载了GLFW的库,如果你没有下载那么去下载一下,然后在我们的解决方案所在目录下新建一个文件夹Dependencies,在Dependencies下建立文件夹GLFW,然后将2.1中下载的文件中的include文件夹和符合你VisualStudio版本的lib文件夹复制到GLFW文件夹中。并删除lib库中的动态库,因为我们只需要静态库。最后得到文件结构如下图所示


① 将头文件链接到项目中,打开解决方案属性页(Alt+Enter),在“C/C++”→“常规” →“附加包含目录”中设置include路径,$(SolutionDir)即我们项目解决方案所在的路径。如下图:

②将库文件链接到项目中,打开解决方案属性页(Alt+Enter)在“链接器”→“常规” →“附加库目录”中设置lib路径(根据自己实际情况),如下图:

③设置附加依赖项,打开解决方案属性页(Alt+Enter)在“链接器”→“输入” →“附加依赖项”中设置我们需要链接的文件,默认的那些我们可以删掉,因为我们不需要。如下图:

到这里,代码中的错误提示应该已经没有了,如果你还有错误,就去检查一下链接的头文件与库文件的路径是否正确。我们可以Ctrl+F7编译一下,显示成功就证明我们以上步骤都完成了,如下图:
④.找回误删除的依赖
现在我们右击解决方案,点击生成,会发现有一大堆错误显示 “无法解释的外部符号”,这是因为我们在③中删除了所有的库,只留下了glfw3.lib,现在,我们需要用一分钟去找回他们。

我们可以切换到输出窗口(可以复制)

随便复制一条错误中的方法名称,例如glClear、TranslateMessage,然后在浏览器中使用微软Bing引擎国际版搜索,如下图:

点击第一条结果(微软建立的Documentation),下拉就会找到这个方法需要添加的依赖

然后将Opengl32.lib添加到③中“附加依赖项”中,并用相同方式解决剩下的错误,最后如下图:

现在我们重新生成一下,发现错误都没有了,最后点击F5或者本地Windows调试器来运行我们的程序,就会得到一个黑色的窗口。

2.2 绘制一个三角形

我们已经得到了一个窗口,现在我们要做的就是添加5行代码在窗口中绘制出一个三角形。在while循环中添加如下代码:

while (!glfwWindowShouldClose(window)){/* Render here */glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_TRIANGLES);glVertex2d(-0.5f,-0.5f);glVertex2d(0.0f, 0.5f);glVertex2d(0.5f, -0.5f);glEnd();/* Swap front and back buffers */glfwSwapBuffers(window);/* Poll for and process events */glfwPollEvents();}

再一次运行我们的程序,一个三角形就被绘制出来了!!

OpenGL学习(二)第一个OpenGL程序,绘制三角形相关推荐

  1. 【OpenGL学习一】用OpenGL绘制图形,制作动画

    1.OpenGL基本框架 1.1OpenGL简介 OpenGL(Open Graphics Library,开放图形库),是三维计算机图形和模型库.作为一个性能优越的图形应用程序设计界面(API),它 ...

  2. OpenGL学习(一)OpenGL基本介绍

    1. OpenGL基本介绍 1.1 OpenGL是什么?   当你第一次听到OpenGL时,你可能并不知道它到底是什么,但你应该知道它是与图形联系起来,这确实是OpenGL能够做的事情.OpenGL不 ...

  3. 【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )

    文章目录 一.不同类型矩阵变换先后顺序 二.渲染前不设置单位阵 三.矩阵的压栈和出栈原理分析 四.矩阵的压栈和出栈代码示例 五.相关资源 一.不同类型矩阵变换先后顺序 对 OpenGL 中的 模型视图 ...

  4. opengl 安装_一步步学OpenGL(34) -《GLFX,一个OpenGL效果库》

    教程 34 GLFX,一个OpenGL效果库 原文: http://ogldev.atspace.co.uk/www/tutorial34/tutorial34.html CSDN完整版专栏: htt ...

  5. 【python教程入门学习】第一个Pygame程序

    Pygame 作为一个入门级的游戏开发库,其实并不难学,只要掌握 Python 编程的相关知识就能很轻松地掌握它. Pygame 语法简单.明了,秉持了 Python 语言一贯的风格.同时,它作为一个 ...

  6. C语言学习之编写一个C程序,运行时输人abc三个值,输出其中值最大者。

    编写一个C程序,运行时输人abc三个值,输出其中值最大者. #include <stdio.h> void main(){int a,b,c,max;printf("请输入三个数 ...

  7. python的GUI编程和tkinter学习笔记——第一个GUI程序

    一.第一个GUI程序 from tkinter import * from tkinter import messagebox# 创建窗口 root = Tk()btn01 = Button(root ...

  8. mybatis学习笔记-02-第一个mybatis程序

    该视频为狂神说java视频配套笔记(博主自己手打223,日后做个参考223),b站连接:Mybatis最新完整教程IDEA版[通俗易懂]-02-第一个mybatis程序) 文章目录 2.第一个myba ...

  9. EJB3.0学习笔记---MDB--第一个MDBBean程序:

    第一个MDBBean程序: P2P方式传递消息: 1.创建EJB项目:EJBTestP2P_05 2.在com.credream.ejb包下: MyQueueMDBBean.java package ...

  10. EJB3.0学习笔记---第一个EJB程序:

    第一个EJB程序: 开发服务端程序: 1.新建一个EJB project:EJBTest_01 2.在src下建包:com.credream.ejb 3.写接口:FirstEjb.java   pac ...

最新文章

  1. 新书推荐 |《PostgreSQL实战》出版
  2. Mysql 向表中插入50万条数据(生成随机字符串和 插入的时间间隔是60s)。
  3. Flash与数学:球体曲面 (2)
  4. 对话Justin Uberti:RTC的过去、现在和未来
  5. 15--0~n-1中缺失的数字
  6. 用注水实验法验证勾股定理
  7. Android 系统(240)---底层如何简易的获取一个从AP传下来的parameter(flag)
  8. 二阶齐次线性微分方程的通解公式_高数大结局二阶常系数非线性齐次方程
  9. Js 实现局部打印功能
  10. jeesite+mysql,数据导入出现问题。
  11. python程序内存分析_Python中使用MELIAE分析程序内存占用实例
  12. 企业如何架设代理服务器联接互联网
  13. 关于先有鸡还是先有蛋问题的科学的探讨
  14. 记一次某公众号平台前端加密算法的解密
  15. Vscode下载安装使用教程_Vscode搭建Python开发环境_Vscode常用插件
  16. 网吧台式计算机配置,2017网吧电脑配置
  17. 大哥大佬们这个怎么改成 成功
  18. ERROR: Error in Log_event::read_log_event(): ‘Sanity check failed‘, data_len: 67, event_type: 35
  19. BPM- Eteams体验报告
  20. 强跟踪ukf matlab,一种改进的强跟踪UKF算法及其在SINS大方位失准角初始对准中的应用...

热门文章

  1. mysql什么是覆盖索引,MySQL中的覆盖索引
  2. 计算机d盘不显示容量,电脑D盘可用空间小,可是看不到文件
  3. linux一次执行多个命令,linux 一次执行多条命令
  4. candence的图纸大小设置_提前感受一下,CAD高手的字体和标注设置原则
  5. asp.net怎么实现按条件查询_Display Posts : 按条件显示WordPress文章的最强插件
  6. mysql profiling详解_使用mysql profiling功能剖析单条查询
  7. mysql explain desc_MySQL中EXPLAIN命令详解
  8. 设计灵感|信息图表海报竟然能设计的这么有趣!
  9. 炫彩渐变流体元素PSD分层海报模板,耍酷就选它做背景!
  10. UI素材模板|app ui界面的导航设计都有哪些?