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 [, ...
随机推荐
- 未能加载文件或程序集“Seagull.BarTender.Print, Version=11.0.8.1, Culture=neutral, PublicKeyToken=109ff779a1b4cbc7
这2天项目上需要使用BarTender打印软件,使用BarTender的库的时候时候发现一个特别的问题: 未能加载文件或程序集“Seagull.BarTender.Print, Version=11. ...
- Java项目实例之---学生选课(面向对象复习)
学生选课(面向对象复习) 设计一个学生选课的程序,分别有学生类(Student)和课程类(Course) 学生类的属性有:学号(String),姓名(String),性别(char),所选科目(Cou ...
- 学习2:总结# 1.while # 2.字符串格式化 # 3.运算符 # 4.编码初始
目录 1.while循环 -- 死循环 2.字符串格式化: 3.运算符 4.编码 1.while循环 -- 死循环 while 条件: 循环体 打断死循环: break -- 终止当前循环 改变条件 ...
- nu.xom:Element
Element: 机翻 Element(Element element) :通过深复制,创建一个element Element(String name) :创建一个没有命名空间的element Ele ...
- 单元测试jest部署
引入jest需安装的基础插件: 基础插件 @babel/core 编译工具核心模块包 @babel/preset-env 编译工具,支持es2015特性的编译打包工具包 babel-jest 对.js ...
- python 3.5学习笔记(第三章)
本章内容 1.集合及其运算 2.文件操作 3.字符编码与转码 4.函数与函数式编程 5.局部变量与全局变量 6.递归 7.补充知识点 一.集合及其运算 1.概念: set集合是一个不重复元素集,用 { ...
- [小米OJ] 10. 爬楼梯
dp 另: 小米oj上的测试样例是错的 ; ) function solution(line) { if (line == 0) return 0; if (line == 1) return 1; ...
- python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04
递归 递归: # 函数在调用阶段直接或间接地又调用了自身 应用场景: # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点) --> l = [1, [2, [3, [4, [5, ...
- nl2br()处理字符串中的换行符
nl2br() 函数 在字符串中包含换行符时,需要对其进行转换,php 中有str_replace()函数,可以直接对字符串进行替换处理.但php中还有nl2br()函数可以直接处理. 1.在字符串中 ...
- python课堂整理14---函数式编程
一.分类 当下主流的编程方法大体分为三类 1. 面向过程 2. 函数式 3. 面向对象 二.函数式编程:函数式 = 编程语言定义的函数 + 数学意义的函数 特征:1. 不可变数据 2. 第一类对象 3 ...