Obligement - L'Amiga au maximum

Samedi 27 avril 2024 - 03:22  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


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]