[Moteur3D c++] TroisD

SEB Message lu Posté le 23 Août 2011 à 18:59 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Hello Hello.

Alors concernant NextGine il y a eu effectivement de l'évolution, étant donné que j'ai commencer à construire un éditeur de jeu basé sur Qt autour de mon moteur. Cela m'a permi d'apprendre des tas de choses et de me rendre compte de certains soucis présent dans le moteur pour un faire une utilisation concrète.

NextGine se compose donc actuellement de plusieurs 'morceau', plus ou moins indépendants.

Le moteur complet et quelques outils.

Le moteur comporte les modules suivant :
NextGine
==> Core
------ (Element de base, collections, logs, threads, filesystem, xml, zipper, criptor, system informations etc...)
==> AI
------ (système de scripting, machine a etat, mini CSP solver)
==> Graphic
------ (Moteur graphique, gestion de scène nodes et de chaine de rendu, optimisation de mesh etc.., rendu de police etc..)
==> GuiSystem
------ (Moteur de gui entièrement abstrait permettant de créer des implémentation aussi bien en Win32 qu'en X11 ou Cocoa ou bien meme encore dans le moteur NextGine)
==> ImageLoading
------ (Toute une liste de loaders d'image, BMP, ICO, DDS, JPG, PCX, PNG, PPM, TGA)
==> Math
------ (Librairie regrouppant tous les element mathématiques vecteur,matrice,quat ainsi que les optimisations SSE et une couche abstraite pour faire des calcul parallèle basé sur des kernel openCL ou software)
==> ModelLoading
------ (Toute une liste de loader de model 3D, 3DS, ASE, BSP, MD2, MD3, OBJ, OFF, STL)
==> Network
------ (Des element de reseau)
==> NextGine
------ (Une lib regrouppant tout cela et fournissant une interface scriptable)
==> Physic
------ (Un début de moteur physique)
==> Renderer
------ (3 renderer de rasterisation OpenGL, DirectX9 et 10 et un renderer en ray tracing experimental)
==> Scripting
------ (Plusieurs interface ver des langages de script : LUA, Javascript, Python, Lisp)
==> Sound
------ (Un module de son de base interfacé avec OpenAL et/ou DirectSound lisant des fichier WAV uniquement pour le moment)

Tous ces modules sont dépendant du module Core et Math.

Tout ceci est actuellement compilé en lib statique et il me serait difficile maintenant de fournir une lib dynamique sur chacun de ces modules, cependant ce que je peux faire c'est créer une version dll du module NextGine qui exporteraient les fonctions que je bind actuellement sur les système de script. Et Ainsi pouvoir utiliser le moteur de la meme facon que ce que je le fourni à mon système de script.


Au niveau des outils il en existe 3 :
Un packager/dépackager permettant de créer, ouvrir des archives nextgine
Un environnement de création de jeu en Qt, permettant de gérer des projet, des scènes, des textures, des scripts et enfin de publier les jeux.
Un serveur de travail collaboratif avec une mini interface en Qt auquel peut se connecter l'éditeur afin de pouvoir avoir un système de versionning adapté aux jeux et aux assets qu'on y trouve. (Serveur en cour d'expérimentation)


Je vais essayer de vous mettre en ligne la dernière version de l'éditeur même si elle n'est pas parfaite. Et si tu es intéressé par le fait que je crée une dll comme je l'ai dit j'essayerais de te faire cela Mod.
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Mod Message lu Posté le 23 Août 2011 à 22:47 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Ah, je suis effectivement bien curieux de voir l'éditeur de jeu, c'est un domaine qui m'intéresse.

Sinon, fichier .lib, ça me convient parfaitement ^^. Jade utilise actuellement ce format de fichier, et non pas (plus depuis un moment) les DLL.
SEB Message lu Posté le 24 Août 2011 à 16:54 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Ok je tenterais de te fournir une lib d'ici quelque temps.

En attendant voila une nouvelle version de l'Editeur NextGine

c'est une version un peu buggée et cela manque pas mal d’intuitivité mais j'ai essayé d'avancer au maximum dans l'optique d'etre capable de réaliser un premier jeu le plus vite possible.

Je fourni un projet exemple avec qui crée une petite scène de bomberman toute basique avec des cubes.
Il est également possible de publier le projet en executable final.

voila je vous laisse vous amuser un peu le fichier est compressé en 7Z

http://www.mediafire.com/?kzofa716joa8yyj

J'attend toutes critique constructive !
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Mod Message lu Posté le 24 Août 2011 à 21:19 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Alors malheureusement, n'ayant pas QT d'installé je ne peux pas lancer l'éditeur (erreur de dll qt4core manquante). Je suis en train de télécharger ça, mais l'information pourra servir pour plus tard.

J'ai du coup exploré un peu les fichiers et lancé l'exe Bomb03, qui affiche la map bien typée Bomberman mais rien d'autre (normal ou non ?).

La console boucle sur ceci :

Code :
Update the dynamic element by time
Updating a dynamic element
This element is visible


Et parmi les logs générés (jolie mise en forme pour la version HTML d'ailleurs :p) se trouve ceci :

Code :
INFO - CreateScriptLibrary.cpp => nxtMessage : Init
INFO - DefaultFramework.cpp => init : Parametre de rendu normaux
INFO - DefaultFramework.cpp => loadingCallback : Ouverture du fichier de scene
INFO - DefaultFramework.cpp => loadingCallback : Fichier xml bien lu
INFO - CreateScriptLibrary.cpp => nxtMessage : Light ok
WARN - TBNComputer.cpp => treat : Computing TBN for quads mesh
WARN - CubeSceneNode.cpp => CubeSceneNode : Tangent binormal after treatment is ok
INFO - CreateScriptLibrary.cpp => nxtMessage : Materiau n'existe pas deja
INFO - CreateScriptLibrary.cpp => nxtMessage : Materiau n'existe pas deja
INFO - CreateScriptLibrary.cpp => nxtMessage : Materiau n'existe pas deja
INFO - CreateScriptLibrary.cpp => nxtMessage : Update


Voilou, je dis quoi dès que j'aurais pu tester l'éditeur.
SEB Message lu Posté le 24 Août 2011 à 22:01 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Oui en fait tout ce que tu me rapporte est un comportement normal. Le Bomb03 est un export du projet qui a été créé via l'éditeur. Donc oui son comportement est actuellement uniquement de créer et afficher la map.

Oui j'aurais du mettre Qt avec désolé :/

Et le log warning défois je l'utilise mal... XD c'est pour mieux le repérer dans le tas des logs. Donc aparemment aucun probleme ^^ !
NextGine : 3D games engine
Nombre de lignes actuel : 77683
SEB Message lu Posté le 09 Sep 2011 à 11:52 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Hello hello,

Je profite du fait qu'aujourd'hui je n'ai accès à aucun logiciel de dev ou autre pour vous annoncer que NextGine est (une nouvelle fois c'est peut-etre un peu mon défaut... nous verrons bien) en train de se payer une refonte.
Ce qui concrètement donne lieu à ce qu'on pourrait appeler un début de NextGine 2 l'historique de la vie de ce moteur étant la suivante :

    2005/2006 (Licence 2) => Premier moteur OpenGL (sans nom) intégré à une fenetre Qt compatible linux et windows capable uniquement de gérer de petits modèles statiques texturés une fois avec des image bitmap et un rendu DisplayList.

    2006/2007 (Licence 3) => Second moteur OpenGL revu et restructuré(et au passage nommé TroisD) pour le projet 'Follow the beaver' il intègre en plus le mip maping, les modèles animés (format .3ds) et les vertex array et VBO. (assez mal mais tout de même ^^)

    2007/2009 (Master 1 et 2) => TroisD est intégré dans un moteur comportant plus de module (core, physique, network, son) nommé le PTC engine (découlant du nom du projet Perfect Tactical Combat) petit moteur de RTS.

    Ete 2009 (Fin de stage Master 2) => TroisD étant trop vieux et les études touchant à leur fin je décide de refondre TroisD en NextGine et de le détacher du projet PTC car trop de vieux codes l'empèchait d'évoluer normalement. Cette première version de NextGine fait la place plus large à une meilleure gestion du graphe de scène, à l'intégration de threading et surtout au fait d'être multi-renderer tout en perdant un peu son aspect portable, devenant ainsi assez spécifique Windows.

    Debut 2011 => Tentative de création d'un middle-ware de création de jeu autour de NextGine faisant apparaitre de grosses failles dans la gestion de divers types de ressource, en effet NextGine avait été concu de manière à être cappable de charger plusieurs format de fichiers de modèle, cependant ce n'est pas très pratique quand on fonctionne avec un middleware de création car il est bien plus pratique d'uniformiser les format afin d'en simplifier la gestion.


DONC :

Spoiler - Cliquez pour afficher
Septembre 2011 => NextGine 2 est en train de montrer le bout de son nez. Tout à été repris de quasi 0. Et notamment la gestion de la mémoire qui malgré quelques allocateurs et progrès dans NextGine possédait une syntaxe complètement folle, de même pour la gestion des chaines de caractère et des logs. Ainsi qu'une nouvelle conception toute neuve quand à la gestion des ressources graphiques et des types de nodes du graphe de scène. L'orientation multi-plateforme à également été reprise à 100% et elle vise cette fois à être à 100% portable (dans son développement actuel elle est validée sur Windows sup à XP, Linux (Ubuntu 10.xxx Fedora 15 (si je dis pas de bétises)), MacOsX (intel), Et incessament sous peu elle sera validée sous Android et iOs.


Au niveau de l'organisation de base elle conserve quand même un découpage relativement similaire :

    Une lib Core (Terminee) => Types de base, collections, chaines, fichiers et système de fichiers (pack, zip...), Debug (logs, allocateurs, (pas de profiler car tous les ide en proposent quasiment a l'heure actuelle)), Gestion de la mémoire par surcharge des new/delete, Threads, gestion du temps, Vecteurs et matrices

    Une lib App (Terminee) => Gestion d'une classe d'application (surtout inspirée du fait que sous MacOs et iOs c'est le point d'entré de base et que ce n'est pas difficile à adapter vers windows, linux) et gestion de fenètres et récepteurs d'évènements.

    Une lib Graphic (Sur le début) => Gestion des ressources graphiques sur une base streamée (modèles, textures, shadders, matériaux, fonts), gestion du graphe de scène, gestion des 3 modes de rendu (FFP, ForwardShadding et DefferedShadding), 8 Renderer (Null, Software, OpenGL, OpenGL-ES, DirectX9-10-11, Skirt (ray tracing))


Des que le moteur graphique sera disponible j'essaierais de voir avec toi Mod comment te fournir une lib avec des fonctions graphiques de base pour Jade.

Ca serait sympa que nous nous mettions d'accord sur les fonctions qui pourraient être nécessaire à une démo de base.

Doit il y avoir une gestion 'un peu avancée' du genre

Code : C
NextGineOpen()
 
NextGineCreateGraphics(1024,768,true) // true pour fullscreen
 
NextGineCreateCamera(position, near, far, etc...)
 
NextGineLoadModel("model.obj")
 
NextGineClose()
 


Ou doit on rester dans du simplissime à la DarkBasic (pas de gestion de la lib, la fenetre s'ouvre seule... et on a juste un truc genre)

Code : C
idModel = LoadModel("model.obj")


et les configurations de caméra, fenêtres sont 'par default'

Dernière édition le 09 Sep 2011 à 20:01
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Mod Message lu Posté le 11 Sep 2011 à 11:20 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Ah, des nouvelles :)

De mon côté, il y a trois possibilités :
- devoir écrire tout le code d'initialisation à la main,
- écrire ce code dans le wrapper du .lib, code qui sera exécuté au chargement de l'appli, et donc invisible pour l'utilisateur
- écrire dans les .lib un main, WinMain, etc, contenant le code d'initialisation, et appeler à l'intérieur une fonction avec un nom donné. Côté Jade, le compilateur peut remplacer l'entry point par ce nom. C'est ainsi que fonctionne le wrapper DarkGDK, d'ailleurs.

Et du coup ça me faisait qu'il faudrait que je retente le téléchargement de QT, qui était down précédemment.
SEB Message lu Posté le 11 Sep 2011 à 14:33 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Oui tout dépend ce ce qu'on souhaite faire. Pour le moment tu peux regarder l'éditeur mais il ne sera pas poursuivi 'tel que' je pense le revoir aussi un petit peu des que le moteur aura ré-atteind le même niveau que le précédent.

Il y a les deux optiques effectivement soit jade est 'intégré au moteur comme une sorte de langage de script compilé' donc c'est le moteur qui se lance puis utilise Jade, soit Jade est le langage.. et on peut lui accrocher la lib NextGine. Pour moi les deux approches sont tentantes et tout autant faisables. Donc après ce qui est important c'est de savoir ce que tu souhaite pour Jade. Ensuite il faudra définir plus concrètement l'ensemble des fonctions nécessaires et jusqu'à quel niveau d'accès on ouvre les choses.
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.066 secondes