[Moteur3D c++] TroisD

SEB Message lu Posté le 01 Fév 2009 à 15:01 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Salut à tous,

Voila comme vous avez peut-être un peu suivi j'ai récemment eu comme projet de créer un RTS 3D comme projet de fac. Et pour cela j'ai utilisé et fait évoluer mon propre moteur 3D que j'écris en C++.

Pourquoi TroisD ?? tout simplement parceque j'ai une grande imagination et que donc j'ai trouvé ce nom génial. le format des modèle utilisé créé spécialement porte l'extension DDD ^^.

Bref tout ca pour dire que je suis en train de préparer une version librairie/dll pour windows que je vous présenterais d'ici 2 semaine ici. En attendant voila un début de documentation et d'informations concernant ce moteur.

http://pagesperso-orange.fr/the.last.dream/TroisD/

C'est un moteur qui a pour objectif de devenir open source. Cependant je ne les fournirait que lorsqu'une première version stable et que je considèrerais comme aboutie sera en route.

Voilou voilou ^^
++
Seb

EDIT -------------------------------

Ce sujet ne concerne plu le moteur TroisD mais NextGine (dont la présentation est faite en page 2)

Ici seront tenues a jour les dernières informations concernant ce projet :

Derniere release

Les elements en rouge sont effectues
Code : C++
 
/**********************************************
         Presentation generale de la demo
***********************************************/
 
- 'Afficher le logo du moteur dans un coin'
- Developper un systeme de splines pour définir les mouvements de camera
- Systeme de fonts pour afficher le fps sur la zone de rendu
- Systeme de temps de chargement pour connaitre l avancement
 
 
/**********************************************
                Performances
***********************************************/
 
- Ameliorer les temps de chargement
  - format de fichier direct
  - systeme de cache
  - chargement multi thread pour les machines cappables
- 'Optimisation generale des mesh 50%'
- Optimisation des mesh en fonction du gpu
- Sélection de la technique de rendu en fonction du gpu
- Partitionnement automatique de la scene (Octree puis KD tree)
- Optimiser les bindings de materiaux
 
/**********************************************
                  Qualité
***********************************************/
 
- 'Amelioration du calcul des normales (prise en compte des hard edges, smoothing meme sur les jointures d uv) 50%'
- Ajouter un type de lumiere pour l ensemble de la scene
- Ajouter le mipmaping en directx9
- Filtrage anysotropique des textures
- Selectionner le niveau de FSAA desire
- Proposer une version avec DirectX 10
- Illumination phong par pixel
- Transparence des vitres
 
 
/**********************************************
                   Bugs
***********************************************/
 
- Bug du renderer DirectX9 sur les harnais des chevaux
- Mode super utilisateur necessaire parfois sous vista ou seven
 


Code : C++
 
/**********************************************
              Benchmarking
***********************************************/
 
----------------------------------------------------------------------------------------------------------------------------+
  nom       |     CPU    |         GPU          |  RAM  |     Os     |        FarmerV1              |        FarmerV2       |
----------------------------------------------------------------------------------------------------------------------------+
 Darktib    | Pentium D  | NV Geforce 6800 LE   |  3Go  |  XP 32     |  Dx9 : 8/12,    GL : na      |                       |
 Daru13     | Core2 Duo  | NV GeForce 8600M GT  |  2Go  |  Vista 32  |  Dx9 : 60/80,   GL : 20      |  Dx9 : 40/90,GL : 50  |
 killpatate | Quad Q6600 | ATI Radeon 3870 X2   |  6Go  |  Vista 64  |  Dx9 : 300,     GL : 14/16   |
 seb        | Core2 Duo  | Intel GMA 945        |  2Go  |  XP 32     |  Dx9 : 11,      GL : 8/25    |
 lionhearts | Core2 Duo  | Nv GeForce 8800 GT   |  2Go  |  Vista 32  |  Dx9 : 180/210, GL : 19/22   |  Dx9 : 210,  GL : 62  |
 bebou007   | Core2 Quad | Nv GTX 260           |  4Go  |  Seven 64  |  Dx9 : 199/250, GL : 31/31   |  Dx9 : 210,  GL : 62  |
 Syltech    | Core2 Duo  | Nv GeForce 8400M GS  |  3Go  |  Vista 32  |          Na                  |  Dx9 : 16,   GL : 23  |
 Gregouar   | Core2 Duo  | Nv Geforce 8600M GT  |  3Go  |  Vista 32  |          Na                  |  Dx9 : 70,   GL : 60  |
 


