Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 4.3 Transformations 3D Sup.: Création d'une image 3D Préc.: Structure générale d'un programme de Index Table des matières


Notions de masques et de fenêtres

La surface de visualisation sur laquelle l'image 3D sera affichée est définie comme en 2D par FENTR2 ou RFENTR. La gestion des indicateurs de clipping est comme en 2D définie par CLIP et CLIPHD.

Comme dans le cas 2D, il s'agit ici de définir une zone où on décrira l'objet. Comme cela se comprend facilement, on ne peut se contenter d'un MASQUE plan pour définir un objet dans l'espace.

On détaillera ici le  cas le plus usuel de la  vue en perspective, et on verra les autres cas dans un autre paragraphe.

 
Figure 4.1: Pyramide de vision et limitation en profondeur 

Dans le cas de la vue perspective , le MASQUE sera en fait une pyramide de vision (figure 4.1), telle que sa base soit un rectangle et telle que l'oeil de l'observateur se trouve à son sommet.

En principe cette pyramide est de longueur infinie, mais elle peut être limitée en profondeur par deux plans perpendiculaires à l'axe de vision. Comme dans le cas 2D, seule la partie se trouvant dans cet espace sera visible.

      SUBROUTINE PRSPCT(ALPHA, BETA)
      REAL ALPHA, BETA

L'observateur étant placé en  (0., 0., 0.) dans son propre repère et regardant dans la direction des Z négatifs, cette procédure définit une perspective de demi-angle de vision ALPHA en X et BETA en Y. Elle définit donc en fait la pyramide dont on vient de parler.

En plus elle déduit un masque 2D qui aurait pu être par ailleurs défini par :

     CALL MASQU2(-TAN(ALPHA), TAN(ALPHA), -TAN(BETA), TAN(BETA))

Il s'agit donc d'un rectangle obtenu par l'intersection de la pyramide de vision avec le plan (Z = -1). Dans ce masque on pourrait, si on le désirait, dessiner des objets en 2D (projections de l'objet dans ce plan par exemple). En réalité, FORTRAN 3D calcule la position de l'objet dans l'espace et dessine sa projection sur ce masque.

 
Figure: Masque 2D déduit par l'appel de PRSPCT 

Précisons tout de suite que nous associerons toujours à l'observateur un repère tel que l'oeil de celui-ci se trouve en (0., 0., 0.) et qu'il regarde dans la direction des Z négatifs. Ce repère est indépendant de celui de l'objet. On verra dans le paragraphe suivant comment se trouver dans cette position normalisée.

      SUBROUTINE MASQU3(ZMIN, ZMAX)
      REAL ZMIN, ZMAX

Dans le cas où on  utilise PRSPCT, ZMIN et ZMAX sont les distances par rapport à l'observateur de deux plans paralleles au plan 'XOY' du repère observateur. L'observateur se trouve toujours dans la position normalisée décrite ci-dessus. Seule la partie d'image comprise entre ces deux plans sera affichée. On effectue donc le découpage en profondeur dont on a parlé plus haut.

Comme dans le cas 2D, il est possible pendant l'exécution d'un programme de supprimer les découpages définis par les deux sous-programmes ci-dessus. Cette suppression peut etre momentanée ou définitive.

     SUBROUTINE CLIP3(FCONE, FMASQU)
     LOGICAL FCONE, FMASQU

Permet d'effectuer ou  non les découpages  précédents suivant les valeurs de FCONE et FMASQU.

Le sous-programme PRSPCT , comme il a été dit plus haut, définit une perspective (entre autre !). Il peut être souhaitable dans certaines applications de supprimer cet effet de perspective, du moins momentanément:

      SUBROUTINE NOPERS(FLAG)
      LOGICAL FLAG

Permet de  supprimer la prise en compte de la perspective définie par PRSPCT. Si FLAG = .TRUE., cette perspective et les découpages qu'elle implique ne sont pas effectués. FLAG vaut .FALSE. après un PRSPCT.

La définition de la fenêtre en 3D se fait de la même manière qu'en 2D. Les mêmes sous-programmes sont valables ici. La fenêtre contiendra l'image interne au masque 2D calculé par le sous-programme PRSPCT .

 
Figure: Correspondance masque et fenêtre pour un objet 3D 


Modulefpreviousupnextcontentsindex[BIG][Normal][small]
Suiv.: 4.3 Transformations 3D Sup.: Création d'une image 3D Préc.: Structure générale d'un programme de Index Table des matières