写在前面的废话:

哈哈 ,我可真是勤勉呢,今天又来更新了,这篇文章需要大家接着昨天的番外篇00一起食用!

正文开始:

话不多说,先看代码。

这里主要全是使用的glfwwindowhint 这个函数,他有两个参数。首先第一个参数个人的理解是opengl这个巨大的状态机里面的一个设置的名字。 这个函数可以简单的理解成先找到状态机里面的一个参数,然后设置它,注意在这之前一定要先初始化glfw。

重要的代码:glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE) ,MacOS 中记得要加上这一行,这个表示的是opengl的兼容性是否开启。当然windows里面不用写这一行。

这里的 opengl核心模式大家可以自行百度,其实不是很重要,只要你进入核心模式过后使用OpenGL的权限就变多了,应该可以类比管理员模式。。

好的接下来开始创建一个窗口,先看代码

与SDL类似(不知道有没有人想看SDL的,也许等我学完整理完opengl我会出一个SDL的小分享嘿嘿!-,-)。话不多说我们直接来看参数,首先前两个是这个窗口的大小,第三个是窗口名字,第四个是摄像机,第五个是一个名叫share的东西,目前我还不知道这个的意思,之后学到了回来完善。

重要的是第二个这个glfwMakeContextCurrent(GLwindow)这个函数,因为opengl是一个巨大的状态机,他通过一个叫上下文(CONTEXT)的内容来运作,也就是比如说opengl是一个牵线木偶,CONTEXT是使用者操纵线的顺序,那么玩偶怎么动全都需要依靠线的操作顺序。

这里将参数设置成窗口指针,就好比告诉opengl 我们现在设置的上下文,要施加到一个名叫GLwindow的窗口上面。

最后我隐藏起来那个设置,其实加上更好,但是目前我没发现加和不加有什么区别,等发现了,回头分享出来,当然如果有大佬懂的话,请麻烦告诉我拜托了!!!

下一步,代码如下

首先还记得我们一开始连接到的两个库吗?一开始我们初始化了glfw 现在我们初始化glew ,glew主要是起到一个管理指针的作用,到后面纹理,给图像上色之类的地方他将有较大的作用。

接下来,注意我又申明了两个变量,这两个起到的作用是设置视窗(viewport),注意我们之前创建的只是一个窗口,但是opengl不知道我们要以哪位标准开始做渲染工作,打个比方来说,之前创建的窗口,像是一个画布,OpenGL是笔,我们从开始落笔,现在通过viewprot解决。 可能有老铁会问:“那你view里面为啥不直接写 800 和 600 还要重新通过glfw函数获取一份?”。

这样设置是为了在一些高DPI显示器上也能工作正常

最后进入渲染循环

首先循环退出条件不必我多提,当窗口需要关闭时退出while 不要忘记取反号即可。

接下来看第一个函数,glfwPollEvent(),这个函数遵从first in first out 类似于栈,放入其中的是用户的操作,比如光标移动, 或者是按下了某个键,他们被当作一个个的事件进入栈,然后被一个个快速取出,读取操作。

然后glClearColor()这个函数的功能是让我们决定一种颜色用于刷新整个窗口,glClear()就表示以之前选择的颜色刷新。隐去的部分表示这个可以选择的参数。目前我还不懂其他两个参数的用法,如果有会的大佬麻烦,不吝赐教!!!。

最后是glfwSwapBuffers(GLwindow),(抱歉图片中是window,因为我是从两个工程里提出截图,窗口指针的名字有些不同,大家当成一个就可以了),这里引入了一个叫做双缓冲的概念。

按照从官方定义中的理解,我们的屏幕上的像素点被渲染出来是一个个从左到右,再从上到下一步步生成的,这就导致如果我们每一帧从清空成我们想要的颜色的话,只有一个缓冲区会导致有时候图像还没被全部上色就被显示出来,结果就会很不真实,于是乎我门假如从一开始就准备两个缓冲空间,然后前缓冲用于存储完成渲染后的完美图像,而后缓冲继续完成渲染指令,当后缓冲完成了交换两个缓冲区。这样我们一直看到的就是渲染完成后的图像了,这样做就避免了图像在显示的时候闪烁,不全的问题。

最后glfwTerminal();即释放空间,结束退出。

好了,今天暂时到这里,希望能帮到你!

