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: Hermès enfin terminée !! ;) Addon dispo page 15 !  (Read 56233 times)

0 Members and 1 Guest are viewing this topic.

Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #75 - 07 August 2006, 00:48:52



Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #76 - 07 August 2006, 03:23:06
Et il y a encore une autre alternative CVE Lite
http://projectganymede.sourceforge.net/cve-lite/




Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #77 - 07 August 2006, 10:56:53
j'ai regardé le truc , comme tu le pense, partir d'un seul mesh et 1 seul dll hermes.dll qui est chargé au moment de la
separation
et d'utiliser l'exemple atlantis du sdk comme base pour hermes.dll
hermes.dll , hermes.h qui vas charger les 2 autres (a la maniére de atlantis_tank & atlantis_srb"
hermes_mrb.dll --->include hermes.h
hermes_mrh.dll --->include hermes.h
sauf qu'au lieu de séparer les elements on charge les dll et les assemble directement a l'aide d'attachements
et contrairement a l'atlantis il faudra 4 meshes
hermes_full     utilisé par multistage détruit au moment du chargement de la dll
hermes_ship   chargé par la dll
hermes_mrb    chargé par la dll
hermes_mrh    chargé par la dll

Maintenant j'entrevois une 4 éme solution.
pourquoi vouloir impérativement accrocher Hermes à arianne, pourquoi pas l'inverse
multistage est un dll normal sauf qu'il ne gére pas les attachements par contre comme tout autre dll
il utilise les groupes thruster main rcs etc...  standard de orbiter et ça on sais les commmander à partir d'un autre DLL
Maintenant si on arrive à accrocher Ariane directement à l'aide de coordonnées en la chargeant comme un tank
ou un srb d'atlantis;
est ce que le pilote automatique de multistage se mettra en route si on lance le main thruster
directement a partir du hermes.dll ? cest peut etre ça la question à poser à vinka
il ne resterais plus qu'a detecter la création du vaisseaux (facile getvesselbyname) pour detacher c qu'il reste d'ariane
d'hermes (cette fois a la maniére des srb d'atlantis).




Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #78 - 07 August 2006, 12:59:51
C'est ce que je pensais faire, cad charger le mesh global en tant que payload (jusque la, ça fonctionne). Puis, au
jettison, créer les 3 autres modules et leur meshs correspondant. Pour le chargement du mesh, pas de soucis.
C'est lorsque je tente de charger la dll que ca plante.
Bon, là, je suis au taf donc j'ai pas le code sous la main mais de tete en gros, je fais ça :

void hermes_tmp::jettison()
{
VESSELSTATUS vs;
VECTOR3 ofs = _V(0,0,0);
VECTOR3 vel = _V(0,0,0);

GetStatus (vs);                          --> c'est la que ça plante.

vs.eng_main = vs.eng_hovr = 0.0;

ofs = _V(0,0,0);
vel = _V(0,0,-0.1);

VECTOR3 rofs, rvel = {vs.rvel.x, vs.rvel.y, vs.rvel.z};
Local2Rel (ofs, vs.rpos);
GlobalRot (vel, rofs);

vs.rvel.x = rvel.x+rofs.x;
vs.rvel.y = rvel.y+rofs.y;
vs.rvel.z = rvel.z+rofs.z;

vs.vrot.x = 0.0;
vs.vrot.y = 0.0;
vs.vrot.z = 0.0;

oapiCreateVessel ("Hermes","hermes", vs);
SetMeshVisibilityMode(addMesh("hermes"),MESHVIS_ALWAYS);
}

Et j'appelle jettison par exemple à la fin de la méthode clbkSetClassCaps.

Et la je bloque car la compilation réussit mais lorsque je lache le paylaod, ça plante sous orbiter à cause cette méthode GetStatus quèi, je suppose est sensée récupérer les informations sur le module en cours (autrement dit, mon module composé de 3 meshs en 1) et finalement les affectée au nouveaux modules créé (après quelques petites modif).

Je suis pas trop inquiet sur le principe, en revanche je ne comprends pas trop pourquoi ça plante ! ;)



Message modifié ( 07-08-2006 13:03 )


Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #79 - 07 August 2006, 13:59:14
je ne connais pas le reste du code,
mais si tu lance cette instruction, dés le chargement de la dll
il y a de forte chance pour que tu tente de recupérer les statuts d'un vaisseaux qui n'existe pas encore
et qu'un
void hermes_tmp::jettison()
{
VECTOR3 ofs = _V(0,0,0);
VECTOR3 vel = _V(0,0,0);
vs.eng_main = vs.eng_hovr = 0.0;
ofs = _V(0,0,0);
vel = _V(0,0,-0.1);
VECTOR3 rofs, rvel = {vs.rvel.x, vs.rvel.y, vs.rvel.z};
Local2Rel (ofs, vs.rpos);
GlobalRot (vel, rofs);
vs.rvel.x = rvel.x+rofs.x;
vs.rvel.y = rvel.y+rofs.y;
vs.rvel.z = rvel.z+rofs.z;
vs.vrot.x = 0.0;
vs.vrot.y = 0.0;
vs.vrot.z = 0.0;
oapiCreateVessel ("Hermes","hermes", vs);
SetMeshVisibilityMode(addMesh("hermes"),MESHVIS_ALWAYS);
}

dans clbkPostStep
VESSELSTATUS vs;
if (GetStatus (vs))
jettison ;
}
comme ça t'est sur




Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #80 - 07 August 2006, 15:07:08
MErci, j'essaierai ca à l'occasion ! ;)



Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #81 - 07 August 2006, 19:28:38
Bon, j'ai retesté quelques trucs. Je sais détruire l'objet en cours (super dis je de manière ironique, ca m'aidera par la
suite mais la je m'en fou :) ), ca passe bien pour le getstatus (visiblement, ca plante pas).
Mais dès que je fais le oapiCreateVessel, plantage. Imposible de savoir pourquoi, la je sèche ! ;)
Pourtant, y'a pas de raison, c'st la méthode mployée dans les exemple que j'ai trouvé sur le net ... donc forcément,
j'ai du oublier quelque chose (personne n'est parfait ;) ) mmais quoi ...



Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #82 - 07 August 2006, 20:04:37
oapiCreateVesselEX ?




Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #83 - 07 August 2006, 20:26:35
Pas mieux ...



Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #84 - 07 August 2006, 22:03:02
Bon, bah je passe n mode pétage de plomb ;) Je capte que dalle, j'ai tout essayé (enfin pour moi) et j'ai même suivi
l'exemple d'atlantis qui créé les boosters de séparation sur le même principe et ya rien qui marche chez moi, ca plante
lors du oapicreatevessel (dsl, je me répète).
Donc, là, vu ou j'en suis, je reprend la dll de 0,en ajoutant chaque méthode une à une, et on verra bien.... Mais la, ca
me déprime ... bon, je sais qu'on maitrise pas le c++ du jour au lendemain, mais vu tout ce que j'arrive a faire, c
chiant de buter juste sur un point ... ;)



Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #85 - 08 August 2006, 00:55:31
t'as qu'a m'envoyer le tout que je regarde si j'y arrive




Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #86 - 08 August 2006, 12:25:35
Ok, je t'enverrai le code au propre ce soir, histoire de te donner une idée de ce que j'ai fait.
Si tu trouves, je t'en serais 1000 fois reconnaissant ! ;) Ca me permettra de faire beaucoup plus de choses qu'à
l'heure actuelle.



Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #87 - 08 August 2006, 22:25:12
Bon pendant un instant, j'ai cru ne pas avoir fait la bonne mise à jour d'obitersdk, mais ce n'était pas le cas. J'ai
envoyé mes sources à korben, on verra s'il trouve pourquoi ca ne marche pas ;)



Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #88 - 09 August 2006, 02:47:03
bon ben j'ai modifié quelques lignes de code  , j'ai pas de plantage, j'ai bien un hermes_tmp qui est créé aprés une
courte disparition bon ben je m'attendais a un hermes (tout court)
Alors j'ai eu l'idée de remplacer dans le hermes.ini de wariane5 tout les "hermes" par "Jetiscope"
un des chasseurs du sankukai qui fonctionne tres bien tout seul avec son dll.
j'ai donc une jolie ariane5 coiffée d'un jetiscope (le mesh de base à les ailes ouvertes) sur le pas de tir que je
m'empresse de lancer  1 2 3 stages plus tard , méme resultat celui ci disparait puis réapparais une 1/2 sconde plus
tard (cette fois avec les ailes fermées AH! le dll initialise les ailes en position fermées bien)
Mais , car il y a un mais, je n'ais absolument plus aucun controle sur le fameux jetiscope (pas de zoulis laser ...... plus
de mouvement d'ailes snif......) comme si le ddl etais planté ou du moins inactif, demain je vais essayer avec une cfg
spacecraft3 du stragire .... pour voir.
Car je subodore un probleme de structure de dll




Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #89 - 09 August 2006, 12:10:46
Alors je te rassures, ça marchait aussi pour moi ! ;) L'apparition de hermes_tmp après la petite disparition se faisait
bien ! ;) Seulement j'ai programmé la touche "1" pour que lorsque je presse dessus, orbiter me crée hermès
(chargement de la dll et création du mesh) pour test. Sachant que si ca marche, le but est de charger hermès,
hermès_mrh (module de ressources) et hermes_mph (module propulseur) en chargeant les dll et en créant leurs
meshs, et en supprimant hermes_tmp car je veux que celui ci servent uniqument de meshs de payload (pour le
lancement). Tu vois ce que je veux dire ?

