2010-03-18 15 views
6

Più di 5 anni fa stavo giocando con DirectSound e Direct3D e l'ho trovato davvero interessante anche se ci voleva molto tempo per ottenere buoni risultati con C++. Allora ero uno studente universitario. Ora ho per lo più esperienza di sviluppo aziendale in C# e PHP, e lo faccio per vivere. Non c'è davvero alcuna possibilità di guadagnare soldi con un serio sviluppo del gioco nel nostro paese. Ogni giorno sempre più scopro che mi manca qualcosa. Così ho deciso di trascorrere un'ora circa ogni giorno per programmare per divertimento.Motore di gioco 3D per simulazioni mondiali in rete/sandbox AI

Quindi la mia idea è di costruire una simulazione mondiale. Mi piacerebbe iniziare con qualcosa di semplice - alcune creature umane che vivono la loro vita - come Sims 3 ma molto più semplice, solo bisogni di base, animazioni di base, risorse grafiche minime - Immagino che non sarà una città ma solo una grande casa per cominciare. L'idea è di avere una specie di applicazione server che memorizza i dati del mondo nel database MySQL, e alcune applicazioni client - robot IA senza corpo che simulano il movimento e alcune interazioni con il mondo e l'un l'altro. Ma non sarebbe divertente senza 3D. Quindi ci sono anche clienti 3D: posso entrare in quel mondo virtuale e vedere i robot IA che vivono. Quando il bot entra nell'area visibile, diventa materiale: carica una mesh e animazioni, quindi posso vederlo. Quando parto, i robot perdono di nuovo i loro corpi in rete 3d, ma la loro vita virtuale continua ancora.

Con il tempo spero di renderlo simile ad una sandbox espandibile con script per sperimentare con vari algoritmi di intelligenza artificiale e così via. Ma io non sono destinati a creare una vera e MMORPG: D

Ho cercato molte cose possibili avrei bisogno (gratuito e open source) e ora devo fare una scelta:

  • OGRE3D + enet (o RakNet). Vecchio buon C++. Ma non mi rallenterà così tanto che non mi divertirò più?

  • CrystalSpace. Formalmente non un motore di gioco ma molto vicino a quello. C++ di nuovo.

  • MOgre (wrapper OGRE3D per .NET) + lidgren (libreria di rete che è già utilizzata in alcuni progetti di gioco). Bene - Mi piace C#, è buono per la programmazione veloce e può anche essere usato per lo scripting.

  • XNA sembra solo un quadro, non un motore, in modo davvero avere dei dubbi, dovrei guardare anche a XNA Game Studio :(

  • Panda3D -. Motore di gioco completo con risposte positive mi piace davvero idea di avere tutto il set di strumenti in un unico pacchetto, ha buone recensioni come un motore per principianti ... se conosci Python. Sul lato C++, Panda3D ha una documentazione quasi inesistente. Ho 0 esperienze con Python, ma ho sentito è facile da imparare e se sarà divertente e stimolante, suppongo che trarrai beneficio dall'esperienza in un altro linguaggio di programmazione

Quali di questi suggeriresti, non a causa di funzionalità avanzate o di un buon supporto della piattaforma ma soprattutto per divertimento, facilità di flusso di lavoro ed espandibilità, e così posso creare e integrare tutti i componenti di cui ho bisogno: il server con il database, i robot IA e un'applicazione client 3D?

risposta

1

Se ti piace Python, ci sono associazioni per Ogre. Controlla python-ogre. L'ho usato un po 'e sembrava abbastanza stabile da essere usato. Comunque incontrerai il bug occasionale dato che la base di utenti non è così grande.

Ho più esperienza con il semplice C++ Ogre, che mi piace usare molto. Non penso che ti rallenterà così tanto. Sembra che il tuo progetto possa raggiungere un livello abbastanza alto e avrai bisogno di un sacco di prestazioni per farlo. In questo caso il C++ non è mai una cattiva scelta.

Ad ogni modo, una volta che il motore è finito, è quasi tutto basato sullo scripting. E se lo volessi, potresti farlo in un linguaggio di alto livello.

3

Ho usato solo XNA, quindi non posso davvero darti un buon confronto con gli altri. Dirò che mentre XNA è solo un framework, TorqueX 3D è un motore. Ottieni l'accesso ai binari del motore TorqueX 2D e 3D quando ti iscrivi a sviluppare per XNA ($ 100/anno).

Non ho lavorato con il motore 3D, ma ho utilizzato il motore 2D.Devo dire che la documentazione sull'API può essere un po 'scarna, ma hanno alcuni tutorial introduttivi davvero validi e un forum abbastanza utile e attivo per domande a cui le esercitazioni non rispondono.

La tua esperienza con C# sarà ovviamente molto utile. Dovrai comunque seguire lo sviluppo di Windows, perché non avrai accesso allo stack di rete (o database) su Xbox 360.

Una volta che ho lavorato con le esercitazioni e mi sono abituato allo stile di Torque, ho trovato è molto divertente lavorare con È molto facile aggiungere oggetti/comportamenti. Il supporto audio è stato migliorato e reso davvero semplice con alcune delle ultime versioni del framework XNA. Ha un buon editor per 2D, e penso che anche l'editor 3D sia decente (non l'ho ancora provato) per aiutarti a iniziare a creare livelli. Suppongo che manchino nel dipartimento di rete/database, dovresti usare la roba standard di .NET o portare in altre librerie con cui lavorare.

Penso che varrebbe la pena di dargli un'occhiata in ogni caso e confrontarlo con gli altri. Credo che tu possa scaricare una versione di prova gratuita (30 giorni) anche senza iscriverti a XNA se vuoi giocare con essa. In bocca al lupo!

2

Panda3D sembra avere una promessa dato che ha un modo per modificare le mesh in fase di esecuzione (questa funzionalità è carente, buggata o altrimenti difficile da utilizzare in molti motori 3D) che sarebbe ciò che è necessario per le modifiche della mesh sul lato client interattivo registrate da un server comune. Nel tuo database assicurati di includere un timestamp sulle modifiche in modo da poter eseguire query appropriate per generare patch per i client per ottenere informazioni sulla mesh di aggiornamento quando viene modificata.

utilizzando InnoDB si potrebbe fare tabelle qualcosa come il mio SQL è probabilmente fuori, ma questo dà l'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 è il vertice id quando viene timestamp che consente di effettuare patch di aggiornamento x, y, z è il punto del vertice 3d cR, cG, cB, cA è il colore del vertice RGBA u, v è la coordinata della trama del vertice p1, p2, p3 si riferiscono ai vertici nella tabella dei vertici per formare i triangoli come indicato da quei riferimenti di chiave esterna. InnoDB ci consente di evitare problemi relativi a vertici non definiti (ovvero: coerenza), quindi potrebbe anche usarlo. Se è accettabile rimuovere tutti i triangoli con un vertice cancellato nella tua situazione cambia 'limita' a 'cascata' (limita lo rende un errore per eliminare un vertice con triangoli che lo usano)

Come per l'algoritmo della mesh bot, in pratica stai implementando un abbattimento del LOD per i robot non in vista. Molti motori sono già in grado di farlo già per te. Ad esempio, tutte le mesh di skinning/animazione del bot possono essere trasformate in child per l'oggetto esterno del bot in Panda3D e se l'oggetto esterno del bot viene estratto da scope visibili, allora a nessuno dei bambini viene fatto riferimento.

+0

Grazie, idee davvero utili. – JustAMartin