Opengl_入门学习分享和记录_番外篇01(MacOS上如何在Xcode 开始编辑OpenGL)的更多相关文章

  1. Opengl_入门学习分享和记录_番外篇00(MacOS上如何给Xcode 适配openGL)

    现在前面的废话:哇这次没有鸽太久,突然想起来还没有介绍如何适配opengl的衍生库.今天一并介绍下,同样看时间允不允许,让我再把之前学到的一些东西再次总结一遍. 正文开始: 首先大家要知道我们的Ope ...

  2. Opengl_入门学习分享和记录_00

    2019.7.4 本着对游戏创作的热情,本人初步了解了一部分的unity引擎的使用,也学习了一点C#可是越学习unity我就反而对引擎内部感兴趣(不知道有没有一样的朋友=,=). 接着了解到了open ...

  3. Opengl_入门学习分享和记录_02_渲染管线(一)顶点着色器&片段着色器

    写在前面的废话:今天俺又来了哈哈,真的好棒棒! 今天的内容:之前我们大概描述了,我们自己定义的顶点坐标是如何被加载到GPU之中,并且介绍了顶点缓冲对象VBO用于管理这一块内存.今天开始详细分析它的具体 ...

  4. Opengl_入门学习分享和记录_01_Graphics Pipeline(图形渲染管线)

    写在前面的废话: 这个系列拖更了很久,很大一定程度上是由于自己最近忙着高数学习和线代学习..感觉时间特别紧缺(其实就是我太懒了)好了不废话了,总结开始. 正文开始: 首先Graphics Pipeli ...

  5. Opengl_入门学习分享和记录_03_渲染管线(二)再谈顶点着色器以及顶点属性以及属性链接

    ---恢复内容开始--- 写在前面的废话:岂可修!感觉最近好忙啊,本来今天还有同学约我出去玩的.(小声bb) 正文开始:之前已经编译好的着色器中还有一些问题,比如 layout(location=0) ...

  6. Opengl_入门学习分享和记录_02_渲染管线(一)顶点输入

    现在前面的废话:最近好事不断!十分开心!生活真美好! 好了今天要梳理一下,顶点输入的具体过程,同样也是渲染管线中的第一个阶段的详细过程的介绍.之前介绍过,OpenGL操作的是一组3D坐标,所以我们的输 ...

  7. Opengl_入门学习分享和记录_03_渲染管线(三)借助顶点数组对象VAO提高绑定属性效率

    目前我们已经知道了,如果想要顶点着色器解释理解我们的输入数据,就必须要按照以下繁琐的步骤:第一步:将输入的数据复制一份到缓冲区,供OpenGL使用.而这块新出现的区域由VBO管理和表示.(若有多个输入 ...

  8. 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV

    这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...

  9. H5学习_番外篇_PHP数据库操作

    1. 文件操作 1.1 打开关闭文件 fopen() resource fopen ( string filename, string mode [, bool use_include_path [, ...

随机推荐

  1. 数字IC前后端设计中的时序收敛(六)--Max Fanout违反

    本文转自:自己的微信公众号<数字集成电路设计及EDA教程>(二维码见博文底部) 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教 ...

  2. synchronized与ReentrantLock实现共享资源的消费

    主方法 public class synchronizedTest { public static void main(String[] args) { long startTime = System ...

  3. MySQL主从、主主、半同步节点架构的的原理及实验总结

    一.原理及概念: MySQL 主从复制概念 MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点.MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来 ...

  4. SSAS 多维/表格设计模型--事实表与维表的关联

    表格设计模型中,同多维设计模型相似, 维表和事实表相互独立,通过关系数据库中的外键来联系,互相关联构成一个统一的架构. DB中外键是需要唯一性约束的,即A表某列建立主键或者唯一键后,B表才可以引用为外 ...

  5. Flume框架的学习使用

    Flume框架的学习使用 Flume简介 Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务. Flume基于流失架构,容错性强,也很灵活简单 Flume,kafka用 ...

  6. 关于Redis的几件小事 | 高并发和高可用

    如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了. redis高并发:主从架构,一主多从,一般 ...

  7. 一文带你实现RPC框架

    想要获取更多文章可以访问我的博客 - 代码无止境. 现在大部分的互联网公司都会采用微服务架构,但具体实现微服务架构的方式有所不同,主流上分为两种,一种是基于Http协议的远程调用,另外一种是基于RPC ...

  8. 【剑指offer】面试题(三)

    package com.haxianhe.test; /** *题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序, *每一列都按照从上到下递增的顺序排序. *请完成一个函数, *输入这样的一 ...

  9. 《VR入门系列教程》之18---Oculus代码剖析

    代码剖析 原文作者:Tony Parisi     那么,Unity究竟是如何支持Oculus VR运行的?首先,我们来看看Unity场景是如何构建的.在Unity集成开发包中有一个相机预设体,这个预 ...

  10. SpringMVC表单对象绑定到@ModelAttribute

    支持绑定表单对象 jsp: <%@ taglib prefix="form" uri="http://www.springframework.org/tags/fo ...