【问题标题】:Is OpenGL ES suitable for performing skeletal animations?OpenGL ES 是否适合执行骨骼动画?
【发布时间】:2011-05-21 09:08:02
【问题描述】:

我必须为移动平台启动一个 3D 项目。首先,我想概述一下主要目标 - 骨骼动画。至于解决方案,我在考虑 OpenGL ES 和 C++。所以问题是:

  1. OpenGL ES 是否足够强大以处理骨骼动画(包括那些蒙皮着色器)
  2. 移动平台是否广泛支持 OpenGL ES,最著名的有哪些? (例如,是否支持 iPad?)
  3. 这可能吗,我的意思是我有足够的计算能力吗?
  4. 是否值得使用 XNA 数学库,因为它的 SIMD 优化(虽然我真的不确定移动平台是否支持 SIMD,但谁知道...)。
  5. 用 C++ 来做这件事好吗?如果是,那么我应该选择哪个编译器进行开发和测试?此外,我不知道移动平台使用了哪些编译器?

你可能已经知道了——我还没有为移动平台编程过。因此,欢迎提出一些一般性建议。

【问题讨论】:

  • 太宽泛了。您可以非常轻松地查找其中许多详细信息,例如 iPad 和 OpenGL ES 以及主要移动平台使用的语言/编译器。

标签: c++ mobile opengl-es skeletal-animation


【解决方案1】:

是的,OpenGL ES 2.0 可以很好地处理骨骼动画的顶点蒙皮。 OpenGL ES 1.1 使用固定功能管道,没有着色器,因此在旧 API 中更难做到这一点,但 2.0 增加了对着色器的支持。 OpenGL ES 2.0 出现在所有的 iOS 设备上(iPhone 3GS 和更新的 iPhone 都支持它,包括 iPad),以及几乎所有的 Android 设备(我只能找到几个非常低端的手机没有)。 Windows Phone 7 似乎不支持 OpenGL ES,但我相信 BlackBerry 支持。

如果您对此感兴趣,我强烈建议您阅读 Philip Rideout 的书“iPhone 3D Programming”。虽然标题中有“iPhone”,但他对书中几乎所有的代码都使用了通用 C++,所以它应该可以很好地翻译到其他平台,并且应该很容易让你理解。他甚至在“优化”一章中有一节包含在 OpenGL ES 2.0 甚至 1.1 上执行顶点蒙皮的代码。您可以获取本书here 的示例代码,包括此皮肤的演示。

C++ 是supported on iOS through Objective-C++,您可以在其中在 Objective-C 中设置特定于平台的 UI 元素,然后在 C++ 中执行所有后端和渲染逻辑。再一次,Philip 在他的书中这样做了,您可以在他的源代码示例应用程序中看到他是如何构建它的。 Imagination Technologies 的人员还在他们的PowerVR SDK 中建立了一些与平台无关的脚手架,一些人用它来快速启动他们的 3-D 渲染并在移动设备上运行。该 SDK 中还有一些关于从 OpenGL 迁移到 OpenGL ES 以及在这些 GPU 上执行各种效果的精彩文档。

我听说有些人通过在 CPU 上执行转换(在 iOS 上可以使用 Accelerate 框架来完成),对小型顶点集的性能稍有提高,但我想顶点着色器对于较大的顶点着色器会快得多几何学。我在移动设备上使用过的 PowerVR GPU 比你想象的要强大得多,尤其是 iPad 2 中的新 GPU。

您需要使用 Xcode IDE 及其 GCC 或 LLVM 编译器来针对 iOS 设备,但我相信 Android 在这方面有更多选择。

【讨论】:

  • 一个非常小的补充:在 iOS 设备上,OpenGL ES 1.1 支持矩阵调色板扩展 (khronos.org/registry/gles/extensions/OES/OES_matrix_palette.txt),可用于顶点蒙皮。我不确定其他平台。
  • @Tommy - 好点。在我查看 Philip 的示例代码后,我就想到了这一点,他将其用于他的 OpenGL ES 1.1 蒙皮示例。
【解决方案2】:

简而言之:

  1. 是的,当然。为什么不呢?
  2. 是的,我想。还有什么? DirectX 绝对不是。
  3. 是的,我想。但取决于您还想做什么。
  4. 不,至少不仅仅是因为 SIMD,因为我想它在移动平台上没有得到太多支持,至少 SIMD 指令 XNA 已针对它进行了优化。
  5. 是的,为什么不呢?我认为 i...s 主要使用 Objective-C,但也应该有 C++ 的编译器。问问谷歌吧,因为我也没有任何移动体验。

【讨论】:

  • 我想我被误解了——我在 OpenGL 方面有很好的经验,但对于 PC 平台,完全没有 OpenGL ES 或通用移动平台编程经验 :)
  • 好吧,对不起,我改了。但我认为我的回答仍然适用。
猜你喜欢
  • 2011-07-27
  • 2017-05-03
  • 2012-10-15
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 2013-10-19
相关资源
最近更新 更多