Obligement - L'Amiga au maximum

Vendredi 21 septembre 2018 - 17:34  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


Jeux Amiga

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


Trucs et astuces

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


Glossaire

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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


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.
  1. 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.
  2. Programmation de base : comment ouvrir un écran sur Amiga. La création de fichiers objets sur disque. Comment afficher un objet à l'écran.
  3. Les transformations : les différentes transformations géométriques et projections. Comment les combiner pour voir la vie sous un angle différent.
  4. Notions avancées : la caméra virtuelle et les premiers principes d'animation.
  5. Animation suite & fin : création de scripts et astuces de programmation.
  6. 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.

C

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.

C

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é.

C

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 :

C

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.


[Retour en haut] / [Retour aux articles] [Article suivant]