大约一个月前,我完成了游戏引擎核心框架的实现。 我本月的目标是创建一个小型演示,该演示将展示引擎可以做什么,最重要的是找到引擎中的代码错误。 我必须承认; 我发现了比我想要的还要多的错误。 但是,我能够修复其中的90%。
在创建演示时,我从这些图像中汲取了灵感:
我决定使用Blender创建类似的3D模型。 我将每张图片中的风景组合在一起,然后将它们导入引擎中,如下面的视频所示。
该演示非常简单。 它开始于火箭弹起并与地面碰撞。 相机设置为跟随该弹跳动作。 当我按下按钮时,火箭开始向上飞行,直到与几个小行星碰撞为止。 每次碰撞后,火箭和小行星都会以相反的方向做出反应。 几次碰撞后,重力接管了火箭并迫使其下降到地面。 火箭与地面碰撞时会弹跳几次。
有关引擎的更多详细信息
第一个演示的目的是展示物理引擎,尤其是碰撞检测系统,阴影,单个材质渲染,相机移动和数字资产加载程序。
数字资产加载器
引擎可以读取在Blender中创建的3D模型。 为此,我编写了Python脚本,该脚本将3D模型的所有属性导出到文件中。 引擎解析此文件中的数据,并将属性数据加载到iOS设备的GPU中。 到目前为止,python脚本将数据输出到终端,如下所示。
个别材料渲染
我不是艺术家,我无法设计精美的手绘纹理。 此外,我想创建一个游戏引擎,该引擎可以渲染多种材质的颜色,并且不需要在模型上附加纹理(如果我不想这样做)。 因此,我确保引擎可以为每个3D模型渲染多种材质。 例如,引擎使用所有三种不同的材质(绿色,深紫色和白色)渲染山峰。
暗影
必须在引擎中安装阴影。 我花了好一会儿才把它弄对,特别是因为我被迫修改了相机和光空间矩阵(我一开始就把它们放倒了。)阴影是使用阴影映射技术完成的。
碰撞检测系统
到目前为止,游戏引擎中最复杂的部分。 开发碰撞检测系统需要大量时间和大量重做。 在本演示中,我最终修改了碰撞检测所需的Convex-Hull算法。 从视频中可以看到,引擎可以检测到任何凸面对象之间的碰撞,并且可以计算出正确的碰撞响应。
下一步是什么?
我将开发更多的演示,其唯一目的是发现更多的代码错误。 直到今年年底,这将是我的重点。 我希望到12月底,我能获得不错的测试版。
在haroldserrano.com上了解有关我的更多信息