NextGine : 3D games engine
Nombre de lignes actuel : 77683
Darktib Message lu Posté le 01 Fév 2009 à 15:39 Bulle
Avatar de Darktib
Membre Ultime

Messages : 4017
GCPoints : 347288
Ca a l'air assez bien concu, avec des ressemblances a Irrlicht^^ (notament le systeme de chargement des images). Et les tests de ton jeu prouve qu'il est plutot stable - meme si a mon avis il reste du chemin pour qu'il soit abouti^^

D'ailleurs sur les screenshots ton jeu a avancé on dirait^^ Et j'aime bien le deuxieme screen, avec l'eau^^

Bonne continuation
Dernière édition le 01 Fév 2009 à 15:39
stilobique Message lu Posté le 01 Fév 2009 à 15:40 Bulle
Avatar de stilobique
Newser

Messages : 2368
GCPoints : 834447
Waou, super sympathique ! C'est encore assez basique au vue des screen mais c'est tout de même pas mal !
Par rapport à ton format d'objet, il est possible de partir d'un fichier .Blend ?

(___/)
(='.'= )Voici Lapin. Copiez et collez Lapin dans votre signature
(")_(") pour l'aider à concrétiser sa domination du monde.
SEB Message lu Posté le 01 Fév 2009 à 15:45 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
En fait pour le moment j'essaye de créer un 'squelette' le plus robuste et extensible possible. Les format 3D supporté comme je l'ai écrit nécessite un systême de pluggin que j'ai mis en place. Les format supportés sont assez limités pour le moment (pas de skinning par exemple). Il faut donc pour le moment se limiter à 3ds, Obj, ASE et STL (oui c'est un format 3D ^^ mais je pense qu'il n'est pas extremement utile lool). Les autres formats arriveront au fur et a mesure et pour les .blend ^^ il me faut juste de la doc vu que je crée mes chargeurs moi meme. Le probleme avec les format 3D (et autres) c'est souvent le manque de documentation.


Voilou voilou :)
++
Seb
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Mod Message lu Posté le 01 Fév 2009 à 18:02 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Pour ce que j'ai pu en voir dans la documentation - ou plutôt le début de documentation, ça donne envie d'en voir plus de ce TroisD (un nom qu'on peut difficilement oublier :p).

Si son avenir est Open Source, et qu'il reste relativement peu tentaculaire (pas comme Ogre, à tout hasard), je pense bien qu'il serait possible que je le rende compatible avec JadeBasic. Un moteur 3D, ça peut toujours être utile :).
SEB Message lu Posté le 02 Fév 2009 à 09:36 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Merci pour cet enthousiasme ^^

En fait mon problème avec l'open source n'est pas tant lié à l'objectif du partage au contraire mais plus au fait qu'on vienne mettre les mains dans mon code. Je ne me suis pas encore suffisamment renseigné sur comment cela se passe réellement.


Voilou j'espère pouvoir vous présenter ca assez rapidement.

++
Seb

ps : ca me plairait ptêtre bien de voir mon moteur utilisé ^^
NextGine : 3D games engine
Nombre de lignes actuel : 77683
SEB Message lu Posté le 03 Fév 2009 à 17:31 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Salut,

Je me suis fait une petite Todo list des choses restantes à faire pour pouvoir vous présenter une première version de TroisD. Je vous la présente et la mettrai donc à jour au fur et à mesure en éditant ce post.

Code :
========================================================================
 Objectifs de la version release 0.1 utilisable de la librairie TroisD
========================================================================

- Réduire les dépendance à Core (pour les appels a visée utilisateur).   non commencé

- Créer un interfacage pour créer simplement un device. 80%

- Charger des modeles 3DS/DDD avec multi materiaux/transparence basique et animation keyframe. 85%

- Afficher une skybox. 95%

- Pouvoir contrôler la camera. 80%


========================================================================
 Objectifs de la version release 0.1.1 utilisable de la librairie TroisD
========================================================================

- Terrain basique 10%


Dernière édition le 05 Fév 2009 à 09:22
NextGine : 3D games engine
Nombre de lignes actuel : 77683
SEB Message lu Posté le 05 Fév 2009 à 09:35 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Pour parler un peu de cette librairie en attendant d'avoir des éléments 'montrables', je vais commencer par exmpliquer le principe général du 'hello world' si on peut l'appeler ainsi.

Dans nos divers projet nous avons séparé deux librairies pour ce qui concerne le fenétrage ( création de la fenetre et du device ) et ce qui concerne le rendu proprement dit. Ce qui nous amenne a avoir deux lib différente. Evidemment je suis en train de fusuionner tout cela pour n'en avoir plus qu'une seule. La librairie de fenétrage s'est inspiré d'une sorte de Glut mais version Objet. Le concept qui a été retenu est celui des callback. Ainsi vous disposez d'un callback pour le redimensionnement, un callback pour les touches clavier 3 pour la souris, un render etc...
Cependant tous ces callbacks sont regroupés dans une même classe nommée InterfaceSignalsHandler. dont vous devez en réalisté hériter pour écrire les méthodes qui vous intéressent.

Un exemple en pseudo code donnerait :

Code :
#include <troisd.h>

class MyHandler : public InterfaceSignalshandler {
    void initDevice() { // a utiliser comme un initGL de glut, il s'apelle device car ce sera valable aussi pour directX

    }

   void render() {
     mes render
   }

   void resize(int w, int h) {

    }
};

int main(int argc, char** argv) {
    // creation de mon instance d'handler
    MyHandler* hnd = new MyHandler();
    RenderingDisplayer* disp = RenderingDisplayerFactory::get(width, height, fullscreen, CLASSIC_GL, hnd);
    
    while( true ) {
         disp->frame();
    }

}



en réalité cette séparation permet de ne pas utiliser le moteur 3D et donc d'écrire son propre code opengl dans les methode callback.

Voila voila :) je retourne bosser XD
++
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Mod Message lu Posté le 05 Fév 2009 à 10:44 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
Imaginons que je veuille intégrer TroisD à une application qui possède déjà son propre système de fenêtrage (par exemple en se basant sur Win32). Y aurait-il possibilité de passer le handle de cette fenêtre pour que le moteur sache l'exploiter ?
A mon sens, garder séparer fenêtrage et device n'est pas forcément une mauvaise chose.
SEB Message lu Posté le 05 Fév 2009 à 10:58 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
En fait justement mon problème réside dans l'endroit ou je dois séparer ce qui concerne le moteur de ce qui concerne le fenétrage. Ma petit librairie de fenétrage est orientée rendu 3D donc elle prépare les device avec des buffers pour Opengl ou pour Directx. Troisd de son coté n'utilise que des appels natifs Opengl ou directx. en gros pour continuer sur le hello world. Il faudrait rajouter.


Code :
class MyHandler : public InterfaceSignalshandler {
    void initDevice() { // a utiliser comme un initGL de glut, il s'apelle device car ce sera valable aussi pour directX
        TROISD::ApiRenderer::RENDERER =  new TROISD::OglRenderer();
        TROISD::ApiRenderer::RENDERER->initDevice();
    }

...
};



Donc effectivement la séparation entre interfacage et rendu est complète. On peut par exemple imaginer utiliser TroisD avec Qt (ce qui a été fait pour les premiers projets). Cependant le systeme de fenétrage doit créer la surface et le contexte de rendu opengl (je vais réfléchir à comment éventuellement modifier ca tout en restant aussi facilement portable).




NextGine : 3D games engine
Nombre de lignes actuel : 77683
SEB Message lu Posté le 06 Fév 2009 à 18:02 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Salut salut,

J'ai un petit souci technique qui est que comme c'est ma propre librairie je me la suis installée a ma facon sur mon pc et en fait je ne peux pas avoir de certitude sur le fait que cela s'instalera facilement nimporte ou. Je cherche donc quelqu'un qui pourrait se préter a quelques tests mais ca serait pratique de travailler en parallele via msn par exemple.

Je compile ma librairie pour mingw en premier lieu donc voilou :)

s'il y a des volontaires envoyez moi un mp :)

++
Seb
NextGine : 3D games engine
Nombre de lignes actuel : 77683
SEB Message lu Posté le 11 Fév 2009 à 16:55 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Une petite annonce pour vous dire que je pense tenir le délai et vous présenter une première version compilable pour des hello world de troisD.
Maintenant que toute l'arborescence est faire correctement, les exemples sont en cours de création ainsi que les derniers réglages.
NextGine : 3D games engine
Nombre de lignes actuel : 77683
SEB Message lu Posté le 15 Fév 2009 à 14:04 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Hello hello,

Bon je suis une fois de plus confronté à un petit contre temps. Je n'avais pas anticipé quelques problemes de linkage avec les DLL pour les éléments statiques. Donc je vous poste un premier essai de lib ne contenant que la parti 'coeur' du moteur sous le namespace PTCE::ALPHA

en effet je vous livrerais petit à petit l'ensemble du Game Engine concu pour PTC et cela commence donc par la librairie ALPHA.

Vous trouverez dans ce package :
1 les entète de ALPHA, la Lib et La Dll.
2 un petit code cpp avec un sample a compiler pour tester Alpha
3 une version executable de mon utilitaire de conversion de format de modeles 3D (je pense qu'il manquera des petites dll... )

http://perso.wanadoo.fr/the.last.dream/TroisD/Packages/Package1.rar

Voilou je vous livre tout ca un peu brut. Mais je compte su vos commentaires et vos essai pour améliorer tout ca :)

Cordialement
Seb
NextGine : 3D games engine
Nombre de lignes actuel : 77683
freemaul Message lu Posté le 15 Fév 2009 à 20:17 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
Salut,

Code :
// random generators
#include <boost/random.hpp>

C'est quoi cette bibliohtèque "boost" ??
je ne l'ai pas avec mon compilateur DevCPP

Edit : suffit de chercher un peu et de l'installer dsl ^^
je teste ca
Dernière édition le 15 Fév 2009 à 20:22
"La vie n'a pas de prix, mais elle coûte chère"
stilobique Message lu Posté le 15 Fév 2009 à 20:22 Bulle
Avatar de stilobique
Newser

Messages : 2368
GCPoints : 834447

freemaul a écrit :

Salut,

Code : CPP

// random generators
#include <boost/random.hpp>



C'est quoi cette bibliohtèque "boost" ??
je ne l'ai pas avec mon compilateur DevCPP

Dev C++ :shocked:
T'es la 1er personne que je connaisse à toujours utiliser cette IDE ! Je suis assez curieux de savoir pourquoi :embarassed:

(___/)
(='.'= )Voici Lapin. Copiez et collez Lapin dans votre signature
(")_(") pour l'aider à concrétiser sa domination du monde.
SEB Message lu Posté le 16 Fév 2009 à 09:26 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Ben ca peut arriver d'utiliser Dev ^^ il est un peu plus léger que CodeBlocks je trouve mais bon apres c'est une question de gout.

Pour ce qui est de boost effectivement je n'avais pas précisé qu'il fallait l'installer ^^ a rajouter dans les futurs package :D

Et sinon ca compile chez vous?
NextGine : 3D games engine
Nombre de lignes actuel : 77683
freemaul Message lu Posté le 16 Fév 2009 à 17:46 Bulle
Avatar de freemaul
Explorateur

Messages : 174
GCPoints : 50213
Pour DevCpp j'ai commencer avec, j'ai eu la flemme de passer à un autre, n'ayant eu aucun problème jusqu'à présent.

Sinon l'exemple fournit se compile trés bien une fois boost installé, mais je n'ai pas encore regardé ce que fesait ton exemple ^^
"La vie n'a pas de prix, mais elle coûte chère"
SEB Message lu Posté le 01 Mar 2009 à 13:06 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
Quelques petites nouvelles pour dire que j'ai encore quelques problêmes avec l'export en DLL.
Premièrement avec les élément statiques. Et deuxiemement avec les inline qui produisent un certain nombre impressionnant de warnings lorsqu'ils sont combinés aux dllimport ...

Si certains connaissent donc une solution pour remédier au probleme des inline avec les dll je suis prenneur.

Tcho tcho ^^
Seb
NextGine : 3D games engine
Nombre de lignes actuel : 77683
Mod Message lu Posté le 01 Mar 2009 à 16:55 Bulle
Avatar de Mod
Webmaster

Messages : 4954
GCPoints : 2100823
J'avoue avoir du mal à saisir l'intérêt d'effectuer des inline avec des dllimport... A mes yeux, il n'y a que deux possibilités imaginables, soit que c'est pour insérer le code de la fonction importé, ce qui ne peut pas fonctionner à moins que je n'ai raté une fonctionnalité bien planquée, soit d'insérer inline une déclaration de fonction, ce qui revient strictement à faire la même chose que sans inline.

Un peu plus de détails là-dessus ?
SEB Message lu Posté le 01 Mar 2009 à 17:09 Bulle
Avatar de SEB
Membre Evolué

Messages : 554
GCPoints : 103313
En effet l'interet est limité, en fait la raison est simplement que j'ai écri mon code et l'ai toujours utilisé en librairie statique. j'ai donc pour habitude de mettre les methode du type accesseur en inline dans le .h le probleme c'est que en voulant exporter ma lib en dll j'ai laissé ces inline qui évidemment pose problemes lorsque je met un dllexport/import devant ma classe.

Donc quel est la meilleur facon de procéder? mettre une macro conditionelle pour garder les inline en lib statique et les enlever en lib dynamique ?? Ou y a-t-il une methode traditionnelle pour ce genre de chose? j'avoue que je ne m'y sui jamais réellement penché.

Encore merci d'avance :)
Seb
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.1347 secondes