Opengl_入门学习分享和记录_番外篇01(MacOS上如何在Xcode 开始编辑OpenGL)
写在前面的废话:
哈哈 ,我可真是勤勉呢,今天又来更新了,这篇文章需要大家接着昨天的番外篇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)的更多相关文章
- Opengl_入门学习分享和记录_番外篇00(MacOS上如何给Xcode 适配openGL)
现在前面的废话:哇这次没有鸽太久,突然想起来还没有介绍如何适配opengl的衍生库.今天一并介绍下,同样看时间允不允许,让我再把之前学到的一些东西再次总结一遍. 正文开始: 首先大家要知道我们的Ope ...
- Opengl_入门学习分享和记录_00
2019.7.4 本着对游戏创作的热情,本人初步了解了一部分的unity引擎的使用,也学习了一点C#可是越学习unity我就反而对引擎内部感兴趣(不知道有没有一样的朋友=,=). 接着了解到了open ...
- Opengl_入门学习分享和记录_02_渲染管线(一)顶点着色器&片段着色器
写在前面的废话:今天俺又来了哈哈,真的好棒棒! 今天的内容:之前我们大概描述了,我们自己定义的顶点坐标是如何被加载到GPU之中,并且介绍了顶点缓冲对象VBO用于管理这一块内存.今天开始详细分析它的具体 ...
- Opengl_入门学习分享和记录_01_Graphics Pipeline(图形渲染管线)
写在前面的废话: 这个系列拖更了很久,很大一定程度上是由于自己最近忙着高数学习和线代学习..感觉时间特别紧缺(其实就是我太懒了)好了不废话了,总结开始. 正文开始: 首先Graphics Pipeli ...
- Opengl_入门学习分享和记录_03_渲染管线(二)再谈顶点着色器以及顶点属性以及属性链接
---恢复内容开始--- 写在前面的废话:岂可修!感觉最近好忙啊,本来今天还有同学约我出去玩的.(小声bb) 正文开始:之前已经编译好的着色器中还有一些问题,比如 layout(location=0) ...
- Opengl_入门学习分享和记录_02_渲染管线(一)顶点输入
现在前面的废话:最近好事不断!十分开心!生活真美好! 好了今天要梳理一下,顶点输入的具体过程,同样也是渲染管线中的第一个阶段的详细过程的介绍.之前介绍过,OpenGL操作的是一组3D坐标,所以我们的输 ...
- Opengl_入门学习分享和记录_03_渲染管线(三)借助顶点数组对象VAO提高绑定属性效率
目前我们已经知道了,如果想要顶点着色器解释理解我们的输入数据,就必须要按照以下繁琐的步骤:第一步:将输入的数据复制一份到缓冲区,供OpenGL使用.而这块新出现的区域由VBO管理和表示.(若有多个输入 ...
- 给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV
这次博客园的排版彻底残了..高清版请移步: https://zhuanlan.zhihu.com/p/24425116 本篇是前面两篇教程: 给深度学习入门者的Python快速教程 - 基础篇 给深度 ...
- H5学习_番外篇_PHP数据库操作
1. 文件操作 1.1 打开关闭文件 fopen() resource fopen ( string filename, string mode [, bool use_include_path [, ...
随机推荐
- python的简介与简单使用
简介: python的诞生 创始人:Guido van Rossum(荷兰人:吉多) 时间:1989年 特点: 1.简单明了,容易上手 2.多平台,`全面发展,平衡发展, 3.胶水语言,有大量的库 其 ...
- c++ 归并排序
c++ 归并排序 输入输出格式 输入格式: 第11行为一个正整数NN,第22行包含NN个空格隔开的正整数a_ia i ,为你需要进行排序的数,数据保证了A_iA i 不超过1000000000 ...
- MYSQL Got error 28 from storage engine
网络查找该异常信息,发现 Got error 28 from storage engine 查了一下,数据库文件所在的盘应该没事,应该是数据库用的临时目录空间不够 引用 磁盘临时空间不够导致. 解决办 ...
- 各类最短路算法基本模板-C++
原文转自:https://blog.csdn.net/changjiale110/article/details/77394650 感谢. #define Max 0x3f3f3f3f #define ...
- Eclipse安装STS插件
由于Spring的配置文件较多,基于Eclipse配置也比较复杂.为了提高开发的效率,建议使用STS开发工具开发,或者在Eclipse安装一个STS插件. 在开发者配置bean的class时候能够根据 ...
- mysql数据库建表分类字段--尽量少用字符串--原因探索
虽然一直都知道,类型 之类的字段 直接用字符窜会很方便,不过最好还是不要用字符串:但是也不是特别清楚为什么不要用,时间久了 就忍不住用一下字符窜试试,这一试 还挺好用的,吓得我 感觉探究了一下 为什么 ...
- 程序员到sql笔记
1最近准备面试,总结一下之前学过到东西.
- C语言入门1-计算机工作原理
一. 计算机与人工智能.计算机系统: 计算机工作原理:计算机的基本原理是存储程序和程序控制,预先要把指挥计算机如何进行操作的指令序列(称为程序)和原始数据通过输入设备输送到计算机内存贮器中.每一条指令 ...
- [leetcode] 234. Palindrome Linked List (easy)
原题 回文 水题 function ListNode(val) { this.val = val; this.next = null; } /** * @param {ListNode} head * ...
- Keil debug command SAVE 命令保存文件的解析
简介 使用 Keil debug 很方便,把内存中的一段区域 dump 出来也很方便,例如使用命令 SAVE filepath startAddr, endAddr, typeCode .但是要查看 ...