OpenGL学习(二)第一个OpenGL程序,绘制三角形
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程序
- 使用VisualStudio创建一个C++的空项目
- 添加源文件
在程序中添加一个src文件夹用来存放源文件,首先点击解决方案资源管理器器上方的 “显示所有文件”,然后按照下图操作,以创建一个application.cpp文件,当然,名字随意。
- 第一个窗口程序代码
#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库。
- 设置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程序,绘制三角形相关推荐
- 【OpenGL学习一】用OpenGL绘制图形,制作动画
1.OpenGL基本框架 1.1OpenGL简介 OpenGL(Open Graphics Library,开放图形库),是三维计算机图形和模型库.作为一个性能优越的图形应用程序设计界面(API),它 ...
- OpenGL学习(一)OpenGL基本介绍
1. OpenGL基本介绍 1.1 OpenGL是什么? 当你第一次听到OpenGL时,你可能并不知道它到底是什么,但你应该知道它是与图形联系起来,这确实是OpenGL能够做的事情.OpenGL不 ...
- 【OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )
文章目录 一.不同类型矩阵变换先后顺序 二.渲染前不设置单位阵 三.矩阵的压栈和出栈原理分析 四.矩阵的压栈和出栈代码示例 五.相关资源 一.不同类型矩阵变换先后顺序 对 OpenGL 中的 模型视图 ...
- opengl 安装_一步步学OpenGL(34) -《GLFX,一个OpenGL效果库》
教程 34 GLFX,一个OpenGL效果库 原文: http://ogldev.atspace.co.uk/www/tutorial34/tutorial34.html CSDN完整版专栏: htt ...
- 【python教程入门学习】第一个Pygame程序
Pygame 作为一个入门级的游戏开发库,其实并不难学,只要掌握 Python 编程的相关知识就能很轻松地掌握它. Pygame 语法简单.明了,秉持了 Python 语言一贯的风格.同时,它作为一个 ...
- C语言学习之编写一个C程序,运行时输人abc三个值,输出其中值最大者。
编写一个C程序,运行时输人abc三个值,输出其中值最大者. #include <stdio.h> void main(){int a,b,c,max;printf("请输入三个数 ...
- python的GUI编程和tkinter学习笔记——第一个GUI程序
一.第一个GUI程序 from tkinter import * from tkinter import messagebox# 创建窗口 root = Tk()btn01 = Button(root ...
- mybatis学习笔记-02-第一个mybatis程序
该视频为狂神说java视频配套笔记(博主自己手打223,日后做个参考223),b站连接:Mybatis最新完整教程IDEA版[通俗易懂]-02-第一个mybatis程序) 文章目录 2.第一个myba ...
- EJB3.0学习笔记---MDB--第一个MDBBean程序:
第一个MDBBean程序: P2P方式传递消息: 1.创建EJB项目:EJBTestP2P_05 2.在com.credream.ejb包下: MyQueueMDBBean.java package ...
- EJB3.0学习笔记---第一个EJB程序:
第一个EJB程序: 开发服务端程序: 1.新建一个EJB project:EJBTest_01 2.在src下建包:com.credream.ejb 3.写接口:FirstEjb.java pac ...
最新文章
- 新书推荐 |《PostgreSQL实战》出版
- Mysql 向表中插入50万条数据(生成随机字符串和 插入的时间间隔是60s)。
- Flash与数学:球体曲面 (2)
- 对话Justin Uberti:RTC的过去、现在和未来
- 15--0~n-1中缺失的数字
- 用注水实验法验证勾股定理
- Android 系统(240)---底层如何简易的获取一个从AP传下来的parameter(flag)
- 二阶齐次线性微分方程的通解公式_高数大结局二阶常系数非线性齐次方程
- Js 实现局部打印功能
- jeesite+mysql,数据导入出现问题。
- python程序内存分析_Python中使用MELIAE分析程序内存占用实例
- 企业如何架设代理服务器联接互联网
- 关于先有鸡还是先有蛋问题的科学的探讨
- 记一次某公众号平台前端加密算法的解密
- Vscode下载安装使用教程_Vscode搭建Python开发环境_Vscode常用插件
- 网吧台式计算机配置,2017网吧电脑配置
- 大哥大佬们这个怎么改成 成功
- ERROR: Error in Log_event::read_log_event(): ‘Sanity check failed‘, data_len: 67, event_type: 35
- BPM- Eteams体验报告
- 强跟踪ukf matlab,一种改进的强跟踪UKF算法及其在SINS大方位失准角初始对准中的应用...
热门文章
- mysql什么是覆盖索引,MySQL中的覆盖索引
- 计算机d盘不显示容量,电脑D盘可用空间小,可是看不到文件
- linux一次执行多个命令,linux 一次执行多条命令
- candence的图纸大小设置_提前感受一下,CAD高手的字体和标注设置原则
- asp.net怎么实现按条件查询_Display Posts : 按条件显示WordPress文章的最强插件
- mysql profiling详解_使用mysql profiling功能剖析单条查询
- mysql explain desc_MySQL中EXPLAIN命令详解
- 设计灵感|信息图表海报竟然能设计的这么有趣!
- 炫彩渐变流体元素PSD分层海报模板,耍酷就选它做背景!
- UI素材模板|app ui界面的导航设计都有哪些?