Le modèle d'illumination de PHONG
Salut bande de galapiats !! Me revoilou pour
de nouvelles aventures dans le monde palpitant (bof)
de la démo...
On est le 7 Octobre 1995, épi j'ai plus beaucoup de temps pour
faire cet article mais bon, ça va aller, en plus je veux pas
déçevoir ce cher ST SURVIVOR hein !! [Merci Patapom !]
Comme toujours, l'orthographe un peu douteuse vient du fait ke
j'utilise RTEL assez souvent et qu'avec ce RTC, c'est plutot la
rapidité ki compte donc, pas de perte de temps, ici la fantaisie
importe plus...
Entre nous, j'écrirais plutot "C" ke "c'est". Ca peut choquer
ceux ki n'y sont pas habitués, m'enfin... Bon... Imaginez ke vous
lisiez une BD débile, moi j'aime bien les BDs, d'ailleurs pendant
ces vacances d'été, kan on est allés faire les courses à Mont De
Marsan pendant la PTBF (passkeu la bouffe était à gerber), c'était
chez Mammouth je crois... Là, kesskeu je vois en pénétrant dans
cette antre maléfike ?? Devinez ?? Hein ??
Hé bien non ! Pas des rangées entières de cassoulet Toulousain
(bien k'on en ait aperçu kelkes bwouates ki sautillaient gaiement
entre les rayons d'où le commentaire de Major X: "Ben ça alors,
moi k'habite à Toulouse j'en ai jamais vu de pareilles !")
Non ! En fait, j'ai vu, de mes yeux vu, un album de "Pifou" en
réduction... à 15 Francs ! Et alors, non content de le voir, je
l'achète, et là ça y'est, je replonge dans l'univers communiste de
Pif Gadget et ses amis... Le titre kelke peu évocateur du susdit
album - Glop Glop Gloper - me rendait d'ores et déjà tout chose...
Ah !! Pif Gadget... Hercule, Dicentim, Bougredane, Supermatou,
Ludo, Horace cheval de l'ouest, Les rigolus, le prof Belpomme et
Krapulax, Rahan... Toute ma jeunesse ! (7 Francs tous les mardis)
Ne rigolez pas !
Ainsi, on peut s'exclamer: VIVE LES SUPERMARCHES MAMMOUTH !!!!
D'ailleurs, j'ai vu kelke chose d'affligeant cet après-midi :
dans ma rue hébin y'a un sale connard ki écoute de la DANCE de
merde ke je déteste (Grrrr !)ki est passé avec un T-Shirt LECLERC,
Un beau, bien orange potiron... Je peux donc définitivement penser
ke la DANCE rend un tant soit peu GAGA !! J'avais déjà été pas mal
persuadé après avoir passé kelkes jours avec ce pitre de Dr SKULL.
Hé hé, tiens, je vais le casser : Dr SKULL il est allé à DANCE
MACHINE 6 !! Sisi, j'vous jure ! Il l'a fait, fallait oser hein !!
(Remarkez, chuis bien allé voir Super Mario Bros. au ciné moi hein
et Zappy, lui, il est allé voir STREET FIGHTER c encore pire Hi hi
!! (Là c sûr, je suis mort !))
=================================
Bon, je vais pas passer ma vie sur ça donc :
COMMENCONS !!!!!!!!!! (Bande de galapiats !)
Commencer certes, mais par koi ?? Ben, on pourrait déjà donner
le sujet de cet article ki fera la joie des petits comme des
grands :
Le modèle d'illumination de PHONG (Simplifié, évidemment !)
===========================================================
<*> Historique :
--------------
Monsieur PHONG (Bui Tong de son prénom) déjà tout petit était
fasciné par la lumière, et après avoir couché avec Marie CURIE et
taillé une bavette avec A. EINSTEIN, il mit au point le ressort à
boudin... Fantastique invention, presque aussi remarquable ke le
fil à couper le beurre. Non content de sa découverte, au plus haut
point scientifik, il s'empressa une fois de plus de révolutionner
le monde en mettant au point le choubirazalédoufikus rouge, le
seul mobile à mouvement perpetuel ! (d'ailleurs, si vous le voyez,
ramenez lui passkeu il s'est barré par la fenetre de son labo sur
Jupiter) Et finalement, Bui Tong dont le prénom inspira un célèbre
fabricant de pates italiennes (BUITONI), s'empressa de repousser
les limites de la compréhension humaine en créant son fantastique
modèle d'illumination... enfin bon, il a pas mal repompé sur Mr
GOURAUD kan meme !
NB : Les renseignements fournis plus haut pourraient ne pas
s'avérer tout à fait exacts.
<*> Remarque :
------------
Le "PHONG" kess keussé ??? (Bin oui, kess keussé donc ?). Vous
devriez tous, vous amateurs de démos, connaitre le Gouraud, si non
prenez n'importe kelle démo "à la mode" épi regardez, c'est ce
mode de remplissage bizarre des polygones en faisant des dégradés
de couleurs... On en a vu, sur ATARI, pour la première fois, dans
INTERPHASE ce célèbre jeu mythique ke j'ai toujours, bien rangé au
fond de mon coffre fort... J'admire ce jeu et encore plus son
créateur, k'il soit loué ! Alleluja ! (Vive lui hosana !). Ensuite
le Gouraud a dû ré-aparaitre dans une démo, la PANDEMONIUM si je
ne m'abuse... L'historique du Gouraud sur d'autres machines que le
ST, connais po...
Bref, le principe est bien répandu maintenant : On affecte des
intensités lumineuses à chaque sommet d'un polygône ke l'on
calculera au préalable et puis, on interpole les valeurs de ces
intensités selon les contours de ce polygône... Ainsi, pour chaque
ligne du polygône, on aura son "X" de gauche, son "X" de droite et
aussi son intensité lumineuse de gauche et celle de droite. Je ne
m'étends pas sur le principe du remplissage de polyône hein ! C
supposé acquis sinon écrivez moi). Il n'y a plus k'à remplir entre
les "X" de gauche et de droite tout en interpolant de meme les
intensités lumineuses ki pourront être directement interprétées
comme des valeurs de couleurs du coup...
L'objet de cet article n'est pas le Gouraud, mais son "grand
frère" le Phong. Bien ke plus coûteux en temps machine le résultat
est autrement plus appréciable. Le modèle d'illumination de Phong
a été utilisé pour la 1ère fois dans une démo en 1995, à la Party
IV au Danemark. Il est apparu en meme temps dans la démo appellée
CONTAGION et dans la démo de NOOON.(la 1ère : NO)
Je le sais : j'y étais !! Bref, un tonnerre d'applaudissements
pour cette démo "CONTAGION" ki faisait tourner la tete de Ronald
REAGAN en Phong...
Le principe du Phong est "un brin" plus compliké que celui du
Gouraud : au lieu d'interpoler les intensités lumineuses sur les
contours du polygône puis de les interpoler lors du remplissage,
nous allons interpoler les vecteurs normaux aux sommets.
Tout d'abord, un vecteur normal est un vecteur orthogonal à un
support. Rappelons qu'un vecteur normal à une face est le vecteur
"perpendiculaire" à cette face. Le vecteur normal est la base de
tout calcul d'illumination. A ne pas confondre avec le vecteur
normé ki est, lui, un vecteur dont la norme est 1.
Un vecteur normal à une face se définit comme étant le vecteur
résultant du produit vectoriel de 2 vecteurs appartenant à cette
face... N
^
¦
¦
¦ / Y
¦ /
¦ /
¦ /
¦/
---------- X
Dans cette figure on trouve le vecteur normal N en faisant le
produit vectoriel de X par Y: X^Y=N en remarquant ke Y^X=-N...
Il est donc important d'orienter l'espace. Il faut bien faire
attention au sens des vecteurs choisis... C'est d'ailleurs grâce à
cette propriété ke l'on sait si une face est visible lorsque l'on
fait de la 3D...
Par exemple pour trouver le vecteur normal à une face orientée
dans le sens trigonometrique :
A
¦\
¦ \
¦ \
¦ \
¦ \
¦ \
¦ \
¦ \
¦ ---- C
¦ -----
B ----
Il suffit de faire le produit vectoriel (BA)^(BC), ce ki nous
donne un vecteur normal à ABC dirigé vers nous (autrement dit, ki
sort de l'écran).
Maintenant, pour trouver un vecteur normal à un sommet, ce ki
nous intéresse le plus pour ce k'on veut faire, il suffit de faire
la moyenne de la somme des vecteurs normaux des faces adjacentes à
ce sommet... (Relisez, ce mal de tete va passer).
Juske là tout va bien... mais là où ça se corse c'est que pour
réaliser cette illumination,on a besoin de vecteurs NORMÉS !!! (En
tout point de la surface, pas seulement sur les contours).
L'opération de renormage est un vrai cauchemar !! C d'ailleurs
le principal problème kan on veut faire du Phong ! D'après je sais
plus kel théorème, on rennorme un vecteur en faisant :
N' = N / ¦N¦ (¦x¦ est la norme du vecteur x)
C'est à dire k'il va falloir calculer la norme du vecteur
normal ki est,comme chacun sait: ¦N¦ = SQRT(X^2+Y^2+Z^2) (SQRT
est l'opérateur de racine carrée et X,Y,Z sont les composantes du
vecteur N).
Ensuite il faut diviser chaque composante par cette norme :
Nx = X / ¦N¦
Ny = Y / ¦N¦
Nz = Z / ¦N¦
Bilan : 1 Racine carrée + 3 mises au carré + 3 Divisions et
tout cela pour un point !!
Conclusion : on ne PEUT PAS faire de (vrai) PHONG en temps
réel...
Cependant, ceux ki ont accès à un PC (ou à la démo "GERANIUM"
sur FALCON, Hé hé !!) se seront aperçus ke y'en a ki le font kan
meme... Merde alors ! Komment ça se peut ?
==================================================================
Auparavant, un petit cours d'optique :
Un modèle simplifié ? Pourkoi ?
-------------------------------
Car le VRAI modèle d'illumination aussi utilisé dans 3D Studio
(ce célèbre soft PC ki permet de rendre des scènes réalistes), est
bien plus compliké que celui utilisé, courament maintenant, dans
les démos...
En effet, le modèle d'illumination complet permet de gérer 3
types de rayons :
<*> La lumière AMBIANTE qui est l'intensité de lumière que
contient la scène, c'est l'illumination globale de la scène, celle
émise par les autres objets on ne peut pas la calculer car cela
nécessiterait des calculs trop monstrueux, on lui associe donc
simplement un facteur Ka (ki varie entre 0 et 1). La lumière
ambiante n'a pas de direction propre, elle est uniforme, constante
pour tout point et toute direction de l'espace.
<*> La réflection DIFFUSE est c kon va simuler tout à l'heure,
c le seul calcul ke l'on puisse reproduire "sans trop de mal"...
Il faut savoir k'un rayon lumineux se propage de manière
rectiligne et sans perte dans le vide et dans un milieu isotrope.
Lorsqu'il rencontre une paroi, celui-çi peut se réfléchir ou se
propager dans le milieu dont est faite la paroi ("réfraction"). La
diffraction n'est simulée que sur de gros systèmes car coùteuse en
temps machine.
Mais, regardons plutôt :
N
I \ ^ / R On a : I = Rayon incident ki
\ / frappe la paroi
\ ¦ /
\ ¦ / R = Rayon réfléchi, ki
\ ¦ / est renvoyé par la paroi
\ ¦ / T = Rayon transmis
\ ¦ / (réfracté
\ ¦ / à travers la paroi)
\ ¦ / N = Normale à la paroi au
\ ¦ / point considéré.
\ ¦ / O = Point d'application
\¦/ de la normale N.
_______________Y________________ Paroi
:¦
O :¦
: ¦
: ¦
: ¦
: ¦
: ¦
: ¦
: ¦
: ¦
: ¦ T
: ¦
^ ^
On constate ke les angles ION et NOR sont identiques.
L'intensité lumineuse du rayon réfléchi sera affectée d'un
coéfficient Kd (compris entre 0 et 1) ki varie selon ke la surface
est parfaitement réfléchissante (1) ou parfaitement transparente
(0)
^
Si on considère maintenant l'angle (PI-NOT) ki est l'angle
entre le rayon transmis et la normale prolongée, on constate k'il
n'est pas identike à l'angle ION.
D'après ceci on peut donc se référer à la loi de Descartes :
N1.Sin(I1) = N2.Sin(I2)
avec N1,N2 les indices de réfraction des différents milieux
(D'un côté de la paroi, l'air (indice 1) et de l'autre coté, une
matière quelconque...) I1 et I2 sont les angles ke font les
différents rayons par rapport à la normale à la surface au point
considéré.
Ce que nous allons calculer ce sera l'intensité lumineuse
résultante du rayon R. On notera que, si les vecteurs N et I sont
normés (c à dire de norme 1), l'intensité de lumière diffuse Id se
calcule comme suit :
--------------------------------
¦ I = Kd * Id * (N*I*cos(Phy)) ¦
--------------------------------
Avec Id l'intensité de la lumière diffuse (entre 0 et 1) et Kd
le coéfficient propre au type de surface sur lakelle le rayon se
reflète.
Le vecteur normé I du rayon incident a son point d'application
en O et pointe directement vers la source de lumière. Phy est en
fait l'angle ION (entre lerayon incident et la normale)
3ème type de rayon :
<*> La réflection spéculaire : c'est un calcul de réflection
lumineuse ki dépend de la position de l'observateur. Je m'étends
pas la dessus passkeu c'est tout un bordel : il faut à chaque fois
recalculer le vecteur réflection en fonction de la position de la
normale à la surface... C chiant, croyez-moi !!
Néanmoins, j'aimerais souligner ici l'idée de Phong d'affecter
un exposant à la fonction COSinus :
COS(Theta)^N
Ce ki, à l'aide de différents exposants permet de faire varier
l'importance du pinceau de lumière spéculaire, nous l'utiliserons
néanmoins pour tout autre chose tout à l'heure : le calcul de la
"tache de PHONG" (je l'ai appelé comme ça...)
==================================================================
Voilà, une fois ces "quelques" notions rappelées, on peut
commencer à bidouiller !
Lors de l'affectation d'une couleur à un point du polygône,
non seulement il faudra renormer le vecteur normal en ce point,
mais il faudra en plus faire un produit scalaire de ce vecteur
normal normé (hi hi !!) avec le vecteur ki pointe sur la source de
lumière ponctuelle :
Couleur = Echelle_de_couleurs * (L.N)
(L, vecteur pointant sur la source lumineuse N, Normale à la
surface et l'échelle de couleurs est l'indice de la couleur la
plus lumineuse (Vous avez peut-etre fait un dégradé de 16 couleurs
hébin l'échelle de couleur sera 15 (0-15))).
Attendez, là où ça se corse davantage c ke le vecteur L doit
lui aussi etre normé !
ARGH ARGHHHHH !!!!!!! Ca y'est, 2 renormages par point plus un
produit scalaire, le Phong est l'un des trucs ki bouffe le plus de
temps de mémoire de demomaker...
Bon, on a vu ke la masse de calculs à effectuer est beaucoup
trop importante pour faire ça à chaque point d'une surface. (d'un
polygône) On va donc simplifier le problème de la manière suivante
~~~~~~~~~~~
[1) On suppose la source de lumière située à l'infini, ce qui
évite de recalculer le vecteur L à chaque point (et par conséquent
de recalculer sa norme !!!!) puisque les rayons lumineux sont
distribués uniformément en tout point de l'espace.
------------------------------------------------------------------
On constate donc ke L est constant car la source est à l'infini
------------------------------------------------------------------
[2) Pour effectuer le produit scalaire à chaque point, il
faudra faire :
S = Nx * Lx + Ny * Ly + Nz * Lz
avec Nx,Ny,Nz les composantes de la normale N et Lx,Ly,Lz les
composantes du vecteur lumière L.
Supposons maintenant ke la source de lumière soit à notre
place (en face de l'écran koi...) alors le vecteur L ki pointe sur
cette source sera écrit :
------------------
¦ L(0,0,1) ¦
------------------
et le produit scalaire s'écrira désormais : S = Nz !!!!!!
Ke de gain, ke de gain les amis !! Cependant, c pas encore fini !!
(Hahaha !)
[3) Il faudra encore renormer le vecteur N... c'est encore
trés chiant ! Hé bien non, et c là k'apparait la plus grosse gruge
car d'après l'expression du produit scalaire S = Nz, on s'aperçoit
ke l'on a rien à foutre des composantes sur X et Y du vecteur
normal... Ca nous arrange bien, regardez :
On connait la norme finale du vecteur N, c'est 1 puisske c un
vecteur normé. On peut donc écrire le calcul de la norme de N :
SQRT( Nx^2 + Ny^2 + Nz^2) = 1
Ce dont on a besoin est Nz, on retrouve donc Nz en faisant :
Nz^2 = 1^2 - Nx^2 - Ny^2 soit finalement :
------------------------------------
¦ Nz = SQRT( 1 - Nx^2 - Ny^2 ) ¦
------------------------------------
Et voilà !! On s'aperçoit donc ke pour trouver ce kon cherche,
il suffit d'exprimer le vecteur normal par ses composantes Nx,Ny
et l'on peut, grâceà la formule du dessus, retrouver sa composante
Nz "facilement".
Finalement, pour connaitre l'intensité lumineuse d'un point
d'une surface, connaissant Nx,Ny du vecteur normal en ce point, on
fait :
I = Echelle_de_couleurs * Nz
K'est-ce ki nous empeche, pour chaque valeur de Nx,Ny de la
normale de créer une table (la tache de Phong citées plus haut, c
un nom purement arbitraire ke J'AI choisi !!) ki nous redonnera le
résultat de l'opération et ki nous évite carrément le calcul de la
racine carrée plus les mises au carrées...
**> CONCLUSION :
En connaissant les composantes X et Y de la normale en un
point donné et en se référant par rapport à une "table de Phong",
on retrouve aisément la couleur à afficher (ou l'offset de la
texture à aller chercher si on affiche en plus une texture plus ou
moins éclairée).
Je vous l'avais dit ke c'était facile !! Maintenant, pour ceux
ki n'ont pas remarké, trouver les composantes Nx,Ny à chaque point
ki représente en fait un offset dans la table de Phong, ca revient
à faire du mapping...
HE OUI !!!!!! LE PHONG DES DEMOS C EN FAIT DU MAPPING AVEC UNE
TABLE DE COULEURS.
Maintenant occupons nous de la tronche de la table à calculer.
Si on reprend la formule du dessus : SQRT(1-...) en supposant
ke Nx,Ny varient de - 64 à + 64 on aura une suite de cercles
concentriques dont le plus brillant se situera au milieu et le
plus foncé aura un rayon de 64...
Si vous essayez, vous vous aperçevrez ke c pas mal mais comme
on se place plutôt du point de vue de l'esthétisme, moins du point
de vue mathématique, il vaut mieux utiliser une autre façon pour
la calculer cette table...
C là k'intervient la formule mise de côté tout à l'heure : le
fameux COS^N de môssieuh Phong, regardez, si l'on suppose ke la
distance est associée à un angle et comme le cosinus est une
fonction paire, en faisant en GFA-BASIC :
Power=1
FOR y=-64 TO 64
FOR x=-64 TO 64
Distance=SQR(X^2+Y^2)
IF Distance<65
Angle=PI*Distance/(2*64) ! L'angle varie entre -PI/2
et +PI/2
Color=15.999999*(COS(Angle)^Power)
PSET(x,y,Color)
ELSE
PSET(x,y,0)
ENDIF
NEXT x
NEXT y
En organisant la palette en un dégradé de couleurs de 0 à 15,
selon les valeurs de Power vous obtiendrez des taches de Phong
plus ou moins ténues... N'ayez pas peur de monter jusk'à 200 pour
Power hein !! 32 est une chouette valeur.
Si j'ai pris des valeurs de Nx,Ny variant de -64 à +64 c n'est
pas un hasard :
Si l'on réalise la table entière, on obtient un carré de
128*128, ce carré, on le place dans un plus grand de 256*256 (une
texture de 256*256 peut etre adressée sur un MOT de 16 bits avec
l'octet de poids fort représentant les ordonnées et celui de poids
faible, les abscisses). Ainsi, pour chaque sommet d'un polygône,
on spécifiera les composantes de son vecteur normal en X et Y ki
seront finalement les coordonnées de mapping dans la texture de
Phong... (Texture, Tache, Table de Phong, tout ça c kif-kif hein).
Le problème, vous allez me dire, c'est qu'on gâche de la place
puiske les bords de la texture ne seront jamais utilisés, héé bien
je vous répondrai :
NN NN OOOO NN NN !
NNN NN OOOOOO NNN NN !!!
NNNN NN OOO OOO NNNN NN !!!
NN NN NN OO OO NN NN NN !!!
NN NNNN OO OO NN NNNN !
NN NNN OOO OOO NN NNN
NN NN OOOOOO NN NN !
NN NN OOOO NN NN !!!
!
Musclor aussi aurait dit non pour sauver ETERNIA...
Car tout à l'heure on a établit l'hypotèse ke la source de
lumière était EN FACE de l'objet à calculer, hé bien ça m'a étonné
mais si l'on modifie l'offset de base dans la texture (ki se
trouve normalement au centre de celle-çi, au centre de la tache de
Phong) selon l'axe des abscisses (dans le repère lié à la texture)
on voit la lumière ki se déplace de gauche à droite, de meme, si
l'on modifie l'offset selon l'axe des ordonnées, la lumière se
déplace de haut en bas...
Si l'offset initial est à (128,128) au centre de la texture,
le fait de le placer désormais en (128,64) donnera l'impression ke
la lumière se trouve AU DESSUS de l'objet, ainsi on peut placer la
source de lumière (toujours située à l'infini) n'importe où dans
l'espace et, d'après ses coordonnées spatiales, on retrouve les
coordonnées dans la texture :
X = 128 * ARCTAN( Sx/Sz ) / PI
Y = 128 * ARCTAN( Sy/Sz ) / PI
Avec Sx,Sy,Sz les coordonnées spatiales de la source lumière
dans l'espace, le mieux étant de les récupérer en les calculant
d'après leurs coordonnées sphérikes, comme ça la lumière se trouve
toujours à une distance donnée du centre de l'objet même si
théorikement elle se trouve à l'infini.
Evidement il y'a toujours ces cas de merde ou Z tend vers 0,
puis il faut aussi couvrir toute l'étendue de la texture alors ke
la fonction ARCTANgente ne peut couvrir k' un domaine allant de
-PI/2 à +PI/2, il faudra aussi, selon le signe de Z, changer de
formule :
si Z>0 alors Formule normale
sinon
X=128 * (1 + ARCTAN( Sx/Sz ) / PI)
Y=128 * (1 + ARCTAN( Sy/Sz ) / PI)
Voilà, bon, déjà on peut faire du Phong avec une source de
lumière ki tournikote autour de l'objet, c Mamie Nova ki va etre
contente !
(Je soupçonne Mamie Nova d'avoir quitté le métier de Yaourtheuse
pour reprendre le rôle de Germaine LUSTUCRU, vous savez : celle ki
joue la 9ème de Beethoven sur un camion...)
Maintenant, je vais vous faire rire. Si vous avez compris tout
jusk'ici, le reste va vous paraître tellement RIDICULE ke vous
rirez, sisi !
Bon, maintenant, la mode est passée du Phong-shading au Metal
Chrome-Shading, hé bien, j'en ai fait l'expérience pendant ces
vacances d'été, ce soit disant "Metal-shading" ki n'a absolument
RIEN (mais alors RIEN) à voir avec le vrai Metal-shading autrement
appelé Modèle de COOK-TORRANCE, est en fait un simple bidouillage
de la texture de Phong !!!!! Vouski avez la chance d'avoir un mode
TRUE-COLOR 16-Bits sur Clafon, vous allez vous en donner à coeur
joie :
Il suffit de créer la table de Phong normalement, avec le
cosinus à la puissance N (avec N assez grand kan meme) mais ASTUCE
SUPREME, il faut juste placer une texture derrière, un dessin,
n'importe koi, du moment ke ça soit pas du noir...
Vous prenez une quelconque texture de marbre, vous l'éclairez
plus ou moins selon l'amplitude de la fonction COSinus^N et vous
avez une chouette texture prete pour le "metal-shading"...
Voici un p'tit programme pour créer une telle texture. Je l'ai
pas sous la main, je le refais de tete alors y'a p'tet des bugs.
==================================================================
On charge déjà une image de 256*256 ki se prête bien à ce k'on
veut faire dans un buffer de 2*256*256 de large (un pixel = 1 Mot
de 16 Bits en True-Color)...
Ensuite, on applike la zoulie bouclounette :
Power=50
Amplitude=40
FOR y=-64 TO 64
FOR x=-64 TO 64
Distance=SQR(X^2+Y^2)
IF (Distance<65)
Red=DPEEK(Image%+2*(256*(128+y)+(128+x)))
Green=(Red AND $07E0) DIV 32
Blue=Red AND $001F
Red=Red DIV (64*32)
Intensity=Amplitude*(COS(Distance*PI/(2*64))^Power)
Red=MIN(31,Red+Intensity)
Green=MIN(63,Green+2*Intensity)
Blue=MIN(31,Blue+Intensity)
DPOKE
Image%+2*(256*(128+y)+(128+x)),32*(Green+2*32*Red)+Blue
ENDIF
NEXT x
NEXT y
Et on sauve le résultat... J'éspère ne pas m'être planté koi !
On obtient alors la même image qu'à l'origine mis à part k'au
centre on a surimposé une tache de lumière ki semble augmenter
l'intensité des couleurs de la texture...
Pour ceux ki ont accès à un PC et ont pu admirer la dernière
démo de NOOON : STARS (Wonders of the world) ki a fini première à
l'Assembly 95 ou bien la démo d'Halcyon, LIFEFORMS ki est un peu
plus vieille, vous aurez pu constater k'il y'avait une réflexion
d'objets sur d'autres objets en Metal/Phong-Shading.
Hé bien ça s'explike simplement par le fait ke si, par le plus
grand des hasards, vous affichiez un dessin (comme un sprite) sur
la table de Phong calculée au préalable, celui-çi serait déformé
mais malgré tout, on aurait kan meme l'impression ke c un objet ki
se "reflète" dans la texture, on peut retrouver les coordonnées
spatiales de cet objet en faisant la formule inverse de tout à
l'heure, celle avec les ARCTANgentes là...
A insi, pour la démo Lifeforms, Il suffit de faire tourner le
petit cube rouge en dehors de l'écran, dans un petit buffer, puis
d'afficher ce petit buffer à la fois sur l'écran et dans la table
de Phong... C'est aussi simple ke ça... Le tout c'est de calculer
l'endroit précis où afficher cet objet dans la table.
Pour la STARS, la Venus de Milo redécorée façon Barti serait
bien trop chiante à calculer en temps réel donc, c'est à titre
purement hypotétique ke je vais imaginer k'avant de faire
aparaître l'objet sur lekel la Venus se reflète, le Codeur ôôôôôôô
combien imaginatif à déjà précalculé toutes les animations (Un
tour complet de rotation de la Venus dont la période de rotation
est identike à celle du mouvement du cerceau ki tourne autour) Ce
ki se confirme car on peut voir ke la Venus n'effectue ke des
translations sur un plan d'équation Z= ... (Aucun changement de
profondeur) J'éspère ne pas raconter de conneries. (hypotéthikes
néanmoins).
Ke dire de plus sinon ke devrait etre fournie avec cet article
une démonstration du Phong sur ST (et Falcon) plus une routine de
mapping générale pour falcon ki, kelke peu modifiée, vous évitera
déjà de perdre du temps...
------------------------------------------------------------------
Si vous avez des problèmes ou ke vous voulez m'envoyer des
schamallows, témoignez moi votre sympathie à l'adresse suivante :
PATAPOM From IGLOO ou AARDSCHOCK From HeMoroiDs
(sur PC) (sur ATARI)
MAYAUX Benoit
3 Rue Jean LEBAS
54510 TOMBLAINE
Les variantes Pataschock ou Aardpom sont aussi accéptées... Hi
Hi !!! Voilà, j'éspère ke vous avez aprécié cet article ki est kan
même à la pointe du progrès en démos... Je tiens à signaler ke
j'ai mis au point la routine de Phong-Shading de mon côté sans
m'inspirer des travaux des autres pour ceux ki penseraient ke j'ai
bêtement repompé la routine, ce ki se fait de plus en plus un peu
partout, malheureusement...
L'auteur du présent article nie toute responsabilité en cas de
folie dûe à la lecture du dit article.
Ah oui, l'adresse de Bui Tuong PHONG : 9 Allée du petit cratère
123554 ZORGLUB
JUPITER / Système solaire
PS : si vous avez sa vraie adresse, moi je suis preneur hein !!
----------------------------------- AaRDsChock / hMD -------------
[ Retour au sommaire ]