Suiv.: Gestion des moyens d'entrée
Sup.: Partie III: Fortran3D
Préc.: 4.6 Textes
Index
Table des matières
Les sous-programmes suivants permettent de définir le graphisme et l'aspect des segments de droites et des textes, leur effet est rémanent jusqu'au prochain appel.
SUBROUTINE DRAW3(I) INTEGER I
Définit le graphisme des traits:
SUBROUTINE THICK(EPAIS) REAL EPAIS
Définit l'épaisseur du trait en mm.
SUBROUTINE LIGH3(INTENS, CLIGNO, COULEU) INTEGER INTENS, CLIGNO, COULEU
INTENS définit le niveau de brillance des traits.
CLIGNO définit le clignotement des traits.
COULEU définit le numéro de couleur des traits (indice dans la table de couleurs du terminal: 0...NBCOLO-1 )
L'interprétation de ces paramètres est dépendante du terminal utilisé.
SUBROUTINE DRW3TX(TAILLE, SENS, POLICE) REAL TAILLE, SENS INTEGER POLICE
Définit la taille et l'orientation des textes aussi bien en 2D (TXT2D) qu'en 3D (TXT3D):
TAILLE indique la hauteur en centimètres des caractères.
SENS est l'orientation du texte exprimée en fraction de PI/2 à partir de l'horizontale.
POLICE indique le jeu de caractères utilisé.
Ces paramètres dépendent du terminal utilisé.
SUBROUTINE CTRTXT(ALPHA, BETA) REAL ALPHA, BETA
Définit le cadrage d'un texte. Le texte est supposé être dans une boîte (0., 0.) (1., 1.).
ALPHA et BETA indiquent la position du centrage desiré dans cette boîte. Ils varient entre 0. et 1.
SUBROUTINE LIMITS(I) INTEGER I
Matérialise sur l'écran la fenêtre avec des lignes de type I (Voir DRAW3).
SUBROUTINE HACHUR(CONTOU,N,ANGLE,DISTAN,TYPE,EPAIS,INTENS,CLIGNO, COULEU,NMOTIF,ACTION) INTEGER NMOTIF,TYPE(NMOTIF),INTENS(NMOTIF),CLIGNO(NMOTIF), COULEU(NMOTIF) REAL CONTOU(4, N), ANGLE, DISTAN(NMOTIF), EPAIS(NMOTIF) EXTERNAL ACTION
Trace des hachures , faisant un angle ANGLE par rapport à l'horizontale, dans le contour défini par CONTOU.
CONTOU(4, N) définit le contour par un ensemble de N segments de droite (X1, Y1)(X2, Y2) (en centimètres) avec:
CONTOU(1, I) = X1 CONTOU(2, I) = Y1 CONTOU(3, I) = X2 CONTOU(4, I) = Y2
Les segments peuvent ne pas être contigus et ainsi, définir des contours avec des trous. La définition du motif des hachures se fait par 2 types de paramètres:
On trace la I-ème texture à une distance DISTAN(I-1) ceci modulo NMOTIF. C'est-à-dire:
Boucle : " On trace avec la texture 1, on se déplace de la distance DISTAN(1)
On trace la texture 2, on se déplace de DISTAN(2)
Etc...
On trace la texture NMOTIF on se déplace de DISTAN(NMOTIF)
Et on recommence .... fin Boucle "
Couleur
Nous allons voir maintenant comment construire une couleur sur un terminal le permettant.
Dans les sous-programmes précédents, les couleurs étaient désignées par un nombre entier. 0 correspond à la couleur du fond. Pour un terminal disposant de N couleurs, les nombres compris entre 1 et N-1 correspondront aux différentes couleurs de la table de couleurs du terminal.
Cette table de couleurs est, en général, initialisée après le choix du terminal de sortie. Il est cependant possible de modifier celle-ci ou de forcer une couleur à devenir la couleur courante.
Il n'est pas inutile de rappeler certaines notions sur les couleurs.
Sur un terminal couleur à tube cathodique les différentes couleurs s'obtiennent par la combinaison de trois couleurs de base: ROUGE, VERT, BLEU (RVB).
ROUGE + VERT = JAUNE ROUGE + BLEU = MAGENTA VERT + BLEU = CYAN ROUGE + VERT + BLEU = BLANC
Les couleurs intermédiaires s'obtiennent en mettant un facteur multiplicatif compris entre 0. et 1. pour chacune des couleurs de base.
X, Y et Z étant 3 nombres compris entre 0. et 1., on peut donc obtenir toutes les couleurs possibles en les faisant varier dans l'équation suivante:
COULEUR = (X * ROUGE) + (Y * VERT) + (Z * BLEU)
On dit que les couleurs sont additives, car elles s'obtiennent par addition des couleurs de base.
Figure: Système de coordonnées RVB
Ceci n'est plus vrai pour un terminal couleur de type imprimante. Les couleurs de base seront les suivantes: MAGENTA, JAUNE, CYAN. Les couleurs ne sont plus additives mais soustractives :
MAGENTA + JAUNE = ROUGE MAGENTA + CYAN = BLEU JAUNE + CYAN = VERT MAGENTA + JAUNE + CYAN = NOIR
La aussi par combinaison linéaire de ces trois couleurs de base on peut obtenir toutes les couleurs.
FORTRAN 3D fonctionne avec le système RVB.
Dans certaines applications, il peut être souhaitable de travailler en coordonnées cylindriques. On passe alors au système de coordonnées 'HSV' (Hue : teinte, Saturation et Value : valeur).
Figure: Deux représentations possibles du système de coordonnées HSV
SUBROUTINE HSVRGB(H, S, V, R, G, B) REAL H, S, V, R, G, B
Convertit en RVB (R, G, B) une couleur décrite en HSV (H, S, V).
SUBROUTINE RGBHSV(R, G, B, H, S, V) REAL H, S, V, R, G, B
Convertit en HSV (H, S, V) une couleur décrite en RVB (R, G, B).
SUBROUTINE SETCOL(R, V, B) REAL R, V, B
Les variables R, V et B sont comprises entre 0. et 1., elles jouent le même role que X, Y, Z ci-dessus (figure 5.1). Ce sous-programme force R, V, B à être la couleur courante.
SUBROUTINE SETTBC(R, V, B, I1, I2, IRET) INTEGER I1, I2, IRET REAL R(I2-I1+1), V(I2-I1+1), B(I2-I1+1)
Force dans la table de couleurs R, V, B entre les indices I1 et I2 inclus
(les trois tableaux contiennent des nombres compris entre 0 et 1).
Si la table de couleurs est modifiable IRET = 0, sinon IRET 0.
L'indice 0 correspond à la couleur du fond.
Steréoscopie
Comme nous y avions fait allusion dans la présentation, FORTRAN 3D offre la possibilité sur certains terminaux disposant d'un nombre suffisant de couleurs d'obtenir un couple steréoscopique d'images pour une vision en relief des objets tridimensionnels. La table de couleurs de ces terminaux doit être entièrement modifiable (sur une station APOLLO ceci nécessite une utilisation en mode 'borrow'). L'utilisation de cette fonction est très simple : il suffit de l'appeler juste après la déclaration du terminal (DEFDEV). Dans la suite, le dessin de l'objet se fait tout à fait normalement sans autre modification. Pour pouvoir distinguer le relief, il faut bien entendu porter une paire de lunettes avec des verres rouges et vert. Le verre rouge se place à gauche. Si l'image stéréoscopique est réalisée par une imprimante couleur il faudra alors la regarder avec des verres rouge et cyan (bleu + vert), le verre rouge étant toujours à gauche.
INTEGER FUNCTION STEREO(FLAG, ECART) LOGICAL FLAG REAL ECART
Produit un couple steréoscopique rouge-vert sur un terminal graphique couleur ou rouge-cyan sur une imprimante.
si FLAG est .TRUE., on fait la steréo
si FLAG est .FALSE., on supprime la steréo
ECART l'écart pupillaire des yeux de l'observateur exprimé dans le système d'unités
de l'objet (espace utilisateur). Il peut être calculé en fonction des
dimensions de l'objet et de sa distance à l'observateur. De son importance
dépend l'effet de relief. S'il est trop grand, il peut arriver que le
cerveau ne puisse pas reconstituer l'image (on obligerait l'utilisateur à loucher trop).
Au retour si STEREO 0 c'est que la stéréoscopie n'est pas possible sur le terminal
utilisé. Sinon le mode steréo est affecté.