2010-03-18 19 views
6

Hace más de 5 años jugaba con DirectSound y Direct3D y me pareció realmente emocionante, aunque tardó mucho tiempo en obtener buenos resultados con C++. Yo era un estudiante universitario entonces. Ahora tengo principalmente experiencia en desarrollo empresarial en C# y PHP, y lo hago para vivir. Realmente no hay posibilidad de ganar dinero con el desarrollo de juegos serios en nuestro país. Cada día más y más me parece que extraño algo. Así que decidí pasar una hora más o menos cada día para hacer programación por diversión.Motor de juegos 3D para simulación mundial en red/AI sandbox

Así que mi idea es construir una simulación mundial. Me gustaría comenzar con algo simple: algunas criaturas parecidas a las humanas que viven su vida, como Sims 3 pero mucho más simples, solo necesidades básicas, animaciones básicas, recursos gráficos mínimos. Supongo que no será una ciudad sino solo una casa grande para empezar. La idea es tener algún tipo de aplicación de servidor que almacene los datos del mundo en la base de datos MySQL, y algunas aplicaciones de clientes: bots de IA sin cuerpo que simulan movimiento y algunas interacciones con el mundo y entre sí. Pero no sería divertido sin 3D. Entonces, también hay clientes 3D: puedo ingresar a ese mundo virtual y ver cómo viven los bots de IA. Cuando el bot ingresa al área visible, se convierte en material: carga una malla y animaciones para que yo pueda verlo. Cuando me voy, los bots vuelven a perder sus cuerpos de malla 3D, pero su vida virtual aún continúa.

Con el tiempo, espero que sea como un sandbox extensible con scripts para experimentar con varios algoritmos de inteligencia artificial, etc. Pero no estoy destinada a crear un MMORPG en toda regla: D