En résumé, je veux un meshs de départ avec une dll toute simple (sans anim, sans rien du tout) pour le payload
(décollage et mise en orbite). (la ça marche bien ! ;) )

Et au jettison, une méthode qui me crée les 3 meshs et charge les 3 dll (anim et tout le tralala) pour mes 3 modules
distinct (et c'est justement ça qui merde) et qui efface hermes_tmp (ca c'est bon par contre).

Pour ton test avec le jetiscope, tu as du garder hermes_tmp pour le module defini dans le .ini donc, forcément pas
d'anim .... je suppose



Post Edited ( 08-09-06 12:21 )


Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #90 - 09 August 2006, 12:42:52
non justement, je l'ai chargé directement (pas de hermes_tmp) c'est ça qui m'inquiéte




Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #91 - 09 August 2006, 13:01:05
donc c'est normal... dans la doc multistage, si tu ne précise pas de module (dll), il crée un vaisseau standard
(probablement de type spacecraft mais sans rien de spécifié) ... donc c'est normal de ne pas avoir d'anim ;)



Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #92 - 09 August 2006, 13:38:33

[PAYLOAD_1]
off=(0.,0.,27)
MeshName="Jetiscope"
name=Jetiscope
Module=Jetiscope
Diameter=3
Height=2
Mass=20000.
rot_speed=0

c'est bien ça !




Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #93 - 09 August 2006, 14:10:41
bon j'ai modifié le code de hermes_tmp.cpp comme ça



#define ORBITER_MODULE

#include "hermes_tmp.h"
#include <stdio.h>
#include "math.h"

// ==============================================================
// parametres du vaisseau comme dans spacecraft
// ==============================================================
const double PB_FUELMASS = 2000.0;
const double PB_ISP = 5e5;
const double PB_MAXMAINTH = 1e7;
const double PB_MAXRETROTH = 99e5;
const double PB_MAXHOVERTH = 16e5;
const double PB_MAXRCSTH = 4e5;
const double SAS_OPERATING_SPEED = 0.08;// vitesse animation SAS
const double GEAR_OPERATING_SPEED = 0.20;// vitesse animation TRAIN
const double ATTCH_ROT = 1;
const double dL = 0.0;
const double dF = 0.0;
const double dU = 0.0;
OBJHANDLE ht;
const VECTOR3 OFS_hermes      = { 0.0,-1.91, 5.72 }; //j'ai rajouté ça, mais les positions sont pas bonnes
   

// ==============================================================
// Global (class-wide) parameters

struct {
   HINSTANCE hDLL;
} g_Param;

