Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteProchaine révisionLes deux révisions suivantes | ||
tutoriaux:3d-theories-et-mathematiques-part-2 [2021/05/03 02:20] – frater | back2root:programmation:3d-theories-et-mathematiques-part-2 [2022/12/27 01:37] – ↷ Liens modifiés en raison d'un déplacement. frater | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== | + | ====== 3D : Théories et Mathématiques - PART 2 ====== |
Ligne 26: | Ligne 26: | ||
Sachant qu'un écran informatique peut afficher des points de 0,0 à sizex, sizey et que les valeurs de x' et y' peuvent quand à elles varier t entre -∞ et +∞, il convient de centrer le 0,0 sur l' | Sachant qu'un écran informatique peut afficher des points de 0,0 à sizex, sizey et que les valeurs de x' et y' peuvent quand à elles varier t entre -∞ et +∞, il convient de centrer le 0,0 sur l' | ||
- | x' = x' - (sizex/2) | ||
- | y' = y' - (sizey/ | ||
- | if ((x'>=0) and (x'<sizex) | + | <code c> |
- | draw_pixel(x', | + | x_screen |
+ | y_screen | ||
+ | if ((x_screen> | ||
+ | draw_pixel(x_screen, | ||
+ | </ | ||
==== Projection Simple dit aussi Projection du pauvre ==== | ==== Projection Simple dit aussi Projection du pauvre ==== | ||
Si l'on désire représenter un point 3D en 2D, après transformation(s), | Si l'on désire représenter un point 3D en 2D, après transformation(s), | ||
- | x' = x / z | ||
- | y' = y / z | ||
- | Cette projection transforme un point 3D en 2D en tenant compte de l' | + | <WRAP center round box 60%> |
+ | |||
+ | <m 14>x prime = x / z</ | ||
+ | |||
+ | <m 14>y prime = y / z</ | ||
+ | </ | ||
+ | |||
+ | Cette projection transforme un point 3D en 2D en tenant compte de l' | ||
C'est la technique qui est utilisée en peinture (technique du "point de fuite" | C'est la technique qui est utilisée en peinture (technique du "point de fuite" | ||
Ligne 49: | Ligne 56: | ||
<code c> | <code c> | ||
- | if (z==0) | + | if (z_screen==0) |
{ | { | ||
- | | + | |
- | | + | |
} | } | ||
else | else | ||
{ | { | ||
- | | + | |
- | | + | |
} | } | ||
</ | </ | ||
Ligne 68: | Ligne 75: | ||
la projection sera dès lors calculée avec les formules suivantes | la projection sera dès lors calculée avec les formules suivantes | ||
- | x' | + | |
- | y' | + | <WRAP center round box 60%> |
+ | <m 14>x prime = x*(ez/z) + ex</m> | ||
+ | |||
+ | <m 14>y prime = y*(ez/z) + ey</ | ||
+ | </ | ||
Si l'on considère que ex = -(sizex/2) et ey = -(sizey/2), et que ez=1, alors nous retombons sur la formule de la projection du pauvre... qui tiens nativement compte du centrage de l' | Si l'on considère que ex = -(sizex/2) et ey = -(sizey/2), et que ez=1, alors nous retombons sur la formule de la projection du pauvre... qui tiens nativement compte du centrage de l' | ||
Ligne 81: | Ligne 92: | ||
Si l'on désire appliquer les transformations en prenant en compte la position de l' | Si l'on désire appliquer les transformations en prenant en compte la position de l' | ||
- | Soit: | + | |
+ | <WRAP center round info 100%> | ||
x,y,z : coordonnées cartésienne du point a transformer | x,y,z : coordonnées cartésienne du point a transformer | ||
+ | |||
ox,oy,oz : coordonnées cartésienne, | ox,oy,oz : coordonnées cartésienne, | ||
+ | |||
ax,ay,az : angles de vue , ces angles définissent la direction du regard à partir du point de l' | ax,ay,az : angles de vue , ces angles définissent la direction du regard à partir du point de l' | ||
+ | </ | ||
Alors la matrice de transformation devient | Alors la matrice de transformation devient | ||
- | |x' | ||
- | |y'| = | 0 cos(ax) sin(ax)| * | | ||
- | |z' | ||
- | Note: | + | <WRAP center round box 95%> |
+ | <m 14> | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | delim{|}{ | ||
+ | ) | ||
+ | </ | ||
+ | </ | ||
- | Dans l' | ||
- | Si l'on n'a pas d' | + | |
- | |x' | + | <WRAP center round tip 100%> |
- | |y'| = |y| - |oy| | + | Dans l' |
- | |z' | + | |
+ | Si l'on n'a pas d' | ||
+ | |||
+ | <WRAP center round box 60%> | ||
+ | <m 14> | ||
+ | delim{|}{ matrix{4}{1} | ||
+ | delim{|}{ matrix{4}{1} | ||
+ | delim{|}{ matrix{4}{1} | ||
+ | </ | ||
+ | </ | ||
Mais il ne faut pas oublié que l' | Mais il ne faut pas oublié que l' | ||
- | |x' | + | |
- | |y'| = |y| | + | <WRAP center round box 60%> |
- | |z' | + | <m 14> |
+ | delim{|}{ matrix{4}{1} | ||
+ | delim{|}{ matrix{4}{1} | ||
+ | </ | ||
+ | </ | ||
Et l'on retombe bien sur une matrice toute simple. | Et l'on retombe bien sur une matrice toute simple. | ||
+ | </ | ||
+ | |||
===== Conclusions ===== | ===== Conclusions ===== | ||
Ligne 113: | Ligne 149: | ||
vec quelques définitions voici les formules que nous allons implémenter. | vec quelques définitions voici les formules que nous allons implémenter. | ||
- | soit: | + | <WRAP center round info 95%> |
ox, | ox, | ||
+ | |||
+ | w : 1 (valeur de 1 pour simplifier) | ||
+ | |||
x[],y[],z[] : coordonnées cartésienne des points a transformer | x[],y[],z[] : coordonnées cartésienne des points a transformer | ||
- | ex, | + | |
- | avec ex=-(sizex/ | + | ex, |
ax, | ax, | ||
- | cx = cos(ax), sx = sin(ax), cy = cos(ay), ... | + | |
+ | cx = cos(ax), sx = sin(ax), cy = cos(ay), ... | ||
nx, | nx, | ||
+ | </ | ||
pseudo code: | pseudo code: | ||
+ | |||
+ | < | ||
foreach | foreach | ||
{ | { | ||
Ligne 136: | Ligne 181: | ||
y' = ny*(ez/nz) + ey | y' = ny*(ez/nz) + ey | ||
} | } | ||
+ | </ | ||
+ | |||
+ | <nspages back2root/ | ||
====== Références ====== | ====== Références ====== | ||
+ | <WRAP round box> | ||
+ | <WRAP group> | ||
+ | <WRAP column> | ||
+ | {{ back2root: | ||
+ | </ | ||
+ | <WRAP column> | ||
**3D et vrai Relief** | **3D et vrai Relief** | ||
- | J.J.Meyer | + | |
+ | J.J.Meyer | ||
ISBN: 2-7091-0990-5 | ISBN: 2-7091-0990-5 | ||
+ | |||
https:// | https:// | ||
+ | https:// | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP group> | ||
+ | <WRAP column> | ||
+ | {{ back2root: | ||
+ | </ | ||
+ | <WRAP column> | ||
**PC Interdit 2eme édition Windows 95 & Jeux 3D** | **PC Interdit 2eme édition Windows 95 & Jeux 3D** | ||
+ | |||
Boris Bertelsons, Mathias Rasch et Jan Erik Hoffmann | Boris Bertelsons, Mathias Rasch et Jan Erik Hoffmann | ||
+ | |||
ISBN: 2-7429-0500-6 | ISBN: 2-7429-0500-6 | ||
+ | |||
https:// | https:// | ||
+ | https:// | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <WRAP group> | ||
+ | <WRAP column> | ||
+ | {{ back2root: | ||
+ | </ | ||
+ | <WRAP column> | ||
**Mathematics of 3D Graphics** | **Mathematics of 3D Graphics** | ||
+ | |||
Juan David Gonzalez Cobas | Juan David Gonzalez Cobas | ||
+ | |||
Universidad de Oviedo | Universidad de Oviedo | ||
+ | |||
Blender Conference 2004 | Blender Conference 2004 | ||
+ | |||
https:// | https:// | ||
- | |||
- | http:// | ||
https:// | https:// | ||
- | https:// | + | |
+ | https:// | ||
https:// | https:// | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ |