Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: Gestion des moyens d'entrée Sup.: Partie III: Fortran3D Préc.: 4.6 Textes Index Table des matières


5 Graphisme



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:

.
I = -1 : trait éteint
.
I = 0 : trait continu
.
I > 0 : interprétation dépendant du terminal (pointillé, tireté, mixte ...)

      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é.


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: Gestion des moyens d'entrée Sup.: Partie III: Fortran3D Préc.: 4.6 Textes Index Table des matières