Me doy cuenta de que ya has aceptado una respuesta, pero creo que esto merece algunos comentarios más. Perdón por citarte fuera de orden, estoy respondiendo por lo que creo que es importante.
En lugar de crear un motor 3D desde cero decidí emular lo más exactamente posible: uno de World of Warcraft.
Sin embargo, quería centrarme en el motor 3d y de representación, no en la interfaz, así que no creo que vaya a usarlo [lua] para este proyecto.
De estos dos fragmentos, puedo decirte que no estás tratando de emular el motor del juego. Solo el 3D render backend. No es lo mismo, y la parte de render back-end es una parte muy pequeña en comparación con el motor de juego completo.
Esto, por cierto, puede ayudar a responder a una de sus preguntas:
World of Warcraft parece estar utilizando los dos! De hecho, normalmente usa DirectX, pero puede usar opengl al iniciarlo con el interruptor "-opengl" a través de la línea de comando.
Sí, implementaron ambos. La cantidad de trabajo para hacer eso no es despreciable, pero el back-end de renderizado, en mi experiencia, es como máximo el 10% del código total, generalmente menos. Entonces no es tan indignante implementar múltiples.
Más al punto, la parte de programación de un motor de juego de hoy no es la mayor parte. La mayoría de los scripts de lua se consideran de ese lado, por ejemplo)
Para WoW, el soporte de OSX significaba OpenGL. Entonces lo hicieron. También querían admitir hardware antiguo ... Así que admiten hardware de nivel DX8. Eso ya son 3 backends. No estoy al tanto de cuántos realmente implementan, pero todo se reduce a la base de clientes a la que querían llegar.
Varios back-ends en un motor de juego es algo que es más o menos necesario para escalar a todas las tarjetas gráficas/sistemas operativos/plataformas. No he visto un solo motor de juego real que no sea compatible con múltiples backends (incluso los títulos de los primeros tienden a admitir un back-end alternativo para la depuración).
bien, eso fue un largo prefacio ... Ahora, mi pregunta principal es la siguiente: ¿Debería usar DirectX, OpenGL, bibliotecas de contenedor como sdl, o qué?
Bueno, esto depende en gran medida de lo que quiere obtener de ella. Podría añadir que la lista de opción no es bastante completa:
- DirectX9
- DirectX10
- DirectX11
- OpenGL < 3.1 (antes de quitar API en desuso)
- OpenGL> = 3.1
- OpenGL ES 1.1 (solo si usted necesita para.No es programable)
- OpenGL ES 2,0
Sí, esas API son tan diferentes que es necesario decidir cuáles desea manejar.
Si desea aprender los conceptos básicos de la representación 3D, cualquiera de ellos puede funcionar. OpenGL < 3.1 tiende a ocultar muchas cosas que, en última instancia, tienen que suceder en el código de usuario para los demás (por ejemplo, manipulación de matriz, consulte this plug).
Los DX SDK vienen con muchas muestras que ayudan a comprender los conceptos básicos, pero también tienden a usar las últimas y mejores características de DX cuando no es necesario al iniciar (por ejemplo, usar el sombreador Geometry para representar sprites. ..)
Por otro lado, la mayoría de los tutoriales de GL tienden a usar características que son esencialmente no perfectas en hardware moderno (por ejemplo, glBegin/glEND, selección/selección, ... vea la lista de cosas que se eliminaron de GL 3.1 o this other plug) y tienden a sembrar los conceptos incorrectos para muchas cosas.
¿Cuál es el más usado en el mundo real?
Para juegos, DirectX9 es el estándar hoy en el mundo de PC. Por un margen lejano.
Sin embargo, estoy esperando que DirectX11 obtenga más cuota de mercado, ya que permite un trabajo de varios subprocesos. Desafortunadamente, es mucho más complicado que DX9.
nadie usa OpenGL de todos modos (muy pocas personas saben sobre el interruptor secreto en absoluto).
Pregunte a los propietarios de Mac qué opinan.
Pregunta adicional, ¿de verdad crees que los proveedores de hardware gastarían cualquier energía en los controladores OpenGL si este fuera realmente el caso (me doy cuenta de que generalizo tu comentario, lo siento)? hay usos del mundo real de eso. No hay mucho en juegos, sin embargo. Y Apple hace que OpenGL sea más relevante a través del iPhone (bueno, OpenGL ES, realmente).
Si es algo que suele hacer, no programadores suelen crear su propio motor 3d "envoltura",
Por lo general es una parte integrante del diseño del motor. Eso sí, no es abstraer la API en el mismo nivel, por lo general es más como "dibujar esto con todas las campanas y silbidos de allí". Qué algoritmo de representación aplicar en ese sorteo tiende a ser específico del back-end.
Esto, sin embargo, es muy dependiente del motor del juego. Si quieres entender mejor, puedes mirar UE3, acaba de obtener released free (beer) for non-commercial use (no lo he visto todavía, así que no sé si expusieron los backends, pero vale la pena verlo). Para volver a mi comentario, el motor de juego no solo significa 3D, look at this.
"¿Por qué lo hicieron?" Porque Mac OsX no tiene soporte de DirectX? –
SDL es simplemente una capa de abstracción de plataforma, no sustituye ni a OpenGL ni a DirectX. Sin embargo, cuando se usa SDL, se usa más comúnmente con OpenGL, ya que ambas bibliotecas de plataforma cruzada. También vale la pena señalar que SDL no proporciona un kit de herramientas de widgets, por lo que si es un requisito (algo poco común en los juegos 3D de pantalla completa), algo como Qt podría ser una mejor opción para una aplicación multiplataforma. – codelogic
@gf: buen punto. Hace que me pregunte ahora por qué no admiten Linux de forma nativa, ya que se tomaron todas las molestias para hacer que OpenGL funcione para mac ... solo debería necesitar cambios relativamente triviales. Bueno, supongo que nunca lo sabré. –