2011-05-21 13 views
5

Tengo que comenzar un proyecto en 3D para plataformas móviles. En primer lugar, me gustaría delinear el objetivo principal: , animación esquelética. En cuanto a la solución, estaba pensando en OpenGL ES y C++. Así que las preguntas son:¿Es OpenGL ES adecuado para realizar animaciones esqueléticas?

  1. Es OpenGL ES lo suficientemente robusta como para manejar animación del esqueleto (incluidos los shaders de desollar)
  2. OpenGL ES apoyaron ampliamente a través de plataformas móviles, y cuáles son los más famosos? (Por ejemplo, ¿es compatible con iPad?)
  3. ¿Es esto posible de todos modos, quiero decir, tendré suficiente potencia de cálculo?
  4. Vale la pena usar la biblioteca matemática XNA, debido a su optimización SIMD (aunque realmente no estoy seguro de que SIMD sea compatible con plataformas móviles, pero quién sabe ...).
  5. ¿Es bueno usar C++ para esto? En caso afirmativo, ¿qué compilador debería elegir para el desarrollo y las pruebas? Además, no tengo idea de qué compiladores se usan para plataformas móviles.

Como podría haberlo conseguido, nunca he programado para plataformas móviles todavía. Por lo tanto, algunas recomendaciones generales son bienvenidas.

+0

Demasiado amplio. Y podría haber buscado muy fácilmente muchos de estos detalles, como iPad y OpenGL ES, y qué lenguajes/compiladores usan las principales plataformas móviles. – YXD

Respuesta

7

Sí, OpenGL ES 2.0 puede manejar el desvío de vértices para animaciones esqueléticas bastante bien. OpenGL ES 1.1 usó una tubería de función fija, sin sombreadores, por lo que es más difícil en la API anterior hacer esto, pero 2.0 agrega soporte para sombreadores. OpenGL ES 2.0 está presente en todos los dispositivos iOS de envío (el iPhone 3G S y el más nuevo lo admite, incluidos ambos iPads), así como en casi todos los dispositivos Android (solo pude encontrar un par de teléfonos de gama muy baja que no lo hicieron). Windows Phone 7 no parece ser compatible con OpenGL ES, pero creo que BlackBerry sí.

Si te interesa esto, te recomiendo leer el libro de Philip Rideout "iPhone 3D Programming". Si bien tiene el título "iPhone", utiliza C++ genérico para casi todo el código del libro, por lo que debe traducirse a otras plataformas y debe ser fácil de entender para usted. Incluso tiene una sección en el capítulo "Optimización" con código para realizar el desvío de vértices en OpenGL ES 2.0 e incluso 1.1. Puede tomar el código de muestra para el libro here, incluida una demostración de este desollado.

C++ es supported on iOS through Objective-C++, donde puede configurar los elementos de la IU específicos de la plataforma en Objective-C y luego hacer toda su lógica back-end y renderizado en C++. De nuevo, Philip hace esto en su libro, y puedes ver en su código fuente ejemplos de aplicaciones cómo lo estructura. Las personas de Imagination Technologies también han configurado algunos andamios independientes de la plataforma en su PowerVR SDK, que algunas personas han utilizado para obtener rápidamente su procesamiento 3D en dispositivos móviles.También en ese SDK hay algunos documentos geniales sobre cómo pasar de OpenGL a OpenGL ES, así como realizar varios efectos en estas GPU.

He oído que algunas personas obtienen un rendimiento ligeramente mejor para conjuntos de vértices pequeños al realizar transformaciones en la CPU (en iOS esto se puede hacer usando el marco Accelerate), pero me imagino que los sombreadores de vértices serían mucho más rápidos geometría más grande. Las GPU PowerVR con las que he trabajado en dispositivos móviles son mucho más poderosas de lo que piensas, especialmente la nueva que se incluye en el iPad 2.

Tendrás que usar el IDE de Xcode, ya sea con su El compilador GCC o LLVM se dirige a dispositivos iOS, pero creo que Android tiene algunas opciones más en ese sentido.

+1

Una adición muy pequeña: en los dispositivos con iOS, OpenGL ES 1.1 admite la extensión de la paleta de matriz (http://www.khronos.org/registry/gles/extensions/OES/OES_matrix_palette.txt), que se puede usar para el desvío de vértices. No estoy seguro sobre otras plataformas. – Tommy

+0

@Tommy - Buen punto. Pensé en eso justo después de mirar el código de muestra de Philip, donde lo usa para sus ejemplos de skinning de OpenGL ES 1.1. –

2

En resumen:

  1. Sí, por supuesto. Por qué no?
  2. Sí, supongo. ¿Qué más? DirectX definitivamente no.
  3. Sí, supongo. Pero depende de qué más quieras hacer.
  4. No, al menos no solo por SIMD, ya que supongo que no es muy compatible con plataformas móviles, al menos las instrucciones SIMD para las que XNA está optimizado.
  5. Sí, ¿por qué no? Creo que la mayoría usa Objective-C, pero también debería haber compiladores para C++. Solo pregúntale a Google, ya que tampoco tengo ninguna experiencia móvil.
+0

Creo que no me entendieron bien - Tengo una buena experiencia con OpenGL pero para plataformas de PC y ninguna experiencia con OpenGL ES o programación general de plataforma móvil :) –

+0

Ok, lo siento, lo cambié. Pero creo que mis respuestas aún se aplican. –