Jak*_*old 2 multiplatform game-engine
我一直OS X用户的约11个月,现在,我使用的Linux和Windows之前,我知道它是多么的痛苦做GUI的东西,在所有平台上(没有Java)效果很好.
我不是已了解该人怎么可以让游戏,如使命召唤,毁灭公爵在Windows和OS X.永远的蝙蝠侠或阿卡姆疯人院工作都
DirectX是否特定于Windows并且在Mac上完全不可用?我猜想,Photoshop等应用程序都会有自己的C++从零开始编写GUI,这样就不会造成太大的麻烦与一个3D图形引擎这样做(我错了吗?).
我知道在Linux上通过Wine获得一些工作是可能的,但这不是真正的官方方式.
如何为高性能应用程序实现这种多平台性?
尽管3D图形API在平台之间可能有很大差异(Mac/Linux上的OpenGL与Windows上的Direct3D 11相比,PS3上的Xbox 360风味DirectX9与LibGCM等),底层3D硬件实际上非常相似.通常,游戏将具有低级别兼容性API层,其在目标平台上抽象出3D API之间的大部分差异,然后在这种较低级别抽象之上构建更高级别的渲染.这种移植到新平台的方式只涉及移植相对较小的"驱动程序"以支持低级别兼容性层,而不是移植所有更高级别的渲染代码.
开发在所有目标平台上实现高性能的跨平台游戏的现实往往比这个理想化的图片更复杂.例如,平台差异可能泄漏并影响高级渲染决策,因为在不同平台上实现特定效果的最有效方式可能非常不同.当不同平台可能使用不同的着色语言(GLSL,HLSL,Cg)时,以高效的跨平台方式处理着色器也可能非常复杂.
考虑到游戏机而开发的游戏已经倾向于拥有复杂的资产管道,其中包含艺术家创作的源资源(纹理,模型,动画,材质定义等),并将它们预处理成原始格式,这些格式最适合加载和渲染在控制台上.可以在管道中处理许多平台差异,其中代码只需要在PC上运行,并且对性能和内存限制的担忧不太重要.
这种方法允许内容创建者开发他们的大部分内容,而不必担心平台特定的细节,并使游戏运行时不必处理格式转换,字节序差异等.目标平台上的图形驱动程序层可能相当精简,只有处理原生纹理格式,顶点数据,着色器等,具有在开发系统(通常是高端PC)上的管道代码中处理的格式之间转换的大部分复杂性.
开发跨平台游戏是一项相当复杂的挑战,但通过精心设计抽象层和资产管道,可以使游戏运行时代码平台的大多数与平台无关,并将代码的平台特定部分与某些定义明确的模块隔离开来.
许多游戏现在使用像Unreal或Unity这样的第三方引擎开发,这些引擎已经完成了处理平台差异的大部分工作,并且允许游戏创建者更少关注处理平台差异的细节以及更多关于开发特定游戏的细节.