在业余时间,致力于开发一个能够支持多种平台的3D应用引擎,这使得能够基于此引擎开发应用和游戏。本文将介绍这个引擎,并解释其代码架构是如何支持移动和桌面平台的。通过本文,将能够重用这个引擎,或者至少在创建自己的多平台应用或游戏时,获得灵感以尽可能多地重用代码。
当前维护的引擎版本可以在上找到。此外,还有一个使用该代码库的3D Facebook照片画廊应用示例,可以在找到。
还在网站上发表了一篇关于将名为Phone Wars的3D游戏移植到Intel x86 Android平台的文章,该项目也使用了这个引擎,文章和源代码都可以在上述链接中找到。
本文是的一部分,计划将三个应用和游戏移植并发布到Intel AppUp商店。如果有兴趣,很乐意撰写后续文章,解释如何将引擎移植以支持Windows 8平台,以及代码是如何构建以支持额外的Ultrabook特性,如陀螺仪和触摸屏交互。
FacePlayer - 这个应用最初被称为FaceStalker,它能够浏览Facebook照片库并缓存所有照片。它还允许以美丽的3D方式浏览这些照片。源代码可以在找到(Apache 2许可证),它运行在iOS、Android、Windows和Mac上。计划为Windows 8 Ultrabook版本添加陀螺仪和触摸屏支持。
iGrapher 3D - 这是一个3D股市可视化器。最初是作为一个webapp创建的,但当得到iPhone后,将其移植到了iOS上。当得到Android设备后,也将其引擎移植到了该平台。希望能够为Windows 8 Ultrabook版本添加陀螺仪和触摸屏支持。
Phone Wars - 这是一个在线MMO射击游戏,有三个版本:Phone Wars、Tank Legends和Food Fighters。Android和iOS演示版的源代码可以在找到。同样,希望能够为Windows 8 Ultrabook版本添加陀螺仪传感器和触摸屏支持。
将引擎命名为2c,有几个原因。首先,它来自于创建具有3D游戏元素的应用的挑战。创建这类应用的问题在于,用户交互往往会因为3D投影提供的无限制的摄像机角度而受到影响。文本不再容易阅读,移动和用户交互动作可能会显得不自然。最好的解决方案是尽可能限制应用的3D性,但使用3D来提高性能,以及为过渡和动画提供额外的价值,这些灵感来自于今天所熟知的移动操作系统。因此,结果是,尽管它仍然使用3D,但它试图隐藏3D可能带来的疯狂,它更像是3D-1 = (3-1)(D-1) = (2c)。
第二个原因可能更酷,如果说2c,听起来就像“看”,这强调了想要创建想要看到的应用程序和游戏的愿景。
源代码是用C++编写的,不同的平台可以使用不同的IDE加载。Android版本使用Eclipse IDE导入Android、App、Engine和External项目。PC、Mac、Linux版本使用Qt IDE和框架,其项目文件可以在Qt/Project文件夹中找到。iOS版本使用xCode IDE,其项目文件可以在iOS文件夹中找到。
源代码结构包括包装器,以实现跨平台功能。它的工作原理是提供设备级代码、引擎级代码和应用级代码。例如,可以将iOS和Qt特定的渲染器和控制系统抽象到自己的引擎渲染器和控制系统结构中,这可以从编写的应用特定代码中使用。
例如,如果查看加载着色器的渲染操作,并深入代码库,会发现。在引擎级渲染器CCRenderer.h中。发现了一个名为loadShader(CCShader *shader)的纯虚函数。在Qt版本中,发现了一个名为CCDeviceRenderer的继承类,它使用Qt库工具实现着色器的加载,该工具构建在OpenGL和Windows/Linux/Mac文件系统上。在iOS版本中,发现了一个名为CCDeviceRenderer的继承类,它使用Objective C、OpenGL ES和iOS特定库实现加载。
其他系统也以这种方式包装,例如,CCFileManager处理文件系统操作,CCURLManager处理建立HTTP连接。由于大部分代码都是在引擎层编写的,并且只调用引擎包装函数,大部分应用特定级别的代码库可以编写为跨平台运行。然而,在某些情况下,可能希望根据某些情况使平台发散。为此,定义了关键词(#IOS、#ANDROID、#QT)来识别正在运行的平台。
以iOS版本为例,如果进入Dev/iOS文件夹,并使用xCode加载2c.xcodeproj。SceneSample1.cpp文件将是实验的最佳起点。
从CCSceneAppUI继承,它提供了一个摄像机和触摸控制,允许在世界中创建对象,当使用多点触摸时,它以3D机制进行交互。构造函数创建了3D应用程序摄像机,并将其设置为使用整个屏幕。设置函数由引擎调用,一旦场景被添加到其更新和渲染循环中。这使用了CCTile3DButton类,这是一个3D按钮砖,允许在其中插入文本和图像,并在3D中渲染自己,提供从不同摄像机角度的3D触摸检测。在这里,设置了三个按钮,一个用于背景,一个用于文本,一个用于图像。
虽然这可能是一个基本的示例,让开始创建3D中的按钮和文本,但然后可以查看SocialPoetry项目,它进一步扩展了这个视图,支持从FaceBook下载的照片的绘制。