opengl游戏引擎源码_LearnOpenGL 源码在 MAC 上的编译与调试

学习 OpenGL ,相信肯定有不少人看过这个网站:

https:// learnopengl.com/

8fd635d68728796bcde36eaa50aadd05.png

https://learnopengl.com/

这是它的英文原版网站,后来又有了不同语言的翻译版本,对应中文就是:

https:// learnopengl-cn.github.io /

95f961e9d416441bdcb3549574feb73c.png


image

这两个网站对于学习 OpenGL 帮助非常大,既可以用作入门的教材,也可以作为工具书,后续进行查漏补缺。

并且它的内容很全面,除了 OpenGL 基础知识、坐标系统、纹理、Shader、模型加载等,还有高级光照、PBR 等渲染技巧,这些在渲染引擎的开发中都是会用到的,后面会继续和大家分享。


本文主要是讲解如何运行 LearnOpenGL 文章中的示例代码,在 XCode 上进行编译和调试,效果如下:

2325f61c5943131be3d22c9c6f2ff19e.png


image

在网站上某一章节的内容,就对应于 XCode 工程某一小项的具体代码,我们可以选择要运行的章节代码,在 Mac 看到最终效果。

a1973538c1605c401209a3b1a7b3aafa.png


image

另外,我们还可以在 XCode 上修改相关代码,调整某些参数,验证自己的想法和实验结果。

这一点很重要,对于初学者来说就是要不断地试错,在失败中成长。

在开始 LearnOpenGL 网站的代码讲解之前,先介绍一下他的主人。

5738cff38e1463d7b123744c8a2f5522.png


image

不得不说,这是位大佬,有兴趣的同学都可以去 Follow 一下。

他的个人主页是:

https://joeydevries.com

从主页上可以看到大佬在图形学和游戏开发上造诣颇深,做了不少有意思的东西。

  • 实现了一个简单的渲染引擎,采用 C++ 开发,支持了不少特性,在 LearnOpenGL 网站上都可以看到。
https:// github.com/JoeyDeVries/ Cell

这可以当做是学习 OpenGL 之后巩固提高的一个大作业了。

  • 另外,还做了一个 Vulkan 的教学网站,虽说目前还没有完成,但仍然值得期待。
https:// learnvulkan.com/
  • 当然了,你也可以看我的网站,或许对你有一些帮助
https:// glumes.com/

言归正传,讲回代码的编译部分。

LearnOpenGL 网站的示例代码地址如下,clone 这个项目到你的电脑上。

https:// github.com/JoeyDeVries/ LearnOpenGL

在这个项目的 README.md 上已经有讲如何在 MAC 平台进行编译了。

brew install cmake assimp glm glfw
mkdir build
cd build
cmake ../.
make -j8

但是这个编译结果并不是我们想要的,因为它编译出来的都是二进制可执行文件。

aece4d0e0abdbe1a80b39cc08ed434da.png


image

虽说我们可以通过 ./xxx 的方式来运行这些可执行文件,但总不能每改一点代码就全都编译一次吧。

理想的方式就要通过 IDE(集成开发环境) 来编译运行,并且在 IDE 上修改代码,看到结果。

XCode 在这里就充当了 IDE 的角色。

下面给出新的编译代码:

brew install cmake assimp glm glfw
mkdir build
cd build
cmake -G "Xcode" ..

有变化的就是最后一行了,此行代码会在 build 目录下生成 XCode 工程。

7edf6261df6720a22b966150875fcb96.png


image

双击 LearnOpenGL.xcodeproj 就可以打开整个工程啦。


接下来就是自由发挥时间,你可以在源代码基础上进行任何修改,对照着 LearnOpenGL 网站上的讲解,一步一步地去调试验证,积累经验,在成为大佬的路上越走越远~~~~

祝玩得愉快

欢迎关注微信公众号:【纸上浅谈】,学习更多音视频多媒体开发~~~

6bfdf6cd05ef648e693126643ea45d9e.gif


扫码关注

作者对游戏的说明: 首先,您应当以一种批判的眼光来看待本程序。这个游戏是我制作 的第一部RPG游戏,无任何经验可谈,完全按照自己对游戏的理解进 行设计的。当我参照了《圣剑英雄2》的源码之后,才体会到专业游 戏引擎的博大精深。 该程序的内核大约有2000余行,能够处理人物的行走、对话、战斗, 等等。由于该程序的结构并不适于这种规模的程序,故不推荐您详 细研究该程序。所附地图编辑器的源程序我已经添加了详细的注释, 其程序结构也比较合理,可以作为初学VC的例子。 该程序在VC的程序向导所生成的SDI框架的基础上修改而成。它没有 使用任何关于VC底层的东西。程序的绝大部分都是在CgameView类中 制作的,只有修改窗口特征的一段代码在CMainFrm类中。其他的类 统统没有用到。另外添加的一个类是CEnemy类。 整个游戏的故事情节分成8段,分别由Para1.h ~ Para8.h八个文件 实现。由于程序仅仅能够被动的处理各种各样的消息,所以情节的 实现也只能根据系统的一些参数来判断当前应当做什么。在程序中 使用了冗长的if……else if……结构来实现这种判断。 当然,在我的记录本上,详细的记录了每个事件的判断条件。这种 笨拙的设计当然是不可取的。成都金点所作《圣剑英雄II》采用了 剧本解读的方式,这才是正统的做法。但这也需要更多的编程经验 和熟练的code功夫。 下面列举的是程序编制过程中总结出来的经验和教训。 第一,对话方式应该采用《圣剑英雄II》的剧本方式。 现在的方式把一个段落中所有的对话都混在一个文件中,然后给每 句话一个号码相对应。这样做虽然降低了引擎的难度,却导致剧情的 编写极其繁琐。 第二,运动和显示应当完全分开。 现在的程序中,运动和显示是完全同步的。即:在定时器中调用所有 敌人的运动函数,然后将主角的动画向前推一帧,接着绘制地图,调 用所有敌人的显示函数、重绘主角。这样的好处是不会掉帧,但带来 的问题是,如果要提高敌人的运动速度,那么帧数也跟着上去了。所 以当DEMO版反馈说速度太慢的时候,我修改起来非常困难。而这个问 题到最后也仅仅是将4步一格该成了2步一格。 第三,VC中数组存在上限。如果用“int aaa[1000000000]”定义一个 数组,编译器肯定不会给分配那么大的内存空间。而在这个程序中, 地图矩阵、NPC矩阵都超过了VC中数组的上限。但这一点知道的太晚了。 在1.0版本中已经发现地图最右端缺少了几行,但不知道是什么原因 造成的。(地图编辑器中未出现此问题,因为地图编辑器是用“序列 化”的方式存盘读盘的。)解决这个问题的方法是用“new”来分配 内存空间。 第四,由于不知道应该如何使用“new”和“delete”,几乎所有的DC 都使用了全局变量。这是完全没有必要的。程序运行期大约会耗用20 多M的内存空间,相当于一个大型游戏所使用的内存空间了。 另外,在游戏的剧情、美工方面也有许多问题,总之一个词“业余”。 我就不总结了。下一部作品,我将争取在程序上有一个质的飞跃。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值