See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: AX-300S  (Read 7299 times)

0 Members and 1 Guest are viewing this topic.

Offline Apofis

  • Sr. Member
  • ****
  • Posts: 349
  • Karma: 0
18 December 2006, 13:16:24
voila me lance ;) :lol:

J'avais en tête de créer un addon qui aurai pour theme la création d'une navette "gros porteur" fictive européenne. Pour moi
fictive ne veux pas dire non plus farfelu, j'aimerai qu'elle sont quand même réaliste ou du moin coéhrant.

En l'état actuel, j'ai le mesh a 80% pret (apres avoir mainte et mainte fois recommencé a zéros :P). Il me reste le systeme
de dock et le train.

Si j'en parle que maintenant et que je ne dévoile po toutes mes idées se n'est po pour garder un secret mais plutot car ayant
auntant d'idées que de questions je suis loin d'etre sur d'arriver a finir cet addon un jour. Et surtout en voyant la qualité
des addons deja réalisés sa fais peur un peu je trouve :)

je disais que j'avais beaucoupd e question voila une liste non exostive ;)

-Niveau mesh je pense que pour tout se qui est partie mobile sa dois etre séparé de la partie "fuselage" ?? nfin quelles sont
les normes a se sujet?

-Niveau texturage je dois a vouer que ca sa me fais peur.... J'ai eut fais un peu de 3d en prog(openGL) mais on est quand
même resté dans des objes relativement simple a texturer.  Donc  la pour etre franc je vois po trop par ou commencer ^^

-Apres niveau prog, j'aimerai en faite connaitre la structure général d'une dll. En gros j'aimerai savoir de quelle forme se
présente les apelle de fonction pour  par une action précise ou comment apeller une fonction qui elle est répétée tout les x
temps ou qui est appellée a chaque boucle d'orbiter. En gros la forme général d'une dll ^^

Pour revenir a mon projet, estetiquement parlant et  au niveau du concept de la soute(les 2 sont en faite grandement lié) je
me suis inspiré d'un appareil existant. AX-300S est que le nom de projet mais il devrai vous mettre sur la voie de l'appareil
de base ;). Je l'est affublé d'un surnom mais si je le donne sa serai trop facile a deviner apres ;) plus aucun challange :lol:

autrement j'aimerai lui créer un panel, pouvoir gérer une réserve d'oxigene pour l'équipage pourquoi po aussi un systeme pour
gérer le co2 expiré. J'ai aussi quelques idées d'addon pour l'addon ^^

voial en gros un peu tout sur mon projet, mes idées et mes doutes ;)


"Oups c quoi se bruit" Fred Haise, apollo 13 :P

Offline laserpithium

  • Legend
  • ******
  • Posts: 1473
  • Karma: 0
Reply #1 - 18 December 2006, 14:11:33
Salut Apofis,

Pour faire la DLL, tu as besoin de la SDK Orbiter (téléchargeable sur le site de Martin).
Dedans, il y a en particulier la doc complète des fonctions de l'API, et également le source de certains vaisseaux, comme le
deltaglider, le shuttleA2 etc.
Je te conseille de commencer par regarder comment est codé le shuttleA2 ou le shuttle PB : en effet, ces DLL sont très
courtes et ne comportent que le code "minimum". Le code du DG est, lui, très gros et comporte beaucoup de fonctions non-vitale.



La sagesse me cours après, mais je suis plus rapide
Si Dieu existe, butons-le !

Offline Jekka

  • Legend
  • ******
  • Posts: 1172
  • Country: Switzerland ch
  • Karma: 3
Reply #2 - 18 December 2006, 15:56:55
Niveau mesh, il faut en effet essayer de grouper au max les objet bougeant ensemble.... C'est pas très clair, mais si
par exemple le pied de ton train d'atterrissage fait un mouvement de rotation mais qu'il est composé de plusieurs
objet dans ton éditeur, essaie de le grouper, voir fusionner, ça sera plus simple après. Mais je dois avouer que pour
ma part, avec anim8or, j'ai chaque fois dû aller retrouver les groupes dans le fichiers .msh avec meshwizzard....

