Cómo construir un entorno de desarrollo de juegos cocos2d-x en WP8
En el desarrollo de aplicaciones/juegos en dispositivos móviles, la implementación multiplataforma es la corriente principal. Para las funciones lógicas y las partes del algoritmo central de la aplicación/juego, si se desarrolla en C, dado que iOS/Android/Windows Phone 8/Windows Store admiten el desarrollo nativo de C, se puede trasplantar fácilmente a varias plataformas, y la aplicación /game También hay soluciones multiplataforma como Photon en el backend. El backend de la aplicación/juego también tiene Photon. Para algunas aplicaciones con altos requisitos de gráficos, como juegos y algunas aplicaciones con una gran cantidad de requisitos de personalización de la interfaz de usuario, la parte de renderizado a menudo requiere más esfuerzo para implementar la portabilidad. Para el renderizado, los desarrolladores multiplataforma tienen tres opciones:
1) Utilizar soluciones de gráficos multiplataforma existentes, como cocos2D-x, Unity 3D y HTML5.
2) Presentar la parte de presentación del programa de forma independiente e implementar la presentación en diferentes plataformas respectivamente. DirectX y XAML se pueden usar juntos en aplicaciones de Windows Phone/Windows Store, lo que facilita su uso con SDK de terceros.
3) Utilice herramientas para asignar el código de renderizado existente a otras plataformas. Por ejemplo, el proyecto Angle de código abierto asigna automáticamente OpenGL ES a DirectX.
Este artículo presentará estas tres soluciones a su vez para proporcionar a los desarrolladores una referencia para completar con éxito el trasplante de la parte de presentación de la aplicación/juego. Debido al tiempo y la capacidad limitados, no dude en informarnos si hay alguna imprecisión.
(1) Utilice soluciones multiplataforma existentes, como motores de juegos/HTML5
cocos2d-x: cocos2d-x es un código abierto, gratuito, fácil de aprender y fácil para utilizar un motor de juego multiplataforma 2D, compatible con múltiples plataformas como Windows Phone, Windows 8, iOS y Android. Actualmente es el motor de juegos 2D más popular en China. La dirección de descarga es:
/unity/whats-new/unity-4.3
XNA: XNA es compatible con Windows, Xbox 360 y Window Phone 7 se desarrolló anteriormente utilizando XNA. Los juegos .x seguirán funcionando en Windows Phone 8. Teléfono 8. Sin embargo, no se admite la creación de nuevos juegos para WP8. Consulte:
/en-us/library/windowsphone/develop/jj207003(v=vs.105).aspx
/en-us/library/bb200104.aspx p >
MonoJuego. MonoGame: MonoGame está diseñado para ayudar a los desarrolladores de XNA a lograr un desarrollo multiplataforma en Windows Phone 8, Windows 8, iOS, Android, Mac, Linux y otras plataformas. Página de inicio oficial:
/
Marmalade: Marmalade es un motor de juego multiplataforma único que admite la implementación de aplicaciones de Windows a iOS y admite programas OpenGL directamente. Convierte a DirectX11 para migrar a Windows. Teléfono. Consulte:
/
/windows-phone-8
HTML5: además de los motores de juegos, HTML5 también se puede utilizar para lograr multiplataforma. implementación.
Para los juegos de la Tienda Windows, puede utilizar HTML5 y JavaScript. Si está familiarizado con el desarrollo de HTML5 y JavaScript (WinJS), el juego no requiere efectos de animación complejos y los requisitos en tiempo real del juego no son muy altos, puede considerar este modelo de desarrollo de juegos.
Escenario recomendado: aprovechar la experiencia de desarrollo HTML5 y JavaScript (WinJS). Facilita la migración de juegos de páginas y acorta el ciclo de desarrollo
Escenarios no recomendados: si tu juego implica mucho procesamiento de imágenes o tiene requisitos de rendimiento muy altos, entonces usar modelos de desarrollo HTML5 y JavaScript no es adecuado. Tu juego . Lo mejor es utilizar DirectX y C juntos.
Consulte: /en-us/library/windows/apps/hh465158.aspx
Ejemplo de desarrollo: design.htmlwindowsapps/JavaScript-and-HTML5-touch-d96f6031 p >
() 2) Utilice el renderizado OpenGL / OpenGL ES o DirectX para diferentes plataformas
Al diseñar aplicaciones multiplataforma, podemos separar la parte de renderizado. El diseño más simple es crear un renderizador Clases. , implementados respectivamente para Windows Phone, iOS y Android. Como todos sabemos, OpenGL ES se utiliza principalmente para el desarrollo en plataformas Android e iOS. WP8 y la Tienda Windows utilizan la API DirectX11, por lo que nos centraremos en comparar las similitudes y diferencias entre OpenGL y DirectX para que los desarrolladores puedan consultarlos al cambiar de plataforma.
Comparación de rendimiento entre OpenGL ES/OpenGL y DirectX
Esta cuestión ha sido debatida acaloradamente por muchos desde el inicio de OpenGL y DirectX, por lo que la mencionaré brevemente aquí. De hecho, la tarjeta gráfica está diseñada para admitir todas las funciones de OpenGL y DirectX al mismo tiempo, ya sean sombreadores GLSL o HLSL, son compilados por el controlador y se ejecutan en el mismo módulo informático paralelo del mismo hardware. Otros recursos se almacenan en la misma memoria de vídeo. El rendimiento de las aplicaciones implementadas con OpenGL y DirectX depende más de la optimización del controlador que de la calidad de la API OpenGL/DirectX. La elección de la API OpenGL o DirectX tiene un gran impacto en el rendimiento del juego, principalmente en la CPU que en la GPU, por ejemplo. , la API Mantle lanzada recientemente por AMD realiza principalmente las siguientes optimizaciones. La optimización principal de la API Mantle lanzada recientemente por AMD también se centra en reducir la sobrecarga de la CPU y solo es aplicable a las tarjetas gráficas AMD. La comparación de las API de OpenGL y DirectX en términos de sobrecarga de CPU no es concluyente, es decir, ninguna API es significativamente mejor que la otra. OpenGL ES está diseñado con referencia a OpenGL y puede considerarse un subconjunto de OpenGL, por lo que no hay razón para hacerlo; Creo que su API es mejor que DirectX.
Es posible que los desarrolladores preocupados por el rendimiento del juego quieran considerar características específicas de la plataforma en lugar de la API en sí. Por ejemplo, iOS usa texturas pvr (el formato de compresión con pérdida de PowerVR), mientras que Windows usa texturas DDS.
Las instrucciones detalladas para texturas móviles son las siguientes:
Descripción del formato de textura para plataformas de dispositivos portátiles
Soporte de hardware para OpenGL ES y DirectX
En el momento de escribir este artículo ( 2013, octubre de 2016), los teléfonos inteligentes generalmente admiten OpenGL ES 2.0 o superior. La siguiente tabla compara OpenGL ES y DirectX. OpenGL ES 2.0 es equivalente al nivel de característica 9 de DirectX 3D. El GLSL soportado por OpenGL ES 2.0 es equivalente al HLSL de DirectX.
Lista de versiones de OpenGL ES
OpenGL y OpenGL ES se describen en Spec o Wiki. Consulta el siguiente enlace:
/forum/#!topic/android-developers/HBddHFyxYeo
La compatibilidad con OpenGL ES 3.0 requiere Android 4.3 o superior
Desde iPhone 3GS comienza a admitir OpenGL ES 2.0.
OpenGL ES 3.0 es compatible a partir del iPhone 5S
La API DirectX 11 es compatible a partir de Windows Phone 8 con nivel de función DX 9.3. El desarrollo debe utilizar la API DirectX 11.
Requisitos de Surface RT Debe poder ejecutar las funciones de DX 9.1.
Las funciones DX10 y DX11 están disponibles en la Tienda Windows para plataformas x86 y x64. Si DX9 no es compatible, las notas deben mostrarse después de que se inicie el programa.
En WP anterior a WP8, el desarrollo XNA estaba disponible en un nivel de funciones equivalente a DX9.
El desarrollo OpenGL (no ES) está disponible en las aplicaciones de la Tienda Windows. Los materiales de referencia son los siguientes:
/
OpenGL ES 2.0 es una solución gráfica de uso común en plataformas iOS y Android. La parte de renderizado de los motores de juegos de uso común es un paquete de OpenGL ES. . La versión de DirectX correspondiente a OpenGL ES 2.0 es DirectX 9. La versión de DirectX correspondiente a OpenGL ES 2.0 es DirectX 9. El requisito mínimo de hardware para WP8 y Windows 8 es DX9, lo que hace que portar aplicaciones basadas en OpenGL o motores de juegos a WP/Windows 8 sea muy natural.
Las aplicaciones de WP8 y Windows 8 Store deben programarse utilizando la API DX11, simplemente configuramos el nivel de función DX11 en DX9 (consulte el fragmento de código a continuación), que es equivalente a OpenGL ES 2.0. Para las aplicaciones de la Tienda Windows, también podemos usar el nivel de funciones DX10. Para las aplicaciones de la Tienda Windows, también podemos usar las funciones DX10 y DX11 para lograr una representación más potente y un mejor rendimiento que OpenGL ES 2.0.
D3D_FEATURE_LEVEL featureLevels[] = { D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_ 9_2, FEATURE_LEVEL_9_1 }; D3D_FEATURE_LEVEL APP_MIN_FEATURE_LEVEL = D3D_FEATURE_LEVEL_9_1
Como se mencionó anteriormente, OpenGL ES 2.0 en realidad es un subconjunto de OpenGL ES 2.0. 0 es en realidad un subconjunto de OpenGL 2.0 y corresponde a lo que es posible con el nivel de característica 9 de DirectX. Visual Studio admite dos tipos de plantillas de DirectX: plantillas que usan DirectX solo sin XAML y plantillas que combinan DirectX y XAML. Recomendamos utilizar DirectX con XAML. Debido a que XAML define elementos de interfaz enriquecidos, es más fácil implementar la interacción. Los SDK de terceros (como Weibo y los SDK relacionados con pagos) requieren compatibilidad con XAML. Al diseñar la combinación de DirectX y XAML, Microsoft minimizó el impacto de la combinación en el rendimiento en diferentes escenarios de aplicaciones. aspx
/articles/directx-and-xaml-windows-phone
Tanto el renderizado OpenGL como DirectX necesitan mantener el llamado contexto, que guarda información sobre el estado del renderizado, como como si se debe usar iluminación, si la niebla está habilitada, la textura utilizada actualmente, etc. En términos generales, el proceso de creación de un Contexto lo genera automáticamente la plantilla de la plataforma, y los desarrolladores solo necesitan configurar el Contexto adecuadamente y luego llamar a la API OpenGL o DX para su renderizado. En OpenGL ES y DX11, el proceso de creación de un contexto para renderizado es el siguiente (para su información, los programadores que desarrollan aplicaciones móviles no necesitan preocuparse por los detalles)::
Lo más importante es crear un Contexto para renderizar en OpenGL ES y Contexto para renderizar en DX11, y luego crear un Contexto para renderizar en OpenGL ES.
El proceso de renderizado más común es configurar un búfer de vértices (VB), un búfer de índice (IB), una textura, un sombreador, llamar a una función de dibujo y finalmente mostrar la imagen renderizada en el búfer. La siguiente tabla compara OpenGL ES y DX en estos aspectos.
OpenGL ES DirectX 11
La forma en que el búfer de vértices y el búfer de índice (a menudo llamados VB e IB) se almacenan en el video/memoria son diferentes entre sí. Son iguales y. se almacenan linealmente en secuencia. Sin embargo, las API para usar VB e IB son ligeramente diferentes.
Los modelos definidos en VB e IB se dibujan mediante la función de dibujo.
Usualmente uso la función glDrawElements
Ocasionalmente uso la función glDrawArrays (sin usar IB)
Por razones de eficiencia, OpenGL ES ha eliminado glBegin, glEnd, glVertex3f, etc. Funciones OpenGL.
Drawing suele utilizar DrawIndexed para dibujar contenido VB/IB
Además, hay funciones como DrawInstanced y DrawAuto disponibles
Tenga en cuenta que la creación de instancias ya es compatible en DX9 pero no es compatible con OpenGL 3.0.
En DX 10 y superiores, la creación de instancias también se puede implementar a través de sombreadores de geometría.
Los atributos de vértice (como normales, colores, coordenadas de textura, posiciones, etc.) en VB se especifican usando Función glVertexAttribPointer. Especifique cada atributo de un vértice por separado
Para una comparación con DX, consulte:
Atributos de búfer, uniforme y vértice de OpenGL ES 2.0 en comparación con Direct3D
DX API no tiene concepto de atributos. Solo utiliza la estructura D3D11_INPUT_ELEMENT_DESC para especificar los atributos de los vértices. En VB, ELEMENT_DESC se utiliza para describir el formato de datos de cada vértice
m_d3dDevice-gt; CreateInputLayout
Shader/Program
Los sombreadores también se denominan programas p>
Admite compilación en tiempo de ejecución.
Los sombreadores en OpenGL también se denominan programas
OpenGL admite la compilación en tiempo de ejecución, es decir, compilar texto GLSL en tiempo de ejecución.
Hay programas de vértices y programas de fragmentos
Para Windows Store y WP8, es necesario compilar HLSL para generar código pseudoensamblador. Si el sombreador se compila incorrectamente, no se podrá generar el archivo ejecutable.
En el nivel funcional 9 de DX
Los sombreadores de vértices y los sombreadores de píxeles corresponden a programas de vértices y programas de fragmentos en GLSL respectivamente
API de configuración constante de sombreador que incluye uniforme, que puede establecerse de la siguiente manera.
glGetUniformLocation
glUniform4fv
Utilice funciones relacionadas con el búfer constante, como
m_d3dDevice-gt CreateBuffer
m_ d3dContext-gt; UpdateSubresource
m_d3dContext-gt; VSSetConstantBuffers
Utilice glCreateShader, glBufferData, glGenBuffers, glTexImage2D, eglBindTexImage y otras API para gestionar recursos como texturas y buffers. gestionar recursos. Normalmente, habrá un puntero ID3D11Device para llamar a la API DX para la gestión de recursos, como la función CreateTexture2D(). Las aplicaciones de la Tienda Windows pueden usar algunas clases de Loader encapsuladas para cargar recursos de textura. Los ejemplos de Microsoft suelen utilizar la clase BasicLoader, que los programadores pueden modificar y mejorar.
La administración de contexto se usa para configurar la canalización de representación glAttachShader, glGetUniform* y otras API. Generalmente, se crea un puntero a la clase ID3D11DeviceContext y luego el puntero de contexto se usa para llamar a la API de configuración de contexto.
p>Mostrar búfer El contenido del búfer se muestra usando la función SwapChain.
Función SwapChain Uso de la función Presente
Sistema de coordenadas
La dirección X positiva es hacia la derecha y la dirección Y positiva está hacia arriba.
Consulte a continuación las similitudes y diferencias detalladas:
Sistema de coordenadas (Direct3D 9)
OpenGL utiliza un sistema de coordenadas diestro, por lo que la dirección Z positiva apunta fuera de la pantalla.
DX utiliza un sistema de coordenadas para zurdos. Por lo tanto, al trasplantar, se debe invertir el orden de los vértices del triángulo, así como la dirección Z.
Puedes utilizar las funciones D3DXMatrixPerspectiveRH y D3DXMatrixOrthoRH para mapeo de proyección en un sistema de coordenadas diestro.