0 Members and 1 Guest are viewing this topic.
void VenusExpress::vPitchUp (void){ VECTOR3 Angle={0}; GetAngularVel (Angle); Angle.x+=10; SetAngularVel (Angle);}
case OAPI_KEY_NUMPAD2: vPitchUp (); return 1;
SetAngularVel(AngularVel);if (Guidance.bPitchUp){ GetAngularVel(AngularVel); AngularVel.x-=0.1; SetAngularVel (AngularVel);} GetAngularVel(AngularVel);
VECTOR3 vAngularVel={0.05,0,0};SetAngularVel (vAngularVel);
if(HeadingMaintenant<HeadingVoulu) // notre nez pointe trop a gauche{ VECTOR3 vAngularVel={0,0.05,0}; // une vitesse angulaire constante de rotation vers la droite SetAngularVel (vAngularVel);}else // notre nez pointe trop a droite{ VECTOR3 vAngularVel={0,-0.05,0}; // une vitesse angulaire constante de rotation vers la gauche SetAngularVel (vAngularVel);}
dVitesseRotationAxeY=min(0.05,max(-0.05,dVitesseRotationAxeY);
MartySpaceLines a écrit:- T'es sur qu'il y a de l'inertie avec des gyroscopes?? (te marres pas, je suis un bleu du domaine)
MartySpaceLines a écrit:- Comment peut-on faire en sorte qu'imfd par exemple reconnaisse cela??
MartySpaceLines a écrit:Merci pour ces réponsesJuste...c quoi qui se passe lorsqu'on entend le bruit des rcs, mais que ceux-cis n'agissent pas??Je crois que j'ai un peu trop bidouillé angularvel.Dans le scenarioeditor, elle vaut toujours 1.#QNAN0.j'ai un peu googelé la dessus et j'ai trouvé que c'était un truc du c++ (p.ex retour d'un double lorsqu'on attend un int ouqqch comme ca)Je me damande s'il reste pas des traces de setangularvel dans le code
MartySpaceLines a écrit:Je truc spécial, c'est que les rcs translation fonctionnent au poil...c'est juste la rotation qui pose problème!
1.#QNAN0
Tu peux desactiver ce son avec OrbiterSound
#ifndef __VENUSEXPRESS_H#define __VENUSXPRESS_H#include "orbitersdk.h" #include "OrbiterSoundSDK35.h"#include "SaveRestoreScenario.h"////////////////////////////////////////////////////////////////Quelques constantes de VenusExpress//////////////////////////////////////////////////////////////const double VE_FUELMASS = 7.5e2;const double VE_ISP = 2943;const double VE_MAXMAINTH = 4.15e2;const double VE_MAXRCSTH = 1.0e1;class VenusExpress: public VESSEL2 {public: enum animStatut {ANIM_CLOSED, ANIM_OPEN, ANIM_CLOSING, ANIM_OPENING} ant_statut, arr_statut, arrRot_statut;//Statuts des anims VenusExpress (OBJHANDLE hObj, int fmodel); //Callbacks d'Orbiter void clbkSetClassCaps (FILEHANDLE cfg); void clbkPostStep (double simt, double simdt, double mjd); int clbkConsumeBufferedKey (DWORD key, bool down, char *keystate); void clbkSaveState (FILEHANDLE scn); void clbkLoadStateEx (FILEHANDLE scn, void *status); void clbkPostCreation (void); SaveRestoreScenario Scn; // handle de la classe int MyID; //ID du vaisseau pour OrbiterSound void vDefineAnimations (void); void vAnimAntenne (void); void vAnimDeployArray (void); void vAnimRotateArray (void); ~VenusExpress (void);private: UINT anim_ant, anim_arr, anim_arrRot, anim_ArrayLeft1, anim_ArrayLeft2, anim_ArrayLeft3, anim_ArrayLeft4, anim_ArrayRight1,anim_ArrayRight2, anim_ArrayRight3, anim_ArrayRight4; double ant_proc, arr_proc, arrRot_proc; MGROUP_ROTATE *ArrayLeft1, *ArrayLeft2, *ArrayLeft3, *ArrayLeft4, *ArrayRight1, *ArrayRight2, *ArrayRight3, *ArrayRight4;};#endif // !__VENUSEXPRESS_H#define SafeDelete(a) { if (a) {delete a; a = NULL; }}
#include "VenusExpress.h"void VenusExpress::clbkSetClassCaps (FILEHANDLE cfg){ //Sauvegarde des variables des anims Scn.InitClass (); Scn.SavedVariable ("ANTENNA", &ant_proc); Scn.SavedVariable ("ARRAYS", &arr_proc); Scn.SavedVariable ("ARRAYSROT", &arrRot_proc); vDefineAnimations (); SetSize (0.5); SetEmptyMass (700); SetCW (0.3, 0.3, 0.6, 0.9); SetCrossSections (_V(0.2,0.21,0.22)); SetPMI (_V(0.04, 0.0, 0.0)); SetCameraOffset (_V(0,0,0)); SetTouchdownPoints (_V(0,-0.2,-0.24), _V(-0.2,0.2,-0.24), _V(0.2,0.2,-0.24)); AddMesh ("VenusExpress"); PROPELLANT_HANDLE hpr = CreatePropellantResource (VE_FUELMASS, 1); THRUSTER_HANDLE th_main, th_rcs[8], th_gyro[2]; th_main = CreateThruster (_V(0,0,-0.8), _V(0,0,1), VE_MAXMAINTH, hpr, VE_ISP); CreateThrusterGroup (&th_main, 1, THGROUP_MAIN); AddExhaust (th_main, 2, 0.1); th_gyro[0] = CreateThruster (_V(0,1,0), _V(0,0,-1), VE_MAXRCSTH, hpr, VE_ISP); th_gyro[1] = CreateThruster (_V(0,-1,0), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); CreateThrusterGroup (th_gyro, 2, THGROUP_ATT_PITCHUP); th_rcs[0] = CreateThruster (_V(-0.76,0.76,-0.8), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[1] = CreateThruster (_V(0.76,0.76,-0.8), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[2] = CreateThruster (_V(-0.76,-0.76,-0.8), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[3] = CreateThruster (_V(0.76,-0.76,-0.8), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[4] = CreateThruster (_V(-0.68,0.68,-0.8), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[5] = CreateThruster (_V(0.68,0.68,-0.8), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[6] = CreateThruster (_V(-0.68,-0.68,-0.8), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[7] = CreateThruster (_V(0.68,-0.68,-0.8), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); CreateThrusterGroup (th_rcs, 8, THGROUP_ATT_FORWARD); AddExhaust (th_rcs[0], 0.3, 0.02); AddExhaust (th_rcs[1], 0.3, 0.02); AddExhaust (th_rcs[2], 0.3, 0.02); AddExhaust (th_rcs[3], 0.3, 0.02); AddExhaust (th_rcs[4], 0.3, 0.02); AddExhaust (th_rcs[5], 0.3, 0.02); AddExhaust (th_rcs[6], 0.3, 0.02); AddExhaust (th_rcs[7], 0.3, 0.02); }
#include "VenusExpress.h"void VenusExpress::clbkPostStep (double simt, double simdt, double mjd){ if (ant_statut >= ANIM_CLOSING) { double da = simdt * 0.5; if (ant_statut == ANIM_CLOSING) { if (ant_proc > 0.0) ant_proc = max (0.0, ant_proc-da); else ant_statut = ANIM_CLOSED; } else { if (ant_proc < 1.0) ant_proc = min (1.0, ant_proc+da); else ant_statut = ANIM_OPEN; } SetAnimation (anim_ant, ant_proc); } if (arr_statut >= ANIM_CLOSING) { double da = simdt * 0.05; if (arr_statut == ANIM_CLOSING) { if (arr_proc > 0.0) arr_proc = max (0.0, arr_proc-da); else arr_statut = ANIM_CLOSED; } else { if (arr_proc < 1.0) arr_proc = min (1.0, arr_proc+da); else arr_statut = ANIM_OPEN; } SetAnimation (anim_arr, arr_proc); } if (arrRot_statut >= ANIM_CLOSING) { double da = simdt * 0.5; if (arrRot_statut == ANIM_CLOSING) { if (arrRot_proc > 0.0) arrRot_proc = max (0.0, arrRot_proc-da); else arrRot_statut = ANIM_CLOSED; } else { if (arrRot_proc < 1.0) arrRot_proc = min (1.0, arrRot_proc+da); else arrRot_statut = ANIM_OPEN; } SetAnimation (anim_arrRot, arrRot_proc); }}
#include "VenusExpress.h"int VenusExpress::clbkConsumeBufferedKey(DWORD key, bool down, char *kstate){ if (!down) return 0; else { switch (key) { case OAPI_KEY_A: vAnimAntenne (); return 1; case OAPI_KEY_G: vAnimRotateArray(); return 1; case OAPI_KEY_K: vAnimDeployArray (); return 1; } }return 0;}
#include "VenusExpress.h"////////////////////////////////////////////////////////////////Déclaration des animations//////////////////////////////////////////////////////////////void VenusExpress::vDefineAnimations (void){ //Anim de l'antenne static UINT uAntenne = 5; static MGROUP_ROTATE Antenne (0, &uAntenne, 1, _V(0,-0.18,0.62), _V(1,0,0), (float)(RAD*90)); anim_ant = CreateAnimation (0.0); AddAnimationComponent (anim_ant, 0, 1, &Antenne); //Anim panneaux solaires (PARENT) anim_arr = CreateAnimation (0.0); ANIMATIONCOMPONENT_HANDLE parentLeft, parentRight; //Anim panneaux solaires (GAUCHE) static UINT uArrayLeft1 = 0; ArrayLeft1 = new MGROUP_ROTATE (0, &uArrayLeft1, 1, _V(-0.8379773,0,0.378131), _V(0,1,0), (float)(RAD*90)); anim_ArrayLeft1 = CreateAnimation (0.0); parentLeft = AddAnimationComponent (anim_arr, 0, 0.5, ArrayLeft1); static UINT uArrayLeft2 = 1; ArrayLeft2 = new MGROUP_ROTATE (0, &uArrayLeft2, 1, _V(-0.8526793,0,-0.2022336), _V(0,-1,0), (float)(RAD*180)); anim_ArrayLeft2 = CreateAnimation (0.0); parentLeft = AddAnimationComponent (anim_arr, 0, 0.5, ArrayLeft2, parentLeft); static UINT uArrayLeft3 = 8; ArrayLeft3 = new MGROUP_ROTATE (0, &uArrayLeft3, 1, _V(-0.8821518,0,0.5579591), _V(0,1,0), (float)(RAD*180)); anim_ArrayLeft3 = CreateAnimation (0.0); parentLeft = AddAnimationComponent (anim_arr, 0, 0.5, ArrayLeft3, parentLeft); static UINT uArrayLeft4 = 7; ArrayLeft4 = new MGROUP_ROTATE (0, &uArrayLeft4, 1, _V(-0.9117209,0,-0.20223367), _V(0,-1,0), (float)(RAD*180)); anim_ArrayLeft4 = CreateAnimation (0.0); parentLeft = AddAnimationComponent (anim_arr, 0, 0.5, ArrayLeft4, parentLeft); //Anim panneaux solaires (DROITE) static UINT uArrayRight1 = 2; ArrayRight1 = new MGROUP_ROTATE (0, &uArrayRight1, 1, _V(0.8379773,0,0.378131), _V(0,-1,0), (float)(RAD*90)); anim_ArrayRight1 = CreateAnimation (0.0); parentRight = AddAnimationComponent (anim_arr, 0, 0.5, ArrayRight1); static UINT uArrayRight2 = 3; ArrayRight2 = new MGROUP_ROTATE (0, &uArrayRight2, 1, _V(0.8526793,0,-0.2022336), _V(0,1,0), (float)(RAD*180)); anim_ArrayRight2 = CreateAnimation (0.0); parentRight = AddAnimationComponent (anim_arr, 0, 0.5, ArrayRight2, parentRight); static UINT uArrayRight3 = 9; ArrayRight3 = new MGROUP_ROTATE (0, &uArrayRight3, 1, _V(0.8821518,0,0.5579591), _V(0,-1,0), (float)(RAD*180)); anim_ArrayRight3 = CreateAnimation (0.0); parentRight = AddAnimationComponent (anim_arr, 0, 0.5, ArrayRight3, parentRight); static UINT uArrayRight4 = 10; ArrayRight4 = new MGROUP_ROTATE (0, &uArrayRight4, 1, _V(0.9117209,0,-0.20223367), _V(0,1,0), (float)(RAD*180)); anim_ArrayRight4 = CreateAnimation (0.0); parentRight = AddAnimationComponent (anim_arr, 0, 0.5, ArrayRight4, parentRight); //Anim panneaux (ROTATION DE BASE) static UINT uGrpArrays[8] = {0,1,2,3,7,8,9,10}; static MGROUP_ROTATE Arrays (0, uGrpArrays, 8, _V(0,0,0.3779513), _V(-1,0,0), (float)(RAD*90)); AddAnimationComponent (anim_arr, 0.55, 1, &Arrays); //Anim rotation des panneaux (oriantation vers le soleil) anim_arrRot = CreateAnimation (0.0); static MGROUP_ROTATE RotateArrays (0, uGrpArrays, 8, _V(0,0,0.3779513), _V(-1,0,0), (float)(RAD*45)); AddAnimationComponent (anim_arrRot, 0, 1, &RotateArrays);}//////////////////////////////////////////////////////////////////Anim antenne//////////////////////////////////////////////////////////////void VenusExpress::vAnimAntenne (void){ ant_statut = ((ant_statut == ANIM_CLOSED || ant_statut == ANIM_CLOSING) ? ANIM_OPENING : ANIM_CLOSING);}//////////////////////////////////////////////////////////////////Anim déploiement des panneaux//////////////////////////////////////////////////////////////void VenusExpress::vAnimDeployArray(void){ if (arrRot_statut == ANIM_CLOSED) { arr_statut = ((arr_statut == ANIM_CLOSED || arr_statut == ANIM_CLOSING) ? ANIM_OPENING : ANIM_CLOSING); }}//////////////////////////////////////////////////////////////////Anim rotation des panneaux//////////////////////////////////////////////////////////////void VenusExpress::vAnimRotateArray(void){ if (arr_statut == ANIM_OPEN)//On ne peut pas rotationner les panneaux s'ils ne sont pas déployés { arrRot_statut = ((arrRot_statut == ANIM_CLOSED || arrRot_statut == ANIM_CLOSING) ? ANIM_OPENING : ANIM_CLOSING); }}
#define STRICT#define ORBITER_MODULE#include "VenusExpress.h"VenusExpress::VenusExpress (OBJHANDLE hObj, int fmodel) : VESSEL2 (hObj, fmodel){ ant_proc = 0; ant_statut = ANIM_CLOSED; arr_proc = 0; arr_statut = ANIM_CLOSED; arrRot_proc = 0; arrRot_statut = ANIM_CLOSED; vDefineAnimations ();} // --------------------------------------------------------------// Vessel initialisation// --------------------------------------------------------------DLLCLBK VESSEL *ovcInit (OBJHANDLE hvessel, int flightmodel){ return new VenusExpress (hvessel, flightmodel);}// --------------------------------------------------------------// Vessel cleanup// --------------------------------------------------------------DLLCLBK void ovcExit (VESSEL *vessel){ if (vessel) delete (VenusExpress*)vessel; }VenusExpress::~VenusExpress (void){ SafeDelete(ArrayLeft1); SafeDelete(ArrayLeft2); SafeDelete(ArrayLeft3); SafeDelete(ArrayLeft4); SafeDelete(ArrayRight1); SafeDelete(ArrayRight2); SafeDelete(ArrayRight3); SafeDelete(ArrayRight4);}
#include "VenusExpress.h"void VenusExpress::clbkPostCreation(){ MyID=ConnectToOrbiterSoundDLL3(GetHandle()); SoundOptionOnOff3(MyID,PLAYATTITUDETHRUST,FALSE);}
#include "VenusExpress.h"void VenusExpress::clbkLoadStateEx (FILEHANDLE scn, void *vs){ char *line; while (oapiReadScenario_nextline (scn, line)) { if(Scn.LoadScenario (line) == TRUE) continue; ParseScenarioLineEx (line, vs); } SetAnimation (anim_ant, ant_proc); SetAnimation (anim_arr, arr_proc); SetAnimation (anim_arrRot, arrRot_proc);}void VenusExpress::clbkSaveState (FILEHANDLE scn){ VESSEL2::clbkSaveState (scn); Scn.SaveScenario (scn);}
th_rcs[0] = CreateThruster (_V(-0.76,0.76,-0.8 ), _V(0,0,1),VE_MAXRCSTH, hpr, VE_ISP); th_rcs[1] = CreateThruster (_V(0.76,0.76,-0.8 ), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[2] = CreateThruster (_V(-0.76,-0.76,-0.8 ), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[3] = CreateThruster (_V(0.76,-0.76,-0.8 ), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[4] = CreateThruster (_V(-0.68,0.68,-0.8 ), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[5] = CreateThruster (_V(0.68,0.68,-0.8 ), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[6] = CreateThruster (_V(-0.68,-0.68,-0.8 ), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP); th_rcs[7] = CreateThruster (_V(0.68,-0.68,-0.8 ), _V(0,0,1) , VE_MAXRCSTH, hpr, VE_ISP);
DanSteph a écrit:La il poussent tous en +Z _V(0,0,1)Tu dois avoir des x,-x,y,-y,z,-z (_V(-1,0,0) etc etc )Regarde sur le PBDan
th_gyro[0] = CreateThruster (_V(0,1,0), _V(0,0,-1), VE_MAXRCSTH, hpr, VE_ISP);th_gyro[1] = CreateThruster (_V(0,-1,0), _V(0,0,1), VE_MAXRCSTH, hpr, VE_ISP);CreateThrusterGroup (th_gyro, 2, THGROUP_ATT_PITCHUP);