// Calculate lift coefficient [Cl] as a function of aoa (angle of attack) over -Pi ... Pi
double LiftCoeff (double aoa)
   {
   const int nlift = 9;
   static const double AOA[nlift] = {-180*RAD,-60*RAD,-30*RAD,-
1*RAD,15*RAD,20*RAD,25*RAD,60*RAD,180*RAD};
   static const double CL[nlift]  = {       0,      0,   -0.1,     0,   0.2,  0.25,   0.2,     0,      0};
   static const double SCL[nlift] = {(CL[1]-CL[0])/(AOA[1]-AOA[0]), (CL[2]-CL[1])/(AOA[2]-AOA[1]),
                                    (CL[3]-CL[2])/(AOA[3]-AOA[2]), (CL[4]-CL[3])/(AOA[4]-AOA[3]),
                             (CL[5]-CL[4])/(AOA[5]-
AOA[4]), (CL[6]-CL[5])/(AOA[6]-AOA[5]),
                             (CL[7]-CL[6])/(AOA[7]-
AOA[6]), (CL[8]-CL[7])/(AOA[8]-AOA[7])};
   for (int i = 0; i < nlift-1 && AOA[i+1] < aoa; i++);
   return CL + (aoa-AOA)*SCL;
   }

// ==============================================================
// hermes_tmp constructeur
// ==============================================================

hermes_tmp::hermes_tmp (OBJHANDLE hVessel, int flightmodel): VESSEL2 (hVessel, flightmodel)
   {
   
   }
void hermes_tmp::Addhermes (const VECTOR3 &ofs) // et ça aussi
{
   hermesMesh = oapiLoadMeshGlobal ("hermes");
   UINT meshidx;
   meshidx = AddMesh (hermesMesh, &ofs);
   SetMeshVisibilityMode (meshidx, MESHVIS_ALWAYS);
}
   
void hermes_tmp::jettison()
   {   
   VESSELSTATUS2 vs;
   VESSELSTATUS2::FUELSPEC fuel;
   VESSELSTATUS2::THRUSTSPEC thrust;
   memset (&vs, 0, sizeof(vs));
   vs.version = 2;
   GetStatusEx (&vs);
   vs.flag = VS_FUELLIST | VS_THRUSTLIST;
   vs.fuel = &fuel;
   vs.nfuel = 1;
   vs.fuel->idx = 0;
   vs.thruster = &thrust;
   vs.nthruster = 1;
   vs.thruster->idx = 0;

   Local2Rel (_V(0,0,2), vs.rpos);
   vs.arot.z += 0.25*PI;
   vs.status = 0;
   oapiDeleteVessel(ht,0);
   oapiCreateVesselEx ("hermes", "hermes", &vs);
   Addhermes    (OFS_hermes);
   }
   
// --------------------------------------------------------------
// mise a jour graphique
// --------------------------------------------------------------
void hermes_tmp::clbkPostStep (double simt, double simdt, double mjd)
   {

   }

// --------------------------------------------------------------
// Capacités du vaisseaux
// --------------------------------------------------------------
void hermes_tmp::clbkSetClassCaps (FILEHANDLE cfg)
   {
   // méme que [config] de spacecraft
   SetSize (5.0);
   SetEmptyMass (10000.0);
   
   //SetCW (double cw_z_pos, double cw_z_neg, double cw_x, double cw_y) const
   SetCW (0.3, 0.3, 0.6, 0.9);

   SetWingAspect (0.7);
   SetWingEffectiveness (2.5);
   SetCrossSections (_V(403.0,1767.9,323.7));
   SetRotDrag (_V(5.0,1.5,1.5));
   
   if (GetFlightModel() >= 1)
      {
      SetPitchMomentScale (5e-5);
      SetBankMomentScale (5e-5);
      }

   SetPMI (_V(15.5,22.1,7.7));
   SetTrimScale (0.05);
   
   //=================
   //definis la camera
   //=================
   SetCameraOffset (_V(-0.25,1.67,18.5));
   SetCameraDefaultDirection (_V(0,0,1));
   SetCameraRotationRange (RAD*360, RAD*360, RAD*70, RAD*70);
   SetCameraShiftRange (_V(0,0,0.1), _V(-0.2,0,0), _V(0,0,0));

   SetLiftCoeffFunc (LiftCoeff);
   SetDockParams (_V(0,0,-13.794), _V(0,-1,0), _V(0,0,-1));

   //       LAND_PT 1 - 2 - 3
   SetTouchdownPoints (_V(0,-5.73,10), _V(-10,-5.73,-10), _V(10,-5.73,-10));

   //tout est visible
   SetMeshVisibilityMode (AddMesh ("hermes_tmp"), MESHVIS_ALWAYS);

   }

// --------------------------------------------------------------
// Controle clavier
// --------------------------------------------------------------
int hermes_tmp::clbkConsumeBufferedKey (DWORD key, bool down, char *kstate)
   {
   if (!down)
      return 0;    // seulement touches enfoncées SetCameraOffset (_V(0.5,-3,14));

   switch (key)
      {
      case OAPI_KEY_1: //
         jettison();
         return 1;
      }
   return 0;
   }

// --------------------------------------------------------------
// Final initialisation steps
// --------------------------------------------------------------
void hermes_tmp::clbkPostCreation ()
   {
   }

// --------------------------------------------------------------
//initialisation
// --------------------------------------------------------------
DLLCLBK VESSEL *ovcInit (OBJHANDLE hvessel, int flightmodel)
   {
   ht = hvessel;
   return new hermes_tmp (hvessel, flightmodel);
   }

// --------------------------------------------------------------
// destructeur
// --------------------------------------------------------------
DLLCLBK void ovcExit (VESSEL *vessel)
   {
   if (vessel) delete (hermes_tmp*)vessel;
   }


quand je remplace toutes les references a hermes par jetiscope ça marche le jetiscope apparait mais sans animations
par contre ses lasers marchent, normal puisque ils sont présisés dans vs.thruster
fait l'essai.
quand je laisse hermes, ça plante orbiter et quand je regarde le log il plante sur des defauts de chargement de
textures
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: hermes.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: esa1.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: drapeau.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: cnes.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: PANNEA~1.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: dock.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: PLAQUE~1.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: hermes.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: esa1.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: drapeau.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: cnes.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: PLAQUE~1.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: hermes.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: esa1.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: drapeau.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
>>> ERROR: Missing texture: cnes.dds
>>>        [C:\Source\Orbiter\Texture.cpp / 781]
mais , ça doit pas venir de la, donc en theorie le hermes_cpp ci dessus doit fonctionner(puis qu'il marche avec le
jetiscope
maintenant je vais regarder le hermes.cpp, il doit y avoir une erreur dedans




Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #94 - 09 August 2006, 19:56:41
C'est bon, j'ai trouvé korben, merci pour ton aide, mais mon code était bon lol ! En fait, il fallait que mon fichier
hermes.cfg soit vide !!! (comme pour le deltaglider !! ;) C'était vraiment trop bête !! ;)
Mais je suis content, photo bientôt !! ;)
Merci néanmoins pour ton aide korben ! ;)



Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #95 - 09 August 2006, 20:00:40
ok je confirme le code hermes_tmp.cpp que j'ai posté prédement fonctionne parfaitement avec le jetiscope, sauf les
animations.

je regarde pourquoi les anims et le hermes.cpp ne marchent pas




Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #96 - 09 August 2006, 20:12:37
je veux dire, meme mon oapicreatevessel fonctionne.



Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #97 - 09 August 2006, 20:23:17
oui mais les anims ?en fait chez moi ça plantais avec hermes simplement parceque j'ai pas le "hermes_mrh"




Offline brainstorm

  • Legend
  • ******
  • Posts: 2694
  • Karma: 0
Reply #98 - 09 August 2006, 21:43:30
ok je comprends. Mais  normalement, tu as vu que j'avais définis les anims pour hermès. Donc, c'est bizarre que tu ne
les ai pas animée ... ;)



Offline korben62

  • Hero Member
  • *****
  • Posts: 561
  • Karma: 0
Reply #99 - 09 August 2006, 23:40:38
celles du jetiscope sont definies aussi, et chez toi ça marche avec  hermes complet ?