/*************************************************************************************************************************************/
/* */
/* M I S E E N M O N T A G N E D E L ' I M A G E A R G U M E N T : */
/* */
/* */
/* Definition : */
/* */
/* Cette commande genere une image */
/* dont le nom est le premier argument */
/* d'appel ; elle est le resultat de */
/* la mise en montagne de la deuxieme image. */
/* */
/* */
/* Author of '$xci/montagne.01$K' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 1987??????????). */
/* */
/*************************************************************************************************************************************/
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* 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
#ifdef TYPE_DE_imageA_surface_VERSION_02
# include image_image_IMAGESF_EXT
#Aifdef TYPE_DE_imageA_surface_VERSION_02
#Eifdef TYPE_DE_imageA_surface_VERSION_02
#include image_image_MONTAGNES_EXT
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* P A R A M E T R E S : */
/* */
/*************************************************************************************************************************************/
#define COMPATIBILITE_20131031 \
FAUX \
/* Permet d'assurer la compatibilite anterieure au 20131031074405 si besoin est... */
#ifdef TYPE_DE_imageA_surface_VERSION_02
# define LA_SURFACE_EST_UNE_IMAGE_STANDARD \
VRAI \
/* L'image "surface" est-elle une image 'image' ou une image 'imageF' ??? */
# define RENORMALISER_LA_SURFACE \
VRAI \
/* Lorsque l'image "surface" est une image 'imageF' faut-il la renormaliser ('VRAI') ou */ \
/* pas ('FAUX') ? */
# define CONSERVER_LE_ZERO \
VRAI \
/* En cas d'image 'imageF' doit-on conserver le zero ('VRAI') ou pas ('FAUX'). */
# define IL_FAUT_CALCULER_LES_EXTREMA_DES_IMAGES_NON_STANDARDS \
VRAI \
/* Dans le cas d'une image flottante faut-il calculer les extrema pour la conversion */ \
/* ('VRAI') ou les forcer ('FAUX') ? */
# define MINIMUM_FORCE \
FLOT__NOIR
# define MAXIMUM_FORCE \
FLOT__BLANC
/* Valeur forcee des extrema d'une image flottante lorsque les extrema ne sont pas a */
/* calculer ou lorsque des images 'Standard's sont a convertir en flottant... */
#define EPSILON_DE_SEUILLAGE_INFERIEUR \
RACX(EPSILON_DE_SEUILLAGE_INFERIEUR_PAR_RAPPORT_AU_NIVEAU_ORIGINE_POUR_IFnormalisation) \
/* Pour 'IFnormalisation_____epsilon_de_seuillage_inferieur_par_rapport_au_niveau_origine'. */ \
/* On utilise implicitement 'RACX(...)' afin de prevenir des "underflow" ulterieurs car, en */ \
/* effet, le resultat de l'eventuelle 'IFnormalisation(...)' va etre utilise dans des */ \
/* 'prdF3D(...)' ('v $xiii/montagnes$FON prdF3D.normale,rayon_lumineux.'). */
#Aifdef TYPE_DE_imageA_surface_VERSION_02
#Eifdef TYPE_DE_imageA_surface_VERSION_02
#define CHARGER_UN_FOND \
FAUX \
/* Pour charger un fond a placer en arriere-plan de la montagne. */
#define EFFACEMENT_PRELIMINAIRE \
FAUX \
/* Pour ne pas effacer initialement l'image a generer puisqu'on fait un 'Inoir()'. */
#define GENERER_LES_OMBRES_PORTEES \
VRAI \
/* Pour generer les ombres portees. */
#define LARGEUR_DE_LA_ZONE_DE_PENOMBRE \
FLOT(DOUZE) \
/* Largeur de la zone de penombre. */
#define FAIRE_DU_DEPTH_CUEING \
FAUX \
/* Pour ne pas faire du "depth-cueing". */
#define MINIMUM_DU_DEPTH_CUEING \
FZERO \
/* Pour que le "depth-cueing" soit maximal lorsqu'il est demande. */
#define VUE_D_AVION \
FAUX \
/* Pour voir la montagne en perspective. */
#define FAIRE_LE_TRAITEMENT_ANTI_ALIASING \
VRAI \
/* Pour faire le traitement anti-aliasing. */
#define ECHELLE_DU_CHAMP \
FU \
/* On laisse le champ invariant... */
#define X_TRANSLATION_DE_LA_MONTAGNE \
FZERO \
/* Translation horizontale, */
#define Y_TRANSLATION_DE_LA_MONTAGNE \
FDU \
/* Translation verticale, */
#define X_SOURCE_LUMINEUSE \
FLOT(HUIT) \
/* Abscisse de la source lumineuse (autrefois 6.4453), */
#define Y_SOURCE_LUMINEUSE \
FLOT(HUIT) \
/* Ordonnee de la source lumineuse (autrefois 2.7343). */
#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 MEMORISER_LE_Z_BUFFER_COMME_UNE_IMAGE_STANDARD \
VRAI \
/* Indique si le 'Z-Buffer' est fourni comme resultat, si ce dernier doit etre fourni en */ \
/* tant qu'image standard ('VRAI') ou pas ('FAUX'). */
#define AIDER_AU_CADRAGE \
FAUX \
/* Indique si l'on doit editer les plus grandes ordonnees dans [0,1] rencontrees */ \
/* globalement et sur la 'last' ligne lors de la generation de la montagne. */
#define EDITER_LES_EXTREMA_DU_Z_Buffer \
FAUX \
/* Indique si l'on doit editer les extrema {Z_Buffer_____minimum,Z_Buffer_____maximum} du */ \
/* 'Z-Buffer' lorsque 'IL_FAUT(aider_au_cadrage)'. */
#define TRAITEMENT_ANTI_ALIASING_LES_LIGNES_DE_CRETE \
FAUX
#define TRAITEMENT_ANTI_ALIASING_DES_LIGNES_DE_CRETE__ARGUMENTS_DE_DILATATION \
C_VIDE
#define TRAITEMENT_ANTI_ALIASING_DES_LIGNES_DE_CRETE__ARGUMENTS_DE_CONVOLUTION \
C_VIDE
/* Introduit le 20151208113024 afin de traiter ("anti-aliasing") les lignes de crete... */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* M A C R O S U T I L E S : */
/* */
/*************************************************************************************************************************************/
#define imageSURFACE \
ImageA1
#define FimageSURFACE \
IFmageA
/* Definition de la surface (introduit le 20151208113024). */
#define imageTEXTURE \
ImageA2 \
/* Definition de la texture (introduit le 20151208113024). */
#define imageZ_BUFFER \
ImageA3 \
/* Definition du 'Z-Buffer' (introduit le 20151208113024). */
/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/* */
/* E X E C U T I O N D E L A M I S E E N M O N T A G N E : */
/* */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
Bblock
DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageF),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageA),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageT),NOM_PIPE));
DEFV(CHAR,INIC(POINTERc(nom_imageZ),NOM_PIPE));
DEFV(Logical,INIT(compatibilite_20131031,COMPATIBILITE_20131031));
/* Permet d'assurer la compatibilite anterieure au 20131031074405 si besoin est... */
#ifdef TYPE_DE_imageA_surface_VERSION_02
DEFV(Logical,INIT(la_surface_est_une_image_standard,LA_SURFACE_EST_UNE_IMAGE_STANDARD));
/* L'image "surface" est-elle une image 'image' ou une image 'imageF' ??? */
DEFV(Logical,INIT(renormaliser_la_surface,RENORMALISER_LA_SURFACE));
/* Lorsque l'image "surface" est une image 'imageF' faut-il la renormaliser ('VRAI') ou */
/* pas ('FAUX') ? */
DEFV(Logical,INIT(conserver_le_zero,CONSERVER_LE_ZERO));
/* En cas d'image 'imageF' doit-on conserver le zero ('VRAI') ou pas ('FAUX'). */
DEFV(Logical,INIT(il_faut_calculer_les_extrema_des_images_non_standards,IL_FAUT_CALCULER_LES_EXTREMA_DES_IMAGES_NON_STANDARDS));
/* Dans le cas d'une image flottante faut-il calculer les extrema pour la conversion */
/* ('VRAI') ou les forcer ('FAUX') ? */
DEFV(genere_Float,INIT(minimum_force,MINIMUM_FORCE));
DEFV(genere_Float,INIT(maximum_force,MAXIMUM_FORCE));
/* Valeur forcee des extrema d'une image flottante lorsque les extrema ne sont pas a */
/* calculer ou lorsque des images 'Standard's sont a convertir en flottant... */
#Aifdef TYPE_DE_imageA_surface_VERSION_02
#Eifdef TYPE_DE_imageA_surface_VERSION_02
DEFV(Float,INIT(echelle_du_champ,ECHELLE_DU_CHAMP));
/* Facteur d'echelle a appliquer a l'image Argument. */
DEFV(deltaF_2D,translation_de_la_montagne);
/* Translation de la montagne dans l'image. */
DEFV(pointF_2D,source_lumineuse);
/* Position de la source lumineuse. */
DEFV(Logical,INIT(charger_un_fond,CHARGER_UN_FOND));
/* Pour charger un fond a placer en arriere-plan de la montagne. */
DEFV(Logical,INIT(effacement_preliminaire,EFFACEMENT_PRELIMINAIRE));
/* Pour l'effacement initial de l'image Resultat. */
DEFV(Logical,INIT(generer_les_ombres_portees,GENERER_LES_OMBRES_PORTEES));
/* Pour mettre ou pas les ombres portees, */
DEFV(Float,INIT(largeur_de_la_zone_de_penombre,LARGEUR_DE_LA_ZONE_DE_PENOMBRE));
/* Largeur de la zone de penombre. */
DEFV(Logical,INIT(faire_du_depth_cueing,FAIRE_DU_DEPTH_CUEING));
/* Pour faire ou pas du "depth-cueing", */
DEFV(Float,INIT(minimum_du_depth_cueing,MINIMUM_DU_DEPTH_CUEING));
/* Pour ponderer dans [0,1] le "depth-cueing" : plus on est proche de */
/* zero, plus il est fort... */
DEFV(Logical,INIT(vue_d_avion,VUE_D_AVION));
/* Pour voir d'avion ou pas la montagne. */
DEFV(Logical,INIT(faire_le_traitement_anti_aliasing,FAIRE_LE_TRAITEMENT_ANTI_ALIASING));
/* Pour faire ou pas le traitement anti-aliasing. */
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(Logical,INIT(memoriser_le_Z_Buffer_comme_une_image_standard,MEMORISER_LE_Z_BUFFER_COMME_UNE_IMAGE_STANDARD));
/* Indique si le 'Z-Buffer' est fourni comme resultat, si ce dernier doit etre fourni en */
/* tant qu'image standard ('VRAI') ou pas ('FAUX'). */
DEFV(Logical,INIT(aider_au_cadrage,AIDER_AU_CADRAGE));
/* Indique si l'on doit editer les plus grandes ordonnees dans [0,1] rencontrees */
/* globalement et sur la 'last' ligne lors de la generation de la montagne. */
DEFV(Logical,INIT(editer_les_extrema_du_Z_Buffer,EDITER_LES_EXTREMA_DU_Z_Buffer));
/* Indique si l'on doit editer les extrema {Z_Buffer_____minimum,Z_Buffer_____maximum} du */
/* 'Z-Buffer' lorsque 'IL_FAUT(aider_au_cadrage)'. */
DEFV(Logical,INIT(traitement_anti_aliasing_les_lignes_de_crete,TRAITEMENT_ANTI_ALIASING_LES_LIGNES_DE_CRETE));
DEFV(CHAR,INIC(POINTERc(traitement_anti_aliasing_des_lignes_de_crete__arguments_de_dilatation)
,TRAITEMENT_ANTI_ALIASING_DES_LIGNES_DE_CRETE__ARGUMENTS_DE_DILATATION
)
);
DEFV(CHAR,INIC(POINTERc(traitement_anti_aliasing_des_lignes_de_crete__arguments_de_convolution)
,TRAITEMENT_ANTI_ALIASING_DES_LIGNES_DE_CRETE__ARGUMENTS_DE_CONVOLUTION
)
);
/* Introduit le 20151208113024 afin de traiter ("anti-aliasing") les lignes de crete... */
/*..............................................................................................................................*/
EGAL(Z_Buffer_____valeur_initiale,VALEUR_INITIALE_DU_Z_BUFFER_POUR_LES_MONTAGNES);
/* A priori, au cas ou le 'Z' serait interpole dans le 'Z-Buffer'... */
INITIALISATION_ACCROISSEMENT_2D(translation_de_la_montagne,X_TRANSLATION_DE_LA_MONTAGNE,Y_TRANSLATION_DE_LA_MONTAGNE);
/* Initialisation par defaut de la translation de la montagne. */
INITIALISATION_POINT_2D(source_lumineuse,X_SOURCE_LUMINEUSE,Y_SOURCE_LUMINEUSE);
/* Initialisation par defaut de la source lumineuse. */
#define GET_ARGUMENT_L_____Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing \
"zbuffer_interpole=""zBuffer_interpole=""Zi=""Zbuffer_interpole=""ZBuffer_interpole=""Z-Buffer_interpole="
#define GET_ARGUMENT_L_____memoriser_le_Z_Buffer_comme_une_image_standard \
"zbuffer_standard=""zBuffer_standard=""Zbuffer_standard=""ZBuffer_standard=""Z-Buffer_standard="
/* Afin de raccourcir une ligne suivante (introduit le 20070223135715)... */
#ifdef TYPE_DE_imageA_surface_VERSION_01
GET_ARGUMENTSv(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("compatibilite_20131031=",compatibilite_20131031);
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20061220=""compatibilite_20061220="
,Imontagnes_precises_____compatibilite_20061220
);
/* Introduit le 20061220104910... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090130=""compatibilite_20090130="
,Imontagnes_precises_____compatibilite_20090130
);
/* Introduit le 20090130182048... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090202=""compatibilite_20090202="
,Imontagnes_precises_____compatibilite_20090202
);
/* Introduit le 20090202104006... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090203=""compatibilite_20090203="
,Imontagnes_precises_____compatibilite_20090203
);
/* Introduit le 20090203155036... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20100223=""compatibilite_20100223="
,Imontagnes_precises_____compatibilite_20100223
);
/* Introduit le 20100223173603... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20210928=""compatibilite_20210928="
,Imontagnes_precises_____compatibilite_20210928
);
/* Introduit le 20210928141600... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20211001=""compatibilite_20211001="
,Imontagnes_precises_____compatibilite_20211001
);
/* Introduit le 20211001181008... */
GET_ARGUMENT_C("imageF=""F=",nom_imageF);
GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("texture=""T=",nom_imageT);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_C("imageZ=""Z=",nom_imageZ);
GET_ARGUMENT_L("fond=",charger_un_fond);
GET_ARGUMENT_L(GET_ARGUMENT_L_____Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
,Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
);
GET_ARGUMENT_F("Z0=",Z_Buffer_____valeur_initiale);
GET_ARGUMENT_L("zbuffer=""zBuffer=""Zbuffer=""ZBuffer=""Z-Buffer=",memoriser_le_Z_Buffer);
GET_ARGUMENT_L(GET_ARGUMENT_L_____memoriser_le_Z_Buffer_comme_une_image_standard
,memoriser_le_Z_Buffer_comme_une_image_standard
);
/* On notera le 20151208094749 que le 'Z-Buffer' en mode "standard", complemente et */
/* legerement dilate peut servir de noyau de convolution (via 'v $xci/convol.02$K') */
/* pour "anti-aliaser" les lignes de crete ('v $xiirc/VONK.72$M' a ce propos...). */
GET_ARGUMENT_F("Tx=",ASD1(translation_de_la_montagne,dx));
GET_ARGUMENT_F("Ty=",ASD1(translation_de_la_montagne,dy));
GET_ARGUMENT_F("sx=""Sx=",ASD1(source_lumineuse,x));
GET_ARGUMENT_F("sy=""Sy=",ASD1(source_lumineuse,y));
GET_ARGUMENT_L("effacement=""init=",effacement_preliminaire);
GET_ARGUMENT_F("echelle=""e=",echelle_du_champ);
GET_ARGUMENT_F("Tz=",Imontagnes_precises_____translation_de_la_coordonnee_Z_lors_d_une_vue_d_avion);
/* Introduit le 20080214131153 lors de la regeneration de 'v $xiirf/PAYS.R5$M' pour laquelle */
/* 'facteur_d_echelle' est negatif ce qui provoquait alors des 'Zf' tous negatifs */
/* dans 'v $xiii/montagnes$FON TRACE_POINT_3D_VUE_D_AVION' et donc des points invisibles... */
GET_ARGUMENT_F("source_lumineuse_intensite_speculaire=""slis=""is=""speculaire="
,Imontagnes_precises_____source_lumineuse_specularite
);
/* Introduit le 20130101110056... */
GET_ARGUMENT_L("ombres=",generer_les_ombres_portees);
GET_ARGUMENT_F("largeur_penombre=""penombre=",largeur_de_la_zone_de_penombre);
GET_ARGUMENT_L("depth_cueing=""depth=",faire_du_depth_cueing);
GET_ARGUMENT_F("minimum=""min_depth_cueing=""min=",minimum_du_depth_cueing);
/* Le 20110223144930 furent introduits "depth_cueing=" et "min_depth_cueing="... */
GET_ARGUMENT_F("depthN=",Imontagnes_precises_____depth_cueing_ponderation_niveau);
GET_ARGUMENT_F("depthX=",Imontagnes_precises_____depth_cueing_ponderation_coordonnee_X);
GET_ARGUMENT_F("depthY=",Imontagnes_precises_____depth_cueing_ponderation_coordonnee_Y);
GET_ARGUMENT_F("depthT=",Imontagnes_precises_____depth_cueing_translation);
GET_ARGUMENT_L("avion=",vue_d_avion);
GET_ARGUMENT_F("perspective=",Imontagnes_precises_____facteur_de_correction_perspective);
GET_ARGUMENT_L("verification_perspective=""vp="
,Imontagnes_precises_____verification_de_la_correction_perspective
);
/* Introduit le 20170413103808... */
GET_ARGUMENT_L("alias=",faire_le_traitement_anti_aliasing);
GET_ARGUMENT_F("fc=""facteur_cretes=",Imontagnes_precises_____facteur_profondeur_toutes_lignes_de_crete);
/* Introduit le 20061220160522... */
GET_ARGUMENT_F("fc1=""facteur_cretes_1="
,Imontagnes_precises_____facteur_1_interpolation_toutes_lignes_de_crete
);
GET_ARGUMENT_F("fc2=""facteur_cretes_2="
,Imontagnes_precises_____facteur_2_interpolation_toutes_lignes_de_crete
);
/* Introduit le 20061220120334 et etendu le 20061220134944 a deux facteurs... */
GET_ARGUMENT_L("interpoler=",Imontagnes_precises_____interpoler_les_lignes_de_crete_sur_la_montagne);
GET_ARGUMENT_L("falaise=",Imontagnes_precises_____visualiser_la_falaise_avant_de_la_montagne);
GET_ARGUMENT_F("idv=",Imontagnes_precises_____importance_du_decalage_vertical);
GET_ARGUMENT_L("aide_cadrage=""cadrage=""aide=",aider_au_cadrage);
GET_ARGUMENT_L("Zextrema=",editer_les_extrema_du_Z_Buffer);
GET_ARGUMENT_L("anti_aliasing_lignes_crete=""aalc=",traitement_anti_aliasing_les_lignes_de_crete);
GET_ARGUMENT_C("arguments_dilatation=""ad="
,traitement_anti_aliasing_des_lignes_de_crete__arguments_de_dilatation
);
GET_ARGUMENT_C("arguments_convolution=""ac="
,traitement_anti_aliasing_des_lignes_de_crete__arguments_de_convolution
);
/* Introduits le 20151208113024... */
)
);
#Aifdef TYPE_DE_imageA_surface_VERSION_01
#Eifdef TYPE_DE_imageA_surface_VERSION_01
#ifdef TYPE_DE_imageA_surface_VERSION_02
EGAL(IFnormalisation_____epsilon_de_seuillage_inferieur_par_rapport_au_niveau_origine,EPSILON_DE_SEUILLAGE_INFERIEUR);
GET_ARGUMENTSv(nombre_d_arguments
,BLOC(GET_ARGUMENT_L("compatibilite_20131031=",compatibilite_20131031);
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20061220=""compatibilite_20061220="
,Imontagnes_precises_____compatibilite_20061220
);
/* Introduit le 20061220104910... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090130=""compatibilite_20090130="
,Imontagnes_precises_____compatibilite_20090130
);
/* Introduit le 20090130182048... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090202=""compatibilite_20090202="
,Imontagnes_precises_____compatibilite_20090202
);
/* Introduit le 20090202104006... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20090203=""compatibilite_20090203="
,Imontagnes_precises_____compatibilite_20090203
);
/* Introduit le 20090203155036... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20100223=""compatibilite_20100223="
,Imontagnes_precises_____compatibilite_20100223
);
/* Introduit le 20100223173603... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20210928=""compatibilite_20210928="
,Imontagnes_precises_____compatibilite_20210928
);
/* Introduit le 20210928141600... */
GET_ARGUMENT_L("Imontagnes_precises_____compatibilite_20211001=""compatibilite_20211001="
,Imontagnes_precises_____compatibilite_20211001
);
/* Introduit le 20211001181008... */
GET_ARGUMENT_C("imageF=""F=",nom_imageF);
GET_ARGUMENT_C("imageA=""A=",nom_imageA);
GET_ARGUMENT_C("texture=""T=",nom_imageT);
GET_ARGUMENT_C("imageR=""R=",nom_imageR);
GET_ARGUMENT_C("imageZ=""Z=",nom_imageZ);
GET_ARGUMENT_L("standard=",la_surface_est_une_image_standard);
GET_ARGUMENT_L("rn=""renormaliser=",renormaliser_la_surface);
GET_ARGUMENT_L("zero=",conserver_le_zero);
GET_ARGUMENT_L("extrema=",il_faut_calculer_les_extrema_des_images_non_standards);
GET_ARGUMENT_F("minimum_force=",minimum_force);
GET_ARGUMENT_F("maximum_force=",maximum_force);
GET_ARGUMENT_L("fond=",charger_un_fond);
GET_ARGUMENT_L(GET_ARGUMENT_L_____Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
,Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
);
GET_ARGUMENT_F("Z0=",Z_Buffer_____valeur_initiale);
GET_ARGUMENT_L("zbuffer=""zBuffer=""Zbuffer=""ZBuffer=""Z-Buffer=",memoriser_le_Z_Buffer);
GET_ARGUMENT_L(GET_ARGUMENT_L_____memoriser_le_Z_Buffer_comme_une_image_standard
,memoriser_le_Z_Buffer_comme_une_image_standard
);
GET_ARGUMENT_F("Tx=",ASD1(translation_de_la_montagne,dx));
GET_ARGUMENT_F("Ty=",ASD1(translation_de_la_montagne,dy));
/* On notera le 20150112124927 que "Ty=", "perspective=" et "echelle=" ne sont bien */
/* "homothetiques" (lors d'un changement de format) que si les valeurs contenues dans */
/* le fichier 'nom_imageA' sont bien dans [0,1]. Des difficultes liees a des bornes */
/* differentes ont ete rencontrees lors de la generation de l'image 'v $xiirv/CHAR.12$M', */
/* le probleme venant surtout de 'v $xiii/montagnes$FON 013313_013824'... */
GET_ARGUMENT_F("sx=""sX=""Sx=""SX=",ASD1(source_lumineuse,x));
GET_ARGUMENT_F("sy=""sY=""Sy=""SY=",ASD1(source_lumineuse,y));
GET_ARGUMENT_L("effacement=""init=",effacement_preliminaire);
GET_ARGUMENT_F("echelle=""e=",echelle_du_champ);
/* On notera le 20150112124927 que "Ty=", "perspective=" et "echelle=" ne sont bien */
/* "homothetiques" (lors d'un changement de format) que si les valeurs contenues dans */
/* le fichier 'nom_imageA' sont bien dans [0,1]. Des difficultes liees a des bornes */
/* differentes ont ete rencontrees lors de la generation de l'image 'v $xiirv/CHAR.12$M', */
/* le probleme venant surtout de 'v $xiii/montagnes$FON 013313_013824'... */
GET_ARGUMENT_F("Tz=",Imontagnes_precises_____translation_de_la_coordonnee_Z_lors_d_une_vue_d_avion);
/* Introduit le 20080214131153 lors de la regeneration de 'v $xiirf/PAYS.R5$M' pour laquelle */
/* 'facteur_d_echelle' est negatif ce qui provoquait alors des 'Zf' tous negatifs */
/* dans 'v $xiii/montagnes$FON TRACE_POINT_3D_VUE_D_AVION' et donc des points invisibles... */
GET_ARGUMENT_F("source_lumineuse_intensite_speculaire=""slis=""is=""speculaire="
,Imontagnes_precises_____source_lumineuse_specularite
);
/* Introduit le 20130101110056... */
GET_ARGUMENT_L("ombres=",generer_les_ombres_portees);
GET_ARGUMENT_F("largeur_penombre=""penombre=",largeur_de_la_zone_de_penombre);
GET_ARGUMENT_F("attenuation=",Imontagnes_precises_____facteur_d_attenuation_a_l_ombre);
GET_ARGUMENT_F("Nminimum=",minimum_normalise_du_cosinus_d_une_normale);
GET_ARGUMENT_F("Nmaximum=",maximum_normalise_du_cosinus_d_une_normale);
GET_ARGUMENT_L("depth_cueing=""depth=",faire_du_depth_cueing);
GET_ARGUMENT_F("minimum=""min_depth_cueing=""min=",minimum_du_depth_cueing);
/* Le 20110223144930 furent introduits "depth_cueing=" et "min_depth_cueing="... */
GET_ARGUMENT_F("Adepth_cueing=""Adepth=""Ad=",Imontagnes_precises_____Ay_reduit);
GET_ARGUMENT_F("Bdepth_cueing=""Bdepth=""Bd=",Imontagnes_precises_____By_reduit);
/* Introduits le 20140627115805 afin de pouvoir, par exemple, inverser le "depth-cueing"... */
GET_ARGUMENT_F("depthN=",Imontagnes_precises_____depth_cueing_ponderation_niveau);
GET_ARGUMENT_F("depthX=",Imontagnes_precises_____depth_cueing_ponderation_coordonnee_X);
GET_ARGUMENT_F("depthY=",Imontagnes_precises_____depth_cueing_ponderation_coordonnee_Y);
GET_ARGUMENT_F("depthT=",Imontagnes_precises_____depth_cueing_translation);
GET_ARGUMENT_L("avion=",vue_d_avion);
GET_ARGUMENT_F("perspective=",Imontagnes_precises_____facteur_de_correction_perspective);
/* On notera le 20150112124927 que "Ty=", "perspective=" et "echelle=" ne sont bien */
/* "homothetiques" (lors d'un changement de format) que si les valeurs contenues dans */
/* le fichier 'nom_imageA' sont bien dans [0,1]. Des difficultes liees a des bornes */
/* differentes ont ete rencontrees lors de la generation de l'image 'v $xiirv/CHAR.12$M', */
/* le probleme venant surtout de 'v $xiii/montagnes$FON 013313_013824'... */
GET_ARGUMENT_L("verification_perspective=""vp="
,Imontagnes_precises_____verification_de_la_correction_perspective
);
/* Introduit le 20170413103808... */
GET_ARGUMENT_L("alias=",faire_le_traitement_anti_aliasing);
GET_ARGUMENT_F("fc=""facteur_cretes=",Imontagnes_precises_____facteur_profondeur_toutes_lignes_de_crete);
/* Introduit le 20061220160522... */
GET_ARGUMENT_F("fc1=""facteur_cretes_1="
,Imontagnes_precises_____facteur_1_interpolation_toutes_lignes_de_crete
);
GET_ARGUMENT_F("fc2=""facteur_cretes_2="
,Imontagnes_precises_____facteur_2_interpolation_toutes_lignes_de_crete
);
/* Introduit le 20061220120334 et etendu le 20061220134944 a deux facteurs... */
GET_ARGUMENT_L("interpoler=",Imontagnes_precises_____interpoler_les_lignes_de_crete_sur_la_montagne);
GET_ARGUMENT_L("falaise=",Imontagnes_precises_____visualiser_la_falaise_avant_de_la_montagne);
GET_ARGUMENT_F("idv=",Imontagnes_precises_____importance_du_decalage_vertical);
GET_ARGUMENT_L("aide_cadrage=""cadrage=""aide=",aider_au_cadrage);
GET_ARGUMENT_L("Zextrema=",editer_les_extrema_du_Z_Buffer);
GET_ARGUMENT_P("noir=""NOIR=",noir_plancher_substitution);
GET_ARGUMENT_I("pas_falaise=",pas_entre_CLIPPING_INTENSITE_et_MIN_INTENSITE);
GET_ARGUMENT_F("epsilon=",IFnormalisation_____epsilon_de_seuillage_inferieur_par_rapport_au_niveau_origine);
GET_ARGUMENT_L("anti_aliasing_lignes_crete=""aalc=",traitement_anti_aliasing_les_lignes_de_crete);
GET_ARGUMENT_C("arguments_dilatation=""ad="
,traitement_anti_aliasing_des_lignes_de_crete__arguments_de_dilatation
);
GET_ARGUMENT_C("arguments_convolution=""ac="
,traitement_anti_aliasing_des_lignes_de_crete__arguments_de_convolution
);
/* Introduits le 20151208113024... */
GET_ARGUMENT_L("editer_Z=""eZ=",Itrace_segment_vertical_____editer_la_coordonnee_Z_d_un_point);
GET_ARGUMENT_I("point_X=""pX="
,Itrace_segment_vertical_____coordonnee_X_du_point_dont_on_veut_la_coordonnee_Z
);
GET_ARGUMENT_I("point_Y=""pY="
,Itrace_segment_vertical_____coordonnee_Y_du_point_dont_on_veut_la_coordonnee_Z
);
/* Introduits le 20240330120932 pour faire des tests. Voici un exemple d'utilisation : */
/* */
/* Squ */
/* v $xiirv/PIPO.U1$m */
/* */
/* Le curseur pointant sur un pic "9" (entre "27" et "50") donne : */
/* */
/* curseur=(+1372.000000,+1010.000000) */
/* */
/* On communique ensuite aux differents '$xci/montagne.01$X' les arguments suivants : */
/* */
/* editer_Z=VRAI pX=1372 pY=1010 */
/* */
/* qui donne : */
/* */
/* Y(OrigineVecteur)=1074 Y(ExtremiteVecteur)=1075 */
/* X=1372 Y=1010 Z=1075 */
/* ---- ---- */
/* /\ /\ */
/* || || */
/* Puis : || -------------------------------- */
/* || | */
/* ------------------------------------ | */
/* | | */
/* | | */
/* | | */
/* v $xiirv/PIPO.U1$M | | */
/* | | */
/* le curseur pointant sur le sommet du meme pic "9" donne : | | */
/* | | */
/* curseur=(+1372.000000,+1075.000000) | | */
/* | | */
/* soit : | | */
/* | | */
/* X=1372 <----------------------------- | */
/* Y=1075 <--------------------------------------- */
/* */
/* et ainsi, le sommet du pic est a l'ordonnee Y=1075 du plan de l'image, ce qui correspond */
/* bien a la hauteur Z=1075 du pic utilise pour le test... */
)
);
#Aifdef TYPE_DE_imageA_surface_VERSION_02
#Eifdef TYPE_DE_imageA_surface_VERSION_02
#undef GET_ARGUMENT_L_____Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing
#undef GET_ARGUMENT_L_____memoriser_le_Z_Buffer_comme_une_image_standard
CALi(Inoir(ImageR));
/* Initialisation de l'image Resultat. */
Test(IFEQ_chaine(nom_imageR,NOM_PIPE))
Bblock
Test(IL_FAUT(traitement_anti_aliasing_les_lignes_de_crete))
/* Test introduit le 20151208113024... */
Bblock
PRINT_ATTENTION("pour l'anti-aliasing de crete, l'image Resultat ne peut pas etre le 'pipe', on y renonce donc.");
/* En effet, lors du traiement "anti-alising" des lignes de crete, le nom 'nom_imageR' */
/* sert dans 'convol.02' alors que le "pipe" est deja utilise pour le dialogue entre */
/* 'eor' et ce meme 'convol.02', d'ou un conflit... */
EGAL(traitement_anti_aliasing_les_lignes_de_crete,FAUX);
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
#ifdef TYPE_DE_imageA_surface_VERSION_01
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(imageSURFACE,nom_imageA))))
#Aifdef TYPE_DE_imageA_surface_VERSION_01
#Eifdef TYPE_DE_imageA_surface_VERSION_01
#ifdef TYPE_DE_imageA_surface_VERSION_02
Test(PAS_D_ERREUR(CODE_ERROR(COND(EST_VRAI(la_surface_est_une_image_standard)
,Iload_image(imageSURFACE,nom_imageA)
,IloadF_image(FimageSURFACE,nom_imageA)
)
)
)
)
#Aifdef TYPE_DE_imageA_surface_VERSION_02
#Eifdef TYPE_DE_imageA_surface_VERSION_02
/* Chargement de l'image a transformer. */
Bblock
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(imageTEXTURE,nom_imageT))))
/* Chargement de la texture. */
Bblock
Test(IL_FAUT(Imontagnes_precises_____interpoler_le_Z_Buffer_lors_de_l_anti_aliasing))
Bblock
Test(IFNE(Z_Buffer_____valeur_initiale,VALEUR_INITIALE_DU_Z_BUFFER_POUR_LES_MONTAGNES))
Bblock
PRINT_ATTENTION("la valeur d'initialisation du 'Z-Buffer' n'est pas compatible avec un effet de brume");
Test(IL_FAUT(compatibilite_20131031))
Bblock
EGAL(Z_Buffer_____valeur_initiale,VALEUR_INITIALE_DU_Z_BUFFER_POUR_LES_MONTAGNES);
/* Dans le cas ou le 'Z' va etre interpole dans le 'Z-Buffer', il est important que la */
/* valeur d'initialisation de ce dernier soit la bonne... */
/* */
/* Je note le 20131030082449 que si l'image 'nom_imageA' contient des valeurs negatives */
/* (et donc inferieures a 'VALEUR_INITIALE_DU_Z_BUFFER_POUR_LES_MONTAGNES'), alors il y */
/* aura des "trous" dans la surface. Cela s'est vu a cette date lors de la generation des */
/* images du type 'v $xiirf/PAYU.F4$m p=$xiP/gris.01' et a impose l'utilisation de : */
/* */
/* renormaliser=VRAI */
/* */
/* D'ou la modification du 20131031074405... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
CALS(Iinit_Z_Buffer());
/* Initialisation standard du 'Z-Buffer'. */
Test(IL_FAUT(charger_un_fond))
Bblock
Test(PAS_D_ERREUR(CODE_ERROR(Iload_image(ImageR,nom_imageF))))
Bblock
EGAL(effacement_preliminaire,FAUX);
/* Pour ne surtout pas effacer l'image Resultat. */
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
#ifdef TYPE_DE_imageA_surface_VERSION_01
CALS(Imontagnes(ImageR
,echelle_du_champ,imageSURFACE
,imageTEXTURE
,effacement_preliminaire
,ADRESSE(translation_de_la_montagne)
,generer_les_ombres_portees,largeur_de_la_zone_de_penombre,ADRESSE(source_lumineuse)
,faire_du_depth_cueing,minimum_du_depth_cueing
,vue_d_avion
,faire_le_traitement_anti_aliasing
)
);
#Aifdef TYPE_DE_imageA_surface_VERSION_01
#Eifdef TYPE_DE_imageA_surface_VERSION_01
#ifdef TYPE_DE_imageA_surface_VERSION_02
Test(EST_VRAI(la_surface_est_une_image_standard))
Bblock
/* Cas d'une image 'image' : */
CALS(Imontagnes(ImageR
,echelle_du_champ,imageSURFACE
,imageTEXTURE
,effacement_preliminaire
,ADRESSE(translation_de_la_montagne)
,generer_les_ombres_portees,largeur_de_la_zone_de_penombre,ADRESSE(source_lumineuse)
,faire_du_depth_cueing,minimum_du_depth_cueing
,vue_d_avion
,faire_le_traitement_anti_aliasing
)
);
Eblock
ATes
Bblock
/* Cas d'une image 'imageF' : */
Test(IL_NE_FAUT_PAS(renormaliser_la_surface))
Bblock
CALS(IFmove(IFmageR,FimageSURFACE));
/* Cas ou la surface n'est pas renormalisee... */
Eblock
ATes
Bblock
DEFV(genere_Float,INIT(nivo_minimum,minimum_force));
DEFV(genere_Float,INIT(nivo_maximum,maximum_force));
/* Niveaux extrema de la surface. */
Test(EST_VRAI(il_faut_calculer_les_extrema_des_images_non_standards))
Bblock
CALS(IFnivo_extrema(FimageSURFACE,ADRESSE(nivo_minimum),ADRESSE(nivo_maximum)));
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(conserver_le_zero))
Bblock
CALS(IFnormalisation_avec_le_vrai_zero(IFmageR,FimageSURFACE,nivo_minimum,nivo_maximum));
/* Cas ou la surface est renormalisee en conservant le vrai zero... */
Eblock
ATes
Bblock
CALS(IFnormalisation(IFmageR,FimageSURFACE,nivo_minimum,nivo_maximum));
/* Cas ou la surface est renormalisee... */
Eblock
ETes
Eblock
ETes
CALS(Imontagnes_precises(ImageR
,echelle_du_champ,IFmageR
,imageTEXTURE
,effacement_preliminaire
,ADRESSE(translation_de_la_montagne)
,generer_les_ombres_portees,largeur_de_la_zone_de_penombre,ADRESSE(source_lumineuse)
,faire_du_depth_cueing,minimum_du_depth_cueing
,vue_d_avion
,faire_le_traitement_anti_aliasing
)
);
Eblock
ETes
#Aifdef TYPE_DE_imageA_surface_VERSION_02
#Eifdef TYPE_DE_imageA_surface_VERSION_02
CALi(Iupdate_image(nom_imageR,ImageR));
Test(IL_FAUT(memoriser_le_Z_Buffer))
Bblock
Test(IL_FAUT(memoriser_le_Z_Buffer_comme_une_image_standard))
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
CALi(IupdateF_image(nom_imageZ,Z_Buffer));
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(aider_au_cadrage))
Bblock
CAL3(Prme3("%+.^^^ %+.^^^ Ty=%+.^^^\n"
,Itrace_segment_vertical_____plus_grande_ordonnee_sur_la_montagne
,Itrace_segment_vertical_____plus_grande_ordonnee_sur_la_last_ligne_de_la_montagne
,SOUS(ASD1(translation_de_la_montagne,dy)
,Itrace_segment_vertical_____plus_grande_ordonnee_sur_la_last_ligne_de_la_montagne
)
)
);
/* Edition des plus grandes ordonnees denormalisees : */
/* */
/* */
/* :#-* --...................................................... */
/* :--o#** o-##o plus grande */
/* -:.+-##o#+-*+#+#*o ordonnee sur */
/* o -:.:+#-*+o:o-**o:*+ la montagne */
/* o*.--*-#-###-*-o*oo*#* - o */
/* ##*#:-:-*o++#+*o-*+*#**oo. :+-*-- */
/* ##-#o-:-*--****+o+*o#++*+o++# +* .+#++:- */
/* +*oo#*.:--*+*#*o-o-##o*-o**-+#### +####:+#*+* o -+**+.-: */
/* *#o-#*-:+-o+#+##o#-o###-o#*-o*+-:-:-++:#o*#o**o*oo+*++-###+o-:*: */
/* --#####*oo*o:+-#o#*o+##o**+o+*+-+.**:o+##--:o--#+:#:-++o:*oo:#:- */
/* o-###+o+#*##--**oo#*o*##o**+++::::--+-o*:##+o*-*++*---++o*#++o:- */
/* o+#-o#o#o*#*-**o*oo*o*#o##oo*o:..:o---*-:-#ooooo:o*-#:o*oo#:#**: */
/* *+o###-#-**+oo#****#-*o##--*oo.:.:-.+++-+***o*o+o:o*-*+o+*#:+-:+ */
/* ##**###+###+***#*-++****o#+*o:::.-::.o+++---*:::--#-***+o++++-+# */
/* **##+#:-#**+--#oo#-o+*+-#*#+---::::.-----:#:o-.--*##*#:-##++:+o: */
/* o+#o*-*+*ooo*+*#o*#*o**+-#*o+:::..-:-+-o#:o-::--:o**o+**+*-*#:#- */
/* o*#*#+#*o#*#o**##-*##-*#:##*-::..+::-#++:::::-.-:*+:**+*:--o-+o# */
/* +++*####o+*#*+o+*++*#o#*##*#:.+*oo:o#*-++-::.-:--*ooo#*+..+:o##- */
/* o++o###*####*o##o:+o*#+*-#o*--:-+#:.::*-o+-#::-+++o:##+**::*o#+o */
/* o+o:*o#o-#*--*#+-::+#**oo+#+-.:+o#.#-#+##***++:#-o-*o:-+-:+#-o++ */
/* o+o-o***##+#*-*#-:+#o#*o#---::-.+o++*o**o-*#-.+#:::*-:-o:+-#*o+: */
/* **.*-o##o*#**-:-#-######o+:+.....++++o*##:*-*+#oo.::.+.+-:o*+o*+ */
/* o+oo:##**##o:#*#-*#o#o#***+::...-:o+:-##:**+*-#+o+-:.:.-.-+o+#** */
/* #oo-:--*#+.-*#*#:-***oo*#+::...:++o:-oo#:*oo#-#*-::.....:o+o#oo: */
/* #o---.+:+##**o:oo#:--#*+oo-*+:.#-#*--+-*#*o:#*oo:-:::...::+-#+o# */
/* +#*:--:#+:+#-:*#-#*o##-o#+:*::o*o-#*:-+##*-#o++o--::##+:-::+#**+ */
/* -*:*-*o-o#*-:-+:-+*##o:#*-##o#***#o##.-*o## ........................... */
/* +o:----++*o--#+o#o:-+o#*###**+##*+#*o-:# +:o-#-::-+::+*oo## plus grande */
/* -...--o.#**--#o*-###*#-o#*o-+-*#*o+*-- #+:#**:++::o*:oo+ ordonnee sur */
/* *o+-+#o+-o+o*.+:.+o-###*#o#o*:-o#+*#: ###+---:-*++*#: la 'last' */
/* ligne de la */
/* montagne */
/* */
/* */
/* Le 20060105155204, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123248, le format "^^g" est passe a "^^^" pour plus de souplesse... */
/* */
/* Le 20151209113217, fut introduit l'edition de la valeur optimale de "Ty=" afin de voir */
/* le bas de la montagne, sans zones noires... */
Test(IL_FAUT(editer_les_extrema_du_Z_Buffer))
Bblock
CAL3(Prme2("Zmin=%+.^^^ Zmax=%+.^^^\n"
,Z_Buffer_____minimum
,Z_Buffer_____maximum
)
);
/* Edition des extrema du 'Z-Buffer'. */
/* */
/* Le 20060105155204, le format "16g" est passe a "^^g" pour plus de souplesse... */
/* */
/* Le 20091123123248, le format "^^g" est passe a "^^^" pour plus de souplesse... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Eblock
ETes
Test(IL_FAUT(traitement_anti_aliasing_les_lignes_de_crete))
Bblock
/* Test introduit le 20151208113024... */
DEFV(CHAR,INIC(POINTERc(nom_ZBuffer),generation_d_un_nom_absolu_dans_xT_temporaire(Gvar("Z_BUFFER"))));
DEFV(CHAR,INIC(POINTERc(nom_ZBufferMasque),generation_d_un_nom_absolu_dans_xT_temporaire("MASQUE")));
DEFV(CHAR,INIC(POINTERc(nom_ZBufferDilate),generation_d_un_nom_absolu_dans_xT_temporaire("DILATE")));
DEFV(CHAR,INIC(POINTERc(nom_ZBufferErode),generation_d_un_nom_absolu_dans_xT_temporaire("ERODE")));
CALS(Ifloat_std_du_Z_Buffer(imageZ_BUFFER));
CALi(Iupdate_image(nom_ZBuffer,imageZ_BUFFER));
/* Conversion du 'Z-Buffer' en une image "standard" et sauvegarde... */
#define arguments_de_dilatation \
traitement_anti_aliasing_des_lignes_de_crete__arguments_de_dilatation
#define arguments_de_convolution \
traitement_anti_aliasing_des_lignes_de_crete__arguments_de_convolution
/* Afin de raccourcir des lignes a suivre... */
EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH
(chain_Aconcaten11(GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"seuil")
," A=",nom_ZBuffer
," seuil=",chain_Aentier(NOIR)
,GENERATION_DE_formatI
,C_SH__REDIRECTION_PROGRAMME
,GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"complement")
," R=",nom_ZBufferMasque
,GENERATION_DE_formatI
)
);
/* Creation, a partir du 'Z-Buffer" d'un masque binaire definissant tout ce qui est */
/* au-dessus des lignes de crete... */
EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH
(chain_Aconcaten13(GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"dilate.01")
," A=",nom_ZBufferMasque
," dilater=VRAI"," circulaire=VRAI"," circulaire_optimale=VRAI"
," points=",chain_Aentier(EXP2(CINQ))
," ",arguments_de_dilatation
," R=",nom_ZBufferDilate
,GENERATION_DE_formatI
)
);
/* Dilatation de ce masque... */
EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH
(chain_Aconcaten13(GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"dilate.01")
," A=",nom_ZBufferMasque
," dilater=FAUX"," circulaire=VRAI"," circulaire_optimale=VRAI"
," points=",chain_Aentier(EXP2(CINQ))
," ",arguments_de_dilatation
," R=",nom_ZBufferErode
,GENERATION_DE_formatI
)
);
/* Erosion de ce masque... */
EXECUTION_D_UNE_SUITE_DE_COMMANDES_SOUS_SH
(chain_Aconcaten22(GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"eor")
," A1=",nom_ZBufferDilate
," A2=",nom_ZBufferErode
,GENERATION_DE_formatI
,C_SH__REDIRECTION_PROGRAMME
,GENERATION_NOM_D_UNE_COMMANDE_X(Direct_xci,"convol.02")
," A=",nom_imageR
," V=",chain_Aentier(BLANC)
," F=",chain_Aentier(BLANC)
," messages_noyau_convolution_variable=FAUX"
," circulaire=VRAI"," circulaire_optimale=VRAI"
," ",arguments_de_convolution
," R=",nom_imageR
,GENERATION_DE_formatI
)
);
/* Le ou exclusif entre le masque erode et le masque dilate donne un masque situe */
/* "a cheval" sur les lignes de crete. C'est lui qui sert alors de noyau de convolution */
/* variable qui ne portera donc que sur les lignes de crete... */
#undef arguments_de_dilatation
#undef arguments_de_convolution
CALS(Idelete_image(nom_ZBufferErode));
CALS(Idelete_image(nom_ZBufferDilate));
CALS(Idelete_image(nom_ZBufferMasque));
CALS(Idelete_image(nom_ZBuffer));
/* Nettoyage final... */
Eblock
ATes
Bblock
Eblock
ETes
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
Eblock
ATes
Bblock
Test__CODE_ERREUR__ERREUR07;
Eblock
ETes
RETU_Commande;
Eblock
ECommande