he buscado muchas cosas posibles que necesitaría (libre y de código abierto) y ahora tengo que tomar una decisión:

  • OGRE3D + enet (o RakNet). Viejo bien C++. ¿Pero no me ralentizará tanto que ya no me divertiré más?

  • CrystalSpace. Formalmente no es un motor de juego, pero está muy cerca de eso. C++ de nuevo.

  • MOgre (OGRE3D contenedor para .NET) + lidgren (biblioteca de red que ya se utiliza en algunos proyectos de juegos). Bien - Me gusta C#, es bueno para una programación rápida y también se puede usar para secuencias de comandos.

  • XNA parece sólo un marco, no un motor, así que realmente tienen dudas, debería siquiera mirar a XNA Game Studio :(

  • Panda3D -. Motor de juego completo con retroalimentación positiva me gusta mucho la idea de tener todo el conjunto de herramientas en un solo paquete, tiene buenas críticas como motor de principiante ... si conoces Python. En el lado de C++, Panda3D tiene documentación casi inexistente. Tengo 0 experiencia con Python, pero he escuchado es fácil de aprender. Y si es divertido y desafiante, entonces supongo que me beneficiaría de la experiencia en un lenguaje de programación más.

¿Cuál de ellos sugeriría, no por características avanzadas o buen soporte de plataforma, sino principalmente por diversión, fácil flujo de trabajo y capacidad de expansión, y así puedo crear e integrar todos los componentes que necesito, el servidor con la base de datos, AI bots y una aplicación cliente 3D?

Respuesta

1

Si te gusta Python, hay enlaces para Ogre. Consulte python-ogre. Lo he usado un poco y parecía lo suficientemente estable como para ser utilizado. Sin embargo, se encontrará con el error ocasional ya que la base de usuarios no es tan grande.

Tengo más experiencia con C++ Ogre, que disfruto usando mucho. No creo que te frene tanto. Parece que tu proyecto podría escalar a un nivel bastante grande, y necesitarás mucho rendimiento para hacerlo. En este caso, C++ nunca es una mala elección.

De todos modos, una vez que el motor está listo, se trata prácticamente de scripting. Y podrías hacerlo en un lenguaje de alto nivel si quisieras.

3

Solo he usado XNA, así que realmente no puedo darte una buena comparación con los demás. Diré que mientras XNA es solo un framework, TorqueX 3D es un motor. Usted obtiene acceso a los binarios del motor TorqueX 2D y 3D cuando se registra para desarrollar XNA ($ 100/año).

No he trabajado con el motor 3D, pero he usado el motor 2D.Diré que la documentación en la API puede ser un poco escasa, pero tienen algunos tutoriales de introducción muy buenos y un foro bastante útil y activo para preguntas que no son respondidas por los tutoriales.

Su experiencia con C# obviamente será muy útil. Sin embargo, tendrá que apegarse al desarrollo de Windows, porque no tendrá acceso a la pila de red (o base de datos) en la Xbox 360.

Una vez que trabajé en los tutoriales y me acostumbré al estilo de Torque, encontré es muy divertido trabajar con él. Es muy fácil agregar objetos/comportamientos. El soporte de sonido ha sido mejorado y simplificado con algunas de las últimas versiones de XNA Framework. Tiene un buen editor para 2D, y creo que el editor 3D también es decente (realmente no lo he probado) para ayudarte a empezar a crear niveles. Sin embargo, creo que falta en el departamento de red/base de datos, tendrías que usar el material .NET estándar o traer otras bibliotecas con las que trabajar.

Creo que valdría la pena su tiempo para echar un vistazo de todos modos y compararlo con los demás. Creo que puedes descargar una versión de prueba gratuita (30 días) incluso sin registrarte en XNA si quieres jugar con ella. ¡Buena suerte!

2

Panda3D parece prometedor, ya que tiene una manera de modificar mallas en tiempo de ejecución (esta característica es deficiente, defectuosa o de otro modo difícil de usar en muchos motores 3D) que sería lo que necesita para registrar cambios de malla interactivos en el lado del cliente por un servidor común. En su base de datos, asegúrese de incluir una marca de tiempo en las modificaciones para que pueda ejecutar consultas apropiadas para generar parches para que los clientes obtengan información de malla de actualización a medida que se altera.

usando InnoDB usted podría hacer tablas algo así como mi SQL es probablemente fuera pero esto da la idea:

create table `vertex` (
    `id` bigint(15) not null auto_increment, 
    `when` timestamp default now() not null, 
    `x` number not null, 
    `y` number not null, 
    `z` number not null, 
    `cR` number default 0.0 not null, 
    `cG` number default 0.0 not null, 
    `cB` number default 0.0 not null, 
    `cA` number default 1.0 not null, 
    `u` number default 0.5 not null, 
    `v` number default 0.5 not null 
) primary key (id) ENGINE=InnoDB; 

create table triangles (
    `p1` bigint(15) not null references (vertex.id) on delete restrict on update cascade, 
    `p2` bigint(15) not null references (vertex.id) on delete restrict on update cascade, 
    `p3` bigint(15) not null references (vertex.id) on delete restrict on update cascade, 
    `when` timestamp default now() not null 
) primary key (p1,p2,p3) ENGINE=InnoDB; 

id es ID de vértice cuando se marca de tiempo que le permite hacer los parches de actualización x, y, z es el vértice 3d punto cR, cG, cB, cA es RGBA vértice color u, v es coordenada de textura de vértice p1, p2, p3 consulte los vértices en la tabla de vértices para formar triángulos como lo indican esas referencias de clave foránea. InnoDB nos permite evitar problemas relacionados con vértices indefinidos (es decir, consistencia), así que también podemos usarlo. Si es aceptable eliminar todos los triángulos con un vértice eliminado en su situación, cambie 'restringir' a 'cascada' (restringir hace un error eliminar un vértice con triángulos que lo usan)

En cuanto al algoritmo de malla de bot, Básicamente, está implementando un LOD para los bots que no están a la vista. Muchos motores ya pueden hacer esto por ti. Por ejemplo, todas las mallas de despellejar/animación del robot pueden convertirse en hijos del objeto externo del robot en Panda3D y si el objeto externo del robot se elimina del alcance visible, entonces ninguno de los niños se menciona en absoluto.

+0

Gracias, ideas realmente útiles. – JustAMartin

Cuestiones relacionadas