MODES D´AFFICHAGE
La mémoire d´image
Si yes graphic est actif (valeur par défaut) la mémoire d´image est
celle du processeur graphic. La commande displ écrit dans cette mémoire
et le résultat apparait sur l´écran.
La commande displ image displays an image stored in memory.
Si no graphic est actif , le programme peut
tourner sur une installation sans processeur graphic, les images pouvant
être calculées et garées sur le disque.
Les modes d´affichage
La commande displ permet de choisir le mode d´affichage:
Si yes displ est actif (valeur par défaut) les affichages sont effectifs
(OpenGL active les fonctions cablées de la carte graphique).
Si no illum est actif (valeur par défaut) les affichages sont réalisés
en "fil de fer"
Si yes illum est actif, un zbuffer élimine les parties cachées et la
couleur est calculée en chaque pixel en fonction:
1) Des lumières
(voir manuel.light.htm).
2) Du modèle d´éclairement au point de la surface traitée
(voir illum).
3) De la position de l´eye
(voir eye).
La mise en perspective
La scène est construite dans un repère dit "absolu".
Une caméra virtuellee est positionnée dans ce repère par les commandes:
(eye): position de la caméra.
(aim): point de visée.
(axis): direction.
(foc): ouverture.
(roll): roulis (inclinaison de la caméra sur l´axe oeil ->
point de visée).
(type): "aim" ou "axis".
L´image est coupée par la fenêtre courante.
Les plans proche et lointain de la pyramide de visualisation sont définis par la commande cut.
La commande pers permet de choisir le type de projection:
pers(1) ou yes pers (valeur par défaut): perspective conique.
pers(0) ou non pers: perspective cylindrique.
pers(2): perspective courbe.
Une perspective procédurale (écrite en langage ANYFLO) peut être définie
par la donnée d´une fonction local sur une vue.
Une perspective procédurale (écrite en langage C) peut être définie par
modification de la fonction pers_utilisateur du fichier utilb.c, il faut alors
faire status pers=num avec num < 0.
Les vues sont activées par: validate view(id).
Il faut faire yes view pour rendre activer les vues multiples.
Une vue particulière peut être attachée à un volume par la commande:
view vol(id_vol)=id_view
Il faut faire yes view pour rendre active toutes les vues.
validate pers vol(num): Permet de générer le volume déformé par
la perspective, vu d´un autre oeil on obtient des effets étranges...
Une perspective arbitraire peut être obtenue sur une vue id
par la donnée de la matrice 4*4 de passage du repère de l´oeil au repère de
la perspective par la commande:
generate pers(p0,p1,...,p15) view(id).
La commande pers(n) view(id)=p0,p1,...,p15 permet de modifier
individuellement les matrices n = 1, 2, 3 et 4 de la vue id.
n = 1: Repère absolu -> Repère de l´eye
n = 2: Repère de l´oeil -> Repère de la perspective
n = 3: Repère absolu -> Repère de la perspective
n = 4: Repère de l´eye -> Repère absolu
Une perspective procédurale peut être définie en passant des
noms de fonctions (au lieu de matrices) aux commandes:
abs eye view(num) = "nom de fonction"
eye pers view(num) = "nom de fonction"
pers screen view(num) = "nom de fonction"
screen abs view(num) = "nom de fonction"
pers abs view(num) = "nom de fonction"
De telles fonctions sont de la forme:
toto()
{
p = poi /* p = point dans le 1er repere */
x = p[0]; y = p[1]; z = p[2]
xp = ... /* Calcul du point dans le 2eme repere */
yp = ...
zp = ...
validate pers(xp,yp,zp) /* Passe le resultat */
}
Accès aux calculs de perspective
En mode texture procédurale texture vol
et en mode perspective procédurale (voir ci-dessus), différentes commandes permettent
de récupérer ou de modifier les paramètres relatifs au point courant:
poi: Retourne les coordonnées absolues.
normal poi: Retourne la normal en ce point.
eye poi: Retourne les coordonnées dans le repère de l´oeile.
pers poi: retourne les coordonnées (x,y,z,w) de la perspective.
screen poi: retourne les coordonnées (x,y,z) dans le repère de l´ecran.
validate pers(x,y,z): permet de validate la perspective.
MODÈLES D´ÉCLAIREMENT
Un modèle d´éclairement peut être affecté:
1) Globalement sur un volume.
2) Localement sur une facette.
3) Localement en un sommet.
Les paramètres sont: illum,ref,spe,bri,tran:
illum = mode de lissage
illum = mode de lisage:
0: fil de fer
1: plein
2: GOURAUD
3: PHONG
si illum < 0: les normales ne sont pas orientées
ref = coefficient de reflexion = (lumière réfléchie) / (lumière incidente)
spe = coefficient speculaire coefficient (intensité du reflet)
bri = brillance: étalement du reflet 0 (diffus) to 100 (pointu)
tran = transparence: entre 0 (opaque) and 1 (transparent)
Syntaxe:
illum vol(id)=illum,ref,spe,bri,tran
illum fac(f)vol(id)=illum,ref,spe,bri
illum vertex(s)vol(id)=illum,ref,spe,bri
Une loi de variation du spéculaire en fonction de l´angle d´incidence peut
être donnée par law vol:
law vol(id)=x1,y1,0,x2,y2,0,... représentant les variations du spéculaire
y en fonction de l´angle x (entre 0 et PI/2).
Voir demo1_illum.func.
AFFICHAGE PARTICULAIRE
Volume particulaire
particle vol(id)=dens,coe,fact,alea,max1,max2
Si yes particle est actif, le volume id sera affiché en particules (au lieu
d´un lissage, les points de la surface sont rendus par un nuage de particules).
dens = densité entre 0(aucune particule) et 0(densité maximum).
coe = coefficient de dispersion entre 0(particules situées sur la surface)
et 1(radius du nuage égal à la taille de la facette).
fact = facteur de densité d´une particule éclatée en un nuage.
alea = 1: Aléatoire reproductible.
max1 = nombre maximum de particules générées.
max2 = nombre maximum de particules d´un nuage.
Facette particulaire
particle fac(f) vol(id) = d,c,...
Affecte un affichage particulaire à la facette f du volume id.
Remarque:
2) Chaque particule peut être remplacée par un objet grâce à la
commande motif vertex vol(id1)=id2.
LES OMBRES PORTÉES
Un volume peut recevoir des numéros de volumes lui portant shadow:
shadow vol n=n1,n2,...
Si ´yes shadow´ est actif, les volumes n1,n2,... porteront une shadow sur
le volume n.
Remarque:
La base de données, garer sur le disque par la commande:
write ascii radius "name"
doit être passée au module de lancer de rayons de name radius