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: [c++]bouclier et rentrée (encore)  (Read 1786 times)

0 Members and 1 Guest are viewing this topic.

Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
31 August 2007, 14:41:56
Toujours sur la rentrée de la capsule du CTV, j'ai réussi à changer les textures (merci à ceux qui se reconnaissent ;) ).
J'essaie maintenant de faire un effet de bouclier rougeoyant à cause de la chaleur.
 
L'idée est de rajouter un mesh, un peu la même méthode que le DGIV mais pas exactement car j'espérais me passer
de couche alpha.

En gros voilà, l'histoire en c++ avec un résultat qui me surprend un peu:
In the PostStep:
Code: [Select]
           if (GetAltitude()<54000)
            {SetMeshVisibilityMode (InsertMesh (bouclier,3,&ofsr),MESHVIS_EXTERNAL);}
            if ((ReentryShieldMeshVisual != 0) & (54000>GetAltitude()) & (GetAltitude()>40000))
{
oapiSetMeshProperty (ReentryShieldMeshVisual,MESHPROPERTY_MODULATEMATALPHA,1);
double opacity = myformula ;
MATERIAL *mat = oapiMeshMaterial (ReentryShieldMeshVisual, 0);
mat->diffuse.a  *= opacity;
mat->ambient.a  *= opacity;
mat->specular.a *= opacity;
mat->emissive.a *= opacity;
}
            if (GetAltitude()<30000)
            {DelMesh(3);}

dans VisualCreated:
Code: [Select]
ReentryShieldMeshVisual= GetMesh(vis,3);et dans le Destroyed
Code: [Select]
ReentryShieldMeshVisual=0;Les VISHANDLE et MESHHANDLE sont bien présents dans le .h.
myformula passe de 0.0 à 1.0 entre 54 et 40Km et evidemment les GetAltitude() sont à remplacer (y'a une formule
pour détecter la phase "enflammée" de la rentrée dans un des pdf du SDK il me semble...), là c'est total WIP, mal
écrit et en cours de....
.

Le résultat est bien mitigé vu qu'il ne se passe rien :badsmile: (si je change le focus afin de détruire puis recréer le
visuel, la capsule réapparait mais sans son bouclier signe que les .a sont passés à zéro ????)

J'ai eu l'idée de passer la modif des alpha (edité) de clbkPoststep à clbkVisualcreated. Il ne se passe rien bien sûr mais si je change le focus et que je reviens sur ma capsule, le bouclier réapparait et si je répète l'opération il est à chaque fois de plus en plus "chaud" (signe que les .a sont bien passés de 0 à +).

Peut-être vaudrait-il mieux que je charge le mesh dans la clbkSetClassCaps (MESHVIS_NEVER) et que je change juste
le NEVER en EXTERNAL dans clbkPostStep.

Me serai-je engagé sur une voie futile? clbkPreStep peut-être? J'suis perdu :help:



Message modifié ( 31-08-2007 15:50 )

------------

no matter.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #1 - 31 August 2007, 15:08:52
Quote
no matter a écrit:
Peut-être vaudrait-il mieux que je charge le mesh dans la clbkSetClassCaps (MESHVIS_NEVER) et que je change juste
le NEVER en EXTERNAL dans clbkPostStep.

Déjà ca c'est une bonne idée, ca évite un accès disque.

Code: [Select]
           if (GetAltitude()<54000)
            {SetMeshVisibilityMode (InsertMesh (bouclier,3,&ofsr),MESHVIS_EXTERNAL);}

La tu insere le mesh à chaque image, pas génial... utilise un flag BOOL

Pseudo Code:
Code: [Select]
if(!bBouclierVisible)
{
     RendVisible
   bBouclierVisible=TRUE
}

Je ferais pas dépendre l'apparition/disparition de l'atitude mais de la valeur "temperature" (alpha du mesh) calculée
tu peux restreindre le calcul à une altitude (en dessous de 200km aucune chance d'avoir un bouclier)

clbkPostStep c'est pas le prob...

Devrais pas y avoir un 1 la ?
oapiSetMeshProperty (hMeshReentryShield,MESHPROPERTY_MODULATEMATALPHA,1);

A remettre à zéro quand tu veux plus le bouclier sinon tu a le bug "soleil" tout le temp (soleil qui disparait)

Dan


Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #2 - 31 August 2007, 16:27:21
Quote
oapiSetMeshProperty (hMeshReentryShield,MESHPROPERTY_MODULATEMATALPHA,1);
A remettre à zéro quand tu veux plus le bouclier sinon tu a le bug "soleil" tout le temp (soleil qui disparait)
Oui, merci, çà m'évite encore une surprise de plus (j'en ai eu avec le HUD, HBRUSH et FONT...)

BOOL, j'y pense jamais >_<

Quote
Devrais pas y avoir un 1 la ?
Où çà :???:

Quote
Je ferais pas dépendre l'apparition/disparition de l'atitude mais de la valeur "temperature" (alpha du mesh)
calculée tu peux restreindre le calcul à une altitude (en dessous de 200km aucune chance d'avoir un bouclier)
Très bonne idée, merci.

Avec tout çà, ce sera vraiment plus sain, merci ;)


------------

no matter.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #3 - 06 October 2007, 05:10:18
Dites donc Msieur ... :pfff:
Vous faites de la rétention d'informations.
Elle est ou Ty formula ? :badsmile:


Pic

Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #4 - 06 October 2007, 09:29:43
Mi formula es fantastico...mais je ne sais même plus où elle est passée celle-là (çà ne devait pas marcher).
Le code a fini ainsi:
Code: [Select]
if ((ReentryShieldMeshVisual != 0)) //&& (reentrystream))
{
oapiSetMeshProperty (ReentryShieldMeshVisual,MESHPROPERTY_MODULATEMATALPHA,1);
MATERIAL *mat = oapiMeshMaterial (ReentryShieldMeshVisual, 0);
CriminalMath();
mat->diffuse.a  = opacity;
mat->ambient.a  = opacity;
mat->specular.a = opacity;
mat->emissive.a = opacity;
}
CriminalMath?  Si le flux aérodynamique (HeatFlux) dépasse un certain seuil, le bouclier rougit.
En dessous de ce seuil il se refroidi et cesse d'être incandescent. Rien de sorcier:

double HeatFlux = 0.5*(GetAtmDensity()*(GetAirspeed()*GetAirspeed()*GetAirspeed())); *
Pour les valeurs, sa dépend de ton vaisseaux (masse), la partie enflammée de la rentrée débute
entre 550 et 650 Kw/m².

avec Math.h, çà évite d'avoir à écrire GetAirspeed trois fois :)


------------

no matter.

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #5 - 06 October 2007, 16:35:36
CriminalMath !!! :lol:
Meurchi beaucoup ... c'est simple effectivement.
J'imaginais déjà un calcul de la mort qui tue :pfff:


« Last Edit: 06 October 2007, 16:35:36 by picto »
Pic