Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : C - Graphismes 3D en C (notions de base)
(Article écrit par Pascal Amiable et extrait d'Amiga News Tech - avril 1990)
|
|
Chers lecteurs et lectrices, bonjour ! Je me présente, Herr Doktor Von
GlutenStimmellmDorf. Pendant les mois qui vont suivre je vais vous parler
infographie (terme barbare né de la fusion des mots "informatique" et "graphique")
et plus particulièrement de la manipulation et de l'affichage d'objets
graphiques en trois dimensions sur l'écran de votre Amiga.
La série d'articles
Contrairement à ce que certains pourraient vous dire, ce domaine est
accessible à tous (sinon, je ne serais pas là pour vous en parler). Il ne
nécessite que l'apprentissage de quelques notions de base. Avant de me lancer à corps perdu dans cet espace inconnu (roulement
de tambours), je vais vous présenter le plan de cette série d'articles.
- Notions de base : les différents systèmes de coordonnées. Les objets
élémentaires le point et le segment de droite. Comment créer à partir de
ces éléments des objets complexes.
- Programmation de base : comment ouvrir un écran sur Amiga. La
création de fichiers objets sur disque. Comment afficher un objet à l'écran.
- Les transformations : les différentes transformations géométriques et
projections. Comment les combiner pour voir la vie sous un angle différent.
- Notions avancées : la caméra virtuelle et les premiers principes d'animation.
- Animation suite & fin : création de scripts et astuces de programmation.
- C'est la surprise.
Le langage de programmation qui servira de support à cette série d'articles est le langage C.
Pourquoi le C me direz-vous? Je vous répondrai en deux mots : parce que ! Sur ce, commençons sans
plus attendre.
Notions de base
Avant de parler des objets graphiques, il est nécessaire d'expliquer la notion de système de coordonnées. En effet tout
objet graphique est représenté dans un système de coordonnées. Par exemple un point sur l'écran est créé par deux
coordonnées (X,Y) représentant sa position à l'écran. C'est ce que nous appellerons le système de coordonnées écran.
Ce système va nous permettre d'afficher sur l'écran de la machine un objet. Pour représenter un objet dans
l'espace nous avons besoin de trois coordonnées (X,Y,Z). Ce sont les coordonnées cartésiennes.
Ce système de coordonnées suffit normalement à représenter n'importe quel objet dans l'espace. Il existe toutefois
un troisième système (artificiel), le système de coordonnées homogènes qui consiste à introduire une quatrième
coordonnée dénommée W que nous fixerons dans un premier temps à la valeur 1. Cette quatrième coordonnée facilitera la
composition des transformations ce qui vous le verrez nous sera bien utile.
Maintenant que nous avons étudié les différents systèmes de coordonnées, nous allons pouvoir nous attaquer aux
objets graphiques de base. Nous nous bornerons à deux types d'objets simples, le point et le segment de droite,
qui nous permettront de définir, plus tard, des objets complexes.
Le point est toujours représenté par ses coordonnées, différentes, selon le système dans lequel on se trouve. Ainsi
dans l'espace écran un point est représenté par deux entiers positifs que l'on nommera XE et YE. Dans l'espace cartésien
3D, nous avons besoin de trois nombres réels X3D, Y3D, Z3D. Enfin en coordonnées homogènes quatre réels sont nécessaires
XH3D, YH3D, ZH3D, WH3D.
Si l'on veut codifier cela sous forme compréhensible par notre chère machine, on déclarera un point sous la forme
d'un tableau de 2, 3 ou 4 éléments.
- Pour un point écran : unsigned short PointE[2];.
- Pour un point dans l'espace cartésien 3D : float Point3D[3];.
- Pour un point en coordonnées homogènes 3D : float PointH3D[4];.
A partir de ces points qui sont les plus petites entités graphiques, nous allons définir le deuxième objet
de base : le segment de droite. Un segment de droite est représenté par deux points, le point origine et
le point extrémité.
Selon le système de coordonnées utilisé, ces deux points seront des points écran, des points 3D ou 3D homogènes.
En C, on déclarera un segment de droite comme un tableau de deux pointeurs se positionnant sur les points origine et extrémité.
- Pour un segment écran : unsigned short *ligne[2];.
- Pour un segment 3D ou 3D homogène : float *ligne3D[2], *ligneH3D[2];.
Ensuite, on initialise ligne[0] et ligne[1] avec l'adresse des points extrémité et origine soit par exemple en coordonnées 3D.
float Point_origine[3],Point_extremite[3];
float *Ligne[2];
Ligne [0] = Point_origine;
Ligne[1] = Point_extremite;
|
A partir de ces deux entités graphiques, il est désormais très facile de
représenter un objet graphique complexe. Prenons l'exemple d'une pyramide à base carrée :
Cet objet est créé à partir de cinq points: (P0, P1, P2, P3, P4) et 8 lignes (L0(P0,P1), L1(P0,P2), L2(P0,P3),
L3(P0,P4), L4(P1,P2), L5(P2,P3), L6(P3,P4), L7(P4,P1)).
On peut représenter nos points par un tableau à deux dimensions. Exemple :
unsigned short PointE[100][2]; /" cent points écran "/
|
Ou :
float PointH3D[100][4] /* cent points en coordonnées homogènes 3D */
|
...et nos segments de droite par un tableau à deux dimensions de pointeurs. Exemple :
float *LigneH3D[100][2] /* cent lignes en coordonnées homogènes 3D "/
|
Il ne reste plus qu'à initialiser le tout dans le programme, par exemple lors de la déclaration des
variables (l'objet est alors créé). Si on reprend l'exemple de la pyramide en coordonnées homogènes 3D,
on aura :
float point[5][4] = {{5,5,20,1}, {0,0,0,1}, (0,10,0,1}, {10,10,0,1}, {10,0,0,1}};
float *ligne[8][2] = {{point[0],point[1]},{point[0],point[2]},{point[0],point[3]},{point[0],point[4]},
{point[1],point[2]},{point[2],point[3]},{point[3],point[4]},{point[4],point[1]}};
|
Comme vous pouvez le voir, c'est très simple. On fera bien entendu de même avec les autres systèmes de coordonnées.
Ainsi se termine ce premier article sur le 3D. Le mois prochain nous entamerons une phase importante du
programme puis nous verrons comment ouvrir un écran, comment tracer des points et des segments de
droite et pour terminer, nous afficherons un objet 3D à l'écran grâce à une transformation simple :
la projection dimétrique. Bonne digestion et à dans un mois.
|