Sinon, les images, c'est pour quand ?? :bave:



Offline Apofis

  • Sr. Member
  • ****
  • Posts: 349
  • Karma: 0
Reply #3 - 18 December 2006, 18:23:17
les images euh... s'est même po texturé :P

donc pour le momen elle est toute blanche et orange :lol:

bon aller j'ai passé une bonne aprem et suis de bonen je vous presente les premiere image de la coque vide du Space Beluga ;)









soyez indulgant sa fais quelque temps que j'avais plus modélisé :lol:

Je vais surement refaire le nez je le trouve trop pointu et vu que je vais y ajouté le systeme de dock dans le nez il y as
90% de chance que je le retouche.


"Oups c quoi se bruit" Fred Haise, apollo 13 :P

Offline tompouce

  • Legend
  • ******
  • Posts: 1214
  • Karma: 0
Reply #4 - 18 December 2006, 18:33:09
O le tricheur c'est le beluga d'airbus :lol: sa commence bien et c'est jolie


___________________________________________________
electro ... orbiter... FAN



Offline Profil supprimé

  • Newbie
  • *
  • Posts: 1
  • Karma: 0
Reply #5 - 18 December 2006, 19:38:14
Je me disais bien aussi qu'il y avait une belle ressemblance avec le Belouga. L'idée pour l'envoi de grosse charge est
interessante. Je te souhaite bon courage pour la suite.

Par contre d'après tes dire tu ne semble pas savoir coment appliquer les textures, les animations, et les
configurations sous Orbiter (via une dll).
Là je crois que tu fais une erreur classique. Tu t'attaque à un truc gros d'entrée de jeu sans connaissance
particullière, et ça c'est risqué. En général il est préférable de commencer par un truc simple afin de tester tout cela.
Et puis t'attaquer à une dll si tu ne sais pas programmer c'est carrément casse gueule.
Cela peut paraitre sévère mais je préfère que tu sois au courant avant, plutot que trop tard.

Mais avec de l'obstination, de la volonté, beauoup de temps tu y arriveras peut être mais je trouve que ta méthode
de travail est trop direct, et c'est casse gueule je toruve.
Cela dis tu auras notre aide dans la mesure du possible. Les dll peu savent le faire.
sinon, tu développe en 3d sous quel soft ?

Enfin quoi qu'il en soit je te souhaite de réussir un bel addon.



Message modifié ( 18-12-2006 19:40 )


Offline Jekka

  • Legend
  • ******
  • Posts: 1172
  • Country: Switzerland ch
  • Karma: 3
Reply #6 - 18 December 2006, 19:55:43
Wow ! Ca promet bien ça ! J'adore l'arrière avec les moteurs fusée, bien vu !! (ben que je les verrais un peu plus
gros.... mais là je chipotte ;) je commence bien :pfff: ) Ca risque d'être assez intéressant au niveau des charges utiles
un truc pareil !!!! :applause:

Quand à la complexité, je sais pas.... Contrairement à Mustard, je pense que si t'as la "foi du créateur", tu peux y
arriver pour ton premier addon, en tout cas niveau modélisation et textures Ca risque de prendre du temps, c'est
clair... Pour mon premier addon (zarya) on m'avait dit que c'était un peu complexe pour commencer (anim, spacecraft,
etc...) J'ai mis 1 mois... mais j'y suis arrivé, et j'ai appris beaucoup... 8)

Cela dit, où je rejoins Mustard, c'est sur les dll... J'ai aucune idée de comment ça marche ces bestioles, et j'imagine
que ça doit bien être casse gueule au début... J'ai un pote qui a voulu en faire pour orbiter justement (non, il poste
pas, c'est un orbinaute silencieux qui nous lis souvent... ;) ) et je crois qu'il a jamais terminé... Bon, c'était pas une
brute non plus en c++ d'après ce que je sais... Mais si jamais, y'a toujours les spacecraft, mais t'as l'air de t'y
connaître quand même en prog, donc t'en aura peut être pas besoin.


Offline Apofis

  • Sr. Member
  • ****
  • Posts: 349
  • Karma: 0
Reply #7 - 18 December 2006, 21:36:11
vivi je sais bien que tout sa est une masse de boulot. je pense que je m'en rend bien compte. Sa prendre simplement du temps.
beucoups d'heure de debugage pas a pas et de bonne prise de tete ^^

mais sa serai facile il n'y aurai plus de defi sa serai moin drole je trouve ;)

la je dévelope sur 3ds max 6 une vieille verisions qui trainé sur un vieux cd ^^

PS : oups j'oubliai :P

un petit screen de dos



la il y as 5 tuyere mais suis po sur... je pourrai en mettre que 3 mais des plus grandes



Message modifié ( 18-12-2006 21:51 )

"Oups c quoi se bruit" Fred Haise, apollo 13 :P

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #8 - 18 December 2006, 23:17:42
ca s'annonce géant, bravo


Quote
a il y as 5 tuyère mais suis po sur... je pourrai en mettre que 3 mais des plus grandes


je pense, en effet que trois tuyères plus grosses, seraient plus adaptées au gabarit de la bête, dans tous les cas bon courage.



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #9 - 19 December 2006, 00:15:06
L'explication promise:

(mais d'abord un peu de morale :) )

Comme dis mustard tu t'attaque a gros et il est impossible de te guider pour tout,
ca prendrais des pages et des pages. Je vais donc laisser tomber la modélisation
pour ca tu a des tutos partout. Oublie pas juste un truc, tu est en 3D temps réel,
si ca fait plus de 10'000 poly c'est pas génial. (DGIV fait 10'000 poly avec le
nouvel equipage mais chaque poly est bien dépensé il y a 67 parties animée)

(Pictoooo iléou le tuto de la 3d ???)

Le post de Jekka à raison d'un certain coté mais si tu fait tout tout seul en partant de presque zéro
tu risque de ramer salement et de ne connaitre qu'un vague succès d'estime a la sortie de
ton addons... un peu décourageant. (pour le premier addons c'est soit pas fini
car on a vu trop gros, soit relativement basique quand meme, d'ou le succès moyen)

Vu qu'on a pleins de bon modeleurs mais très peu de programmeur de dll pourquoi
ne pas focuser la dessus ? La modélisation c'est long aussi pour connaitre toutes
les ficelles. La prog tu est déja dans le bain et tu serait immortel vu la rareté des
programmeurs.  ;)

Avec quelques petit add-ons pour ce faire la main tu pourrait devenir programmeur
des models de papyref ou d'autre modeleur de talent par exemple et nous sortir
des trucs d'enfer ?  "addon by Apofis and Papyref" ca a de la gueule aussi non ? :)

Pour en rajouter, je dirais que les addons intteressant ne sont pas forcement ceux qui ont
les plus beau modèles. Un mesh apollo super bien fait mais sans aucune fonction tout le
monde va s'emmerder avec au bout de 5mn. Le DGIII est assez moche comme modele
carré, angulaire, mais avec 67 animation et un panel complet c'est un des plus plebiscité.

Bon je ne force personne, je vais te répondre pour la prog. Je part du principe
que tu connais bien la programmation objet en C++.


Il y a deux source d'info pour la prog, les header file et la doc pdf (API_Reference.pdf).

Pour les header file les deux indispensables à lire c'est :

OrbiterAPI.h et VesselAPI.h  a charger dans VC pour avoir la mise en page et les codes
couleurs (sinon c'est indigeste)

OrbiterAPI.h :

A partir de la ligne "Orbiter API interface methods" tu trouve toutes les fonctions générale d'orbiter
que tu peu appeler dans ta DLL:

exemple:
OAPIFUNC double     oapiGetPlanetPeriod (OBJHANDLE hPlanet);
OAPIFUNC double      oapiGetPlanetObliquity (OBJHANDLE hPlanet);
// Camera functions
OAPIFUNC bool     oapiCameraInternal ();
OAPIFUNC int        oapiCameraMode ();
OAPIFUNC int        oapiCockpitMode ();
OAPIFUNC void       oapiGetNavPos (NAVHANDLE hNav, VECTOR3 *gpos);
OAPIFUNC DWORD      oapiGetNavChannel (NAVHANDLE hNav);

Et etc tu a de tout la dedans et les nom sont très explicite. Pour les fonctions vaisseaux
elles sont ancienne et permettent un accès par handle exterieur a la classe de ton vaisseaux
il vaut mieu pour celle la regarder dans:

VesselAPI.h :

contient toutes les fonctions que tu peu appeler *depuis ta classe de vaisseau*
c'est la le coeur de ce que tu a besoin.

Vitesse, position, camera, load des mesh, manipulation, transformation, animation,
strobe, thruster, reservoirs, dimension, poids, aile, surface de controle, panel,
remplacement et manipulation des textures, virtual cockpit et j'en passe et des meilleurs,
ils sont tous la.

Il y a même ceux que tu cherchais, nos amis les callback que je vais t'expliquer ci-dessous.

Avant tout le mieux c'est que tu charge un exemple basique de la SDK d'orbiter par exemple
nous allons prendre le SHUTTLEA qui est encore simple mais deja assez complexe.
Charge le dans VC je vais t'expliquer en gros.

Donc une DLL est chargée par Orbiter, comment fonctionne une DLL on s'en bat les sboubs, ce qui est
utile de savoir c'est comment Orbiter travaille avec.

Orbiter a defini un certains nombre de classe et fonctions "virtuelle" qui si elle sont declaré dans la DLL
vont etre appellee par Orbiter a différents moment.

La premiere chose a faire donc c'est de dériver une classe a nous de la classe "VESSEL2"
d'orbiter ce qui est fais dans ShuttlA.h ici:

class ShuttleA: public VESSEL2 {

On pourrait aussi bien marquer :

class Apofis: public VESSEL2 {

Dedans tu a au moins un constructeur et un destructeur et des fonctions dérivée de fonction virtuelle
d'orbiter (appellée par Orbiter) et des fonction à nous, c'est notre classe on est libre
de travailler comme on veut.

Le constructeur et le destructeur serviront seulement a crée des ressource GDI pour les
affichage sur les panels, font, pen etc etc. et le destructeur à les detruire proprement.

Apres tout le boulot sera fait depuis des callbacks appelés par Orbiter dont voici la liste
qui est dans "vesselAPI.h" (vers la fin)

   virtual void clbkSetClassCaps (FILEHANDLE cfg);
   virtual void clbkSaveState (FILEHANDLE scn);
   virtual void clbkLoadStateEx (FILEHANDLE scn, void *status);
   virtual void clbkSetStateEx (const void *status);
   virtual void clbkPostCreation ();
   virtual void clbkFocusChanged (bool getfocus, OBJHANDLE hNewVessel, OBJHANDLE hOldVessel);
   virtual void clbkPreStep (double simt, double simdt, double mjd);
   virtual void clbkPostStep (double simt, double simdt, double mjd);
   virtual bool clbkPlaybackEvent (double simt, double event_t, const char *event_type, const char *event);
   virtual void clbkVisualCreated (VISHANDLE vis, int refcount);
   virtual void clbkVisualDestroyed (VISHANDLE vis, int refcount);
   virtual void clbkDrawHUD (int mode, const HUDPAINTSPEC *hps, HDC hDC);
   virtual void clbkRCSMode (int mode);
   virtual void clbkADCtrlMode (DWORD mode);
   virtual void clbkHUDMode (int mode);
   virtual void clbkMFDMode (int mfd, int mode);
   virtual void clbkNavMode (int mode, bool active);
   virtual void clbkDockEvent (int dock, OBJHANDLE mate);
   virtual void clbkAnimate (double simt);
   virtual int  clbkConsumeDirectKey (char *keystate);
   virtual int  clbkConsumeBufferedKey (DWORD key, bool down, char *keystate);
   virtual bool clbkLoadGenericCockpit ();
   virtual bool clbkLoadPanel (int id);
   virtual bool clbkPanelMouseEvent (int id, int event, int mx, int my);
   virtual bool clbkPanelRedrawEvent (int id, int event, SURFHANDLE surf);
   virtual bool clbkLoadVC (int id);
   virtual bool clbkVCMouseEvent (int id, int event, VECTOR3 &p);
   virtual bool clbkVCRedrawEvent (int id, int event, SURFHANDLE surf);

Comme le "virtual" l'indique elle sont virtuelle, il faut le declarer dans notre classe
pour qu'elle soient appellée exemple:

class ShuttleA: public VESSEL2 {
void clbkSetClassCaps (FILEHANDLE cfg);


Et voila, maintenant dans le fichier CPP tu declare le corps de ta fonction:

void ShuttleA::clbkSetClassCaps (FILEHANDLE cfg)
{

}

Cette fonction étant virtuelle elle sera appellée par Orbiter en temp voulue, les principales
dont tu a besoins sont:

clbkSetClassCaps (FILEHANDLE cfg)

Appellée quand Orbiter crée ton vaisseau, on crée la dedans les ressources comme les thrusters,
les reservoir, on defini son vaisseau, taille, poid, le mesh utilisé pour l'affichage, et enfin on initialise
les variables de notre classe. (par exemple une variable qui garde le status des trains
d'atterissage, on les veut sorti par defaut donc par exemple  "float Anim_Gear;" dans
notre classe et dans "SetClassCap" Anim_Gear=1;

void clbkLoadStateEx (FILEHANDLE scn, void *status);
void clbkSaveState (FILEHANDLE scn);

Les fonctions qui chargent et sauvent les scenarios qui contiennent tout le status de ton vaisseau.
Si il est crée par l'editor la fonction "loadstateEx" ne sera pas appellée d'ou l'importance d'initialiser
tes variables dans le "setclasscap" pour voir comment ca marche regarde dans l'exemple shuttleA.

void clbkPostStep (double simt, double simdt, double mjd);

Appellée a chaque image, c'est la que ton "runtime" code doit etre. dedans tout ce qui a trait
au fonctionnement, test de crash, animations, pilotr automatique, controle du vaisseau etc etc.
C'est le runtime quoi... :)
Le "Post" est executé APRES la construction de la scene le "PRE" avant. si tu fait pas de trucs
bizarres l'un ou l'autre sont bon.


int  clbkConsumeBufferedKey (DWORD key, bool down, char *keystate);

Et la tu traite les frappe clavier. Exemple Le gars appuie "G" comme "GEAR" dedans tu intercepte
cette frappe et tu inverse la variable que tu a definie dans ta classe: ""Anim_Gear=!Anim_Gear"

Et dans ton "clbkPostStep"  tu teste chaque image ta variable et si elle a changé tu rentre les trains...

Voila , avec ca tu tourne deja.


Marche a suivre:
1-Essayer de piger l'exemple ShuttleA, voir comment "ils ont fait"
2-Quand tu comprend pas une fonction tu regarde dans la doc PDF exemple cherche "clbkLoadPanel"
dans le fichier "API_Reference.pdf"
3-Essaire de modifier cette exemple (pour fair le DGII j'étais parti de deltaglider et j'avais rajouté un bouton)
4-Par d'un exemple basique et crée ton addon entièrement.
5-Revient dans le forum sous les viva de la foule.

Entre la doc API_Reference.pdf les deux header mentionné et les exemples, tu a tout ce qu'il faut
pour démarrer.

Attention: si tu voit un callback ou une fonction avec "ovc" comme prefixe c'est qu'elle date des ancienne
version d'orbiter. Elle remplissent les meme fonction que les "clbk" , marchent toujours mais vont
etre desactivée pour les prochaines version d'orbiter.

Donc vaut mieu utiliser les virtuelle "clbk" que les "ovc"

J'ai peut être pas assez insisté sur la doc: Regarde les exemples et cherche ce que tu ne comprend pas
dans la doc de reference "API_Reference.pdf "
par contre si tu cherche un fonction dans un but precis
il vaut peut etre mieux regarder dans les deux header, la c'est une liste et pas une doc de 200 pages. Plus facile.


Voila...

Bonne chance :)

Dan



Message modifié ( 19-12-2006 00:28 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #10 - 19 December 2006, 00:23:15
Quote
(Pictoooo iléou le tuto de la 3d ???)


Ah vi vi ... plus que quelques pages à finir .... :pfff:


Pic

Offline Apofis

  • Sr. Member
  • ****
  • Posts: 349
  • Karma: 0
Reply #11 - 19 December 2006, 12:49:29
deja mici dan s'est tout a fais se que je cherchai un simple point de dépard. Je vois beaucoup mieux comment sa marche manant.

Je suis po du tout contre le faite de programmer d'autre mesh que les mienne. Je dirai que surement mes mesh sont de loin pas
les meilleurs je m'en rend bien compte. Mais Je pense que pour "donner" envie a quelqu'un de bosser en colaboration, cette
personne dois pouvoir voir et évaluer mon boulot. Vous allez  me dire oui mais fais quelque chose de plus petit ;)

pour etre franc je ne saurai quoi répondre a cette question ^^ Ma raison a tendance a me dire que vous avez surement raison
^^ Mais  j'aime bien se projet et je crois que je pourrai bien m'y faire mes dents ^^

PS : oups j'oubliai :) j'ai regardé le nombre de poly :) 7600 pour le moment.



Message modifié ( 19-12-2006 12:53 )

"Oups c quoi se bruit" Fred Haise, apollo 13 :P

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #12 - 19 December 2006, 15:46:22
Quote
Apofis a écrit:
pour etre franc je ne saurai quoi répondre a cette question ^^ Ma raison a tendance a me dire que vous avez
surement raison
^^ Mais  j'aime bien se projet et je crois que je pourrai bien m'y faire mes dents ^^

J'oubliais évidemment le plus important: il faut avoir une enorme envie de faire le truc ;)

Quote
Apofis a écrit:
PS : oups j'oubliai :) j'ai regardé le nombre de poly :) 7600 pour le moment.

Un poil elevé vu que y a encore aucun détails mais on est très très loin des 73'000 poly,
800 objets et 58  textures de 512*512 vu sur M6 hier... 8o
C'est encore raisonnable quoi.

Tout est la ?

Ben fonce ! qu'est ce que t'attend ! :)

Dan

« Last Edit: 19 December 2006, 17:26:45 by DanSteph »

Offline Momo

  • Legend
  • ******
  • Posts: 2682
  • Karma: 1
Reply #13 - 19 December 2006, 17:26:44
Quote
DanSteph a écrit:

Un poil elevé vu que y a encore aucun détails mais on est très très loin des 73'000 poly,
800 objets et 58  textures de 512*512 vu sur M6 hier... 8o
C'est encore raisonnable quoi.

Tout est la ?

Ben fonce ! qu'est ce que t'attend ! :)

Dan

Ha vi! j'ai lu sa ce matin sur M6!
Bravo pour le cour! il dois pleuré dans son coin...
http://orbit.m6.net/Forum/default.aspx?g=posts&t=10759

« Last Edit: 19 December 2006, 17:26:45 by Momo »