/*************************************************************************************************************************************/ /* */ /* T R A C E D E S F A C E S A P P A R E N T E S D ' U N C U B E : */ /* */ /* */ /* Definition des couleurs utilisees : */ /* */ /* */ /* + */ /* + + */ /* + + */ /* + + */ /* + + */ /* | + + | */ /* | + + | */ /* | + + | */ /* | + | */ /* | | | */ /* | | | */ /* | | | */ /* + | + */ /* + | + */ /* + | + */ /* + | + */ /* + */ /* */ /* */ /* Author of '$xrd/cube.02$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 1994??????????). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* I N T E R F A C E ' listG ' : */ /* */ /* */ /* :Debut_listG: */ /* :Fin_listG: */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* D I R E C T I V E S S P E C I F I Q U E S D E C O M P I L A T I O N : */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* F I C H I E R S D ' I N C L U D E S : */ /* */ /*************************************************************************************************************************************/ #include INCLUDES_BASE /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #define COTE \ DEUX \ /* Definition du nombre d'unites sur un cote. */ #define G1 \ Bblock \ DO(COTE \ ,BLOC(g1;) \ ); \ Eblock #define G2 \ Bblock \ DO(COTE \ ,BLOC(g2;) \ ); \ Eblock #define G3 \ Bblock \ DO(COTE \ ,BLOC(g3;) \ ); \ Eblock #define G4 \ Bblock \ DO(COTE \ ,BLOC(g4;) \ ); \ Eblock #define G5 \ Bblock \ DO(COTE \ ,BLOC(g5;) \ ); \ Eblock #define G6 \ Bblock \ DO(COTE \ ,BLOC(g6;) \ ); \ Eblock #define GENERE_SIGLE(taux_de_depth_cueing) \ Bblock \ DEFV(Float,INIT(Z_minimum,FLOT__UNDEF)); \ DEFV(Float,INIT(Z_maximum,FLOT__UNDEF)); \ /* Pour le "depth-cueing". */ \ CALS(Iinit_Z_Buffer()); \ /* Initialisation standard du 'Z-Buffer'... */ \ SET_ANTI_ALIASING(VRAI); \ SET_COULEURS(NOIR,BLANC); \ INITIALISATION_SYSTEMATIQUE_TRANSFORMATION; \ \ SK(8); \ /* Definition de l'echelle globale. */ \ SX(8); \ /* Definition de l'echelle sur l'axe des 'X'. */ \ SY(8); \ /* Definition de l'echelle sur l'axe des 'Y'. */ \ SZ(8); \ /* Definition de l'echelle sur l'axe des 'Z'. */ \ PUSH_ANTI_ALIASING; \ /* Juste pour valider le couple (PUSH,PULL). */ \ \ CALS(FgPO());gA;DO(4,BLOC(g1;g2;));g5;gA; \ /* On se place au centre de l'ecran. */ \ TRX(FRA4(PI)); \ TRY(FRA4(PI)); \ /* Positionnement du cube dans l'espace. */ \ PULL_ANTI_ALIASING; \ /* Juste pour valider le couple (PUSH,PULL). */ \ SK(echelle_globale); \ /* Changement de l'echelle globale. */ \ DO(NEUT(COTE) \ ,BLOC(g4;) \ ); \ /* Afin de placer le centre du cube au centre de l'ecran... */ \ \ CALS(FgMIC()); \ EGAL(Z_maximum,ASD1(vecteurs_____cursor_3D,z)); \ G6; \ EGAL(Z_minimum,ASD1(vecteurs_____cursor_3D,z)); \ SET_DEPTH_CUEING(taux_de_depth_cueing,Z_minimum,Z_maximum); \ /* Pour le "depth-cueing". */ \ CALS(FgMOC()); \ gA;G1;gB; \ gA;G2;gB; \ gA;G3;gB; \ gA;G4;gB; \ /* Premiere face du cube. */ \ gA;G6;gB; \ /* Premiere arete. */ \ gA;G1;gA; \ gA;G2;gA; \ gA;G3;gB; \ gA;G4;gB; \ /* Deuxieme face du cube. */ \ G1;gA;CALS(FgMIC());G5;gA;CALS(FgMOC()); \ /* Deuxieme arete. */ \ G2;gA;CALS(FgMIC());G5;gB;CALS(FgMOC()); \ /* Troisieme arete. */ \ G3;gA;CALS(FgMIC());G5;gB;CALS(FgMOC()); \ /* Quatrieme arete. */ \ G5;gA; \ \ Eblock /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* P A R A M E T R E S : */ /* */ /*************************************************************************************************************************************/ #define ECHELLE_GLOBALE \ FLOT(DOUZE) \ /* Echelle globale... */ #define MEMORISER_LE_Z_BUFFER \ FAUX \ /* Indique si le 'Z-Buffer' doit etre fourni comme resultat ('VRAI'), ou bien oublie */ \ /* apres le calcul ('FAUX'). */ #define TAUX_DE_DEPTH_CUEING \ DEPTH_CUEING_MOYEN \ /* Definition du taux de depth-cueing... */ #define DECALAGE_ANGULAIRE_POUR_LA_STEREOSCOPIE \ DECALAGE_ANGULAIRE_POUR_UNE_VISION_CYCLOPIQUE \ /* Valeur implicite du facteur de rotation de l'observateur permettant ainsi de creer */ \ /* des paires stereoscopiques... */ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A C E D E S F A C E S A P P A R E N T E S D ' U N C U B E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE)); DEFV(CHAR,INIC(POINTERc(nom_imageZ),NOM_PIPE)); DEFV(Logical,INIT(memoriser_le_Z_Buffer,MEMORISER_LE_Z_BUFFER)); /* Indique si le 'Z-Buffer' doit etre fourni comme resultat ('VRAI'), ou bien oublie */ /* apres le calcul ('FAUX'). */ DEFV(Float,INIT(echelle_globale,ECHELLE_GLOBALE)); /* Echelle globale... */ DEFV(Float,INIT(taux_de_depth_cueing,DEPTH_CUEING_MOYEN)); /* Definition du taux de depth-cueing. Une valeur de '0.80' donne de bons resultats. */ DEFV(Float,INIT(decalage_angulaire_pour_la_stereoscopie,DECALAGE_ANGULAIRE_POUR_LA_STEREOSCOPIE)); /* Facteur de rotation de l'observateur pour la creation de paires stereoscopiques. On se */ /* souviendra que : */ /* */ /* decalage > 0 : oeil droit, */ /* decalage < 0 : oeil gauche, */ /* */ /* la valeur '+/-0.04' donnant de bons resultats... */ /*..............................................................................................................................*/ GET_ARGUMENTSv(nombre_d_arguments ,BLOC(GET_ARGUMENT_L("SX_SY_SZ_____compatibilite_20070416=""compatibilite_20070416=" ,SX_SY_SZ_____compatibilite_20070416 ); /* Parametre introduit le 20070416161633... */ GET_ARGUMENT_L("Ipoint_anti_aliase_segment_____compatibilite_20110420=""compatibilite_20110420=" ,Ipoint_anti_aliase_segment_____compatibilite_20110420 ); /* Parametre introduit le 20110420145437... */ GET_ARGUMENT_C("imageR=""R=",nom_imageR); GET_ARGUMENT_C("imageZ=""Z=",nom_imageZ); GET_ARGUMENT_L("zbuffer=""zBuffer=""Zbuffer=""ZBuffer=""Z-Buffer=",memoriser_le_Z_Buffer); GET_ARGUMENT_F("echelle=",echelle_globale); GET_ARGUMENT_F("taux=""depth-cueing=",taux_de_depth_cueing); GET_ARGUMENT_F("stereo=",decalage_angulaire_pour_la_stereoscopie); ) ); CALi(Inoir(ImageR)); /* Initialisation de l'image Resultat. */ CALS(FgERASE()); /* Clear... */ SET_DECALAGE_ANGULAIRE_DE_L_OBSERVATEUR(decalage_angulaire_pour_la_stereoscopie); /* Initialisation du facteur de rotation de l'observateur permettant ainsi de creer */ /* des paires stereoscopiques... */ SET_FILTRAGE(ACTIF); GENERE_SIGLE(taux_de_depth_cueing); SET_FILTRAGE(INACTIF); /* Generation du sigle... */ CALS(Imove(ImageR,ImageG)); CALi(Iupdate_image(nom_imageR,ImageR)); Test(IL_FAUT(memoriser_le_Z_Buffer)) Bblock CALS(Ifloat_std_du_Z_Buffer(ImageA)); /* Conversion du 'Z-Buffer' en une image "standard"... */ CALi(Iupdate_image(nom_imageZ,ImageA)); Eblock ATes Bblock Eblock ETes RETU_Commande; Eblock ECommande