跨平台3D引擎嵌入iOS/Android视图?

5
为了我的新应用程序,我希望拥有原生的iOS或Android用户界面,以及显示一些图形的3D视图。虽然我最初计划在WebView中使用CSS变换来实现所需的3D效果,但由于性能远低于可用水平,我正在寻找另一种解决方案。这里是我认为的选择:
1. 在OpenGL ES中重新创建场景 我将完全在OpenGL中重新创建我们的图形引擎。这肯定是可能的,但对于像我这样从未进行过3D编程的人来说可能非常困难。是否可以将为iOS编写的OpenGL代码移植到Android?还是我必须创建两个引擎?
2. 使用Unity3d等现成的3D引擎 我偶然发现了Unity3d、Marmalade等工具,它们可能会更容易地帮助我创建3D场景。然而,乍一看似乎我必须在各自的创作系统中创建整个应用程序。除了3D视图外,我要使用本机控件。这些工具中是否可能?如果是,是否可以将iOS的3D移植到Android或反之亦然?
我提出了正确的问题吗?我的假设是否正确?你有什么不同的看法吗?我错过了什么?
这些是我所有的选择吗?还是可能有其他的东西,某种混合解决方案?
我应该选择哪个选项?
编辑:为了澄清,我不想在3D视图内显示iOS或Android控件,而是在其周围:用户界面将是本机的,3D部分将包含在一个视图中。
1个回答

2

有点复杂 ;-)

(1) OpenGL vs. 引擎:

我认为可以用C++编写OpenGL代码的大部分内容,并且在iOS上使用Objective-C++,在Android上使用NDK(仅是一个想法,从未使用过NDK),以使其具有可移植性。现在取决于图形部分去哪里。如果您说的是图表,您是否意味着您“只需要”将函数图绘制到屏幕上?还是您有更多的对象,例如在OpenGL中显示的游戏或建筑应用程序中。

如果是后者,则更大的问题似乎是模型的无缝集成。每个包含超过一些立方体的场景都是在建模工具中设计的,可以导出到几种格式(obj、dae、fbx等)。但是然后你需要将它导入到您的应用程序中。这就是游戏引擎发挥作用的地方,无论是Unity、SIO2、Bork、Unreal、Oolong等。

如果需要绘制图表,则手动的OpenGL解决方案可能值得考虑。即使是这样,对现有引擎的一些研究也可能很有用,因为OpenGL并不是那么直观,您需要花费一些时间来结识它。我曾经在iPhone应用程序中使用OpenGL直接绘制多个可缩放、着色等图表,但那是一个纯研究项目,可移植性不太重要。

(2) 将OpenGL与GUI元素混合

基本上,在OpenGL视图中无法显示标准UIButton。但是您可以拥有OpenGL视图和常规UI视图,并在它们之间切换。我不知道任何工具允许您同时进行基于OpenGL的编程和常规GUI编程以及平台无关性。

因此,一方面,您需要在所选工具中创建3D内容,然后集成本地UI代码。对于Unity和iOS,有一些资源可以帮助您执行此操作,如How to access Unity assets natively on Android or iPhone?Mixing Unity generated code with Objective-C in iOS?

另一方面,您将需要一个平台无关的框架,以完成常规GUI编程,以便可以在Android和iOS上运行。我对这个主题不熟悉,但我听说过基于Mono的框架。


澄清一下,我不想在3D视图中显示iOS或Android控件,而是在其周围:用户界面将是本地的,而3D部分将包含在一个视图中。这样做是否会使集成3D引擎更容易? - winsmith
1
复杂的3D世界:是的,因为模型集成。函数图绘制:取决于情况,因为即使3D引擎也有一个学习曲线,并且它们最适合于模型化场景,即它们不专门针对绘图领域,尽管这应该是可能的(请参见http://forum.unity3d.com/threads/40787-Can-we-draw-graph-in-unity)。请注意,我只熟悉Unity3D和一点SIO2。 - Kay
你可以分享你所创建应用的代码吗?我不会直接使用它,但或许能够为我提供更适合的做法。这个3D内容仅由柱状图中的圆柱以及一些折线图组成。 - winsmith
这是关于内容的NDA限制的研究。但我将查看纯图形部分,也许可以提取一些类(本机Obj-C)。这里有一个示例http://developer.apple.com/library/ios/#samplecode/AccelerometerGraph/Introduction/Intro.html。它不使用OpenGL而是Quartz2D。 - Kay
1
我认为这个 http://dl.dropbox.com/u/658954/GLGraphClasses.zip 对你几乎没有用处。但是方法“render”中正确的步骤顺序可能会有趣。请注意,我需要连续输入传感器数据并且需要高性能,这就是我使用这种滚动数组方法的原因。 - Kay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接