Obligement - L'Amiga au maximum

Jeudi 13 décembre 2018 - 04:49  

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 - Préprocesseur générant des objets filaires pour Anim
(Article écrit par Pascal Amiable et extrait d'Amiga News Tech - novembre 1990)


Chers lecteurs et lectrices, bonjour. Ce mois-ci, je vous propose de réaliser un préprocesseur d'objets pour le programme d'animation en filaire "Anim" que nous avons étudié ensemble il y a deux mois. Ce préprocesseur va nous décharger de la fastidieuse opération de création d'objets puisqu'il va générer les fichiers de points et de lignes à partir de quelques données de base. Pour étayer mon propos, je vous propose un exemple de programme qui va générer un tore.

Avant d'étudier cet exemple de préprocesseur, je vais effectuer un bref rappel sur la structure des fichiers de points et de lignes qui composent notre objet. Le fichier de points (point.dat) contient la liste des coordonnées X,Y,Z de chaque point 3D de l'objet. Sa structure est la suivante :
  • 1ère ligne <N> (nombre de points)
  • 2e ligne <X1> <Y1> <Z1> (coordonnées du 1er point)
  • 3e ligne <X2> <Y2> <Z2> (coordonnées du 2e point)
  • ...
  • N+1ère ligne <Xn> <Yn> <Zn> (coordonnées du Ne point)
Le fichier de lignes (ligne.dat) contient, quant à lui, les numéros des points origines et extrémités de chaque segment composant l'objet. Sa structure est la suivante :
  • 1ère ligne <M> (nombre de lignes)
  • 2e ligne <Origine1> <Extrémité1> (1er segment)
  • 3e ligne <Origine2> <Extrémité2> (2e segment)
  • ...
  • M+1ère ligne <OrigineM> <ExtrémitéM> (Me segment)
Ce petit rappel effectué, nous allons passer aux choses sérieuses. L'idée de départ consiste à générer un objet complexe à partir d'un nombre restreint de données à l'origine. L'exemple que nous allons étudier est celui d'un tore. Un tore est défini mathématiquement par trois nombres, R1 représente le petit rayon du tore, R2 représente le grand rayon (ou rayon central) du tore et n le nombre de points également répartis sur le cercle central et sur le petit cercle.

C
Figure 1

La première étape de la programmation va consister à générer le fichier de points. Il nous faut calculer pour commencer le nombre de points de l'objet. C'est très simple puisque n représente à la fois le nombre de points répartis sur le petit cercle et le grand cercle. Le nombre de points total de l'objet est dont n*n.

Nous allons maintenant calculer les coordonneés X, Y, Z de chaque point de l'objet. Le grand cercle du tore a pour équation paramétrique :

X2 = R2*cos(alpha)
Y2 = R2*sin(alpha)
Z2 = 0

Ces coordonnées X2,Y2,Z2 représentent également les coordonnées des centres des petits cercles de notre tore. Dans le cas où alpha vaut zéro les équations d'un point appartenant au petit cercle sont :

x = R1*cos(beta)+R2
y = 0
z = R1*sin(beta)

Lorsque alpha varie décrivant notre tore, on calcule facilement les coordonnées d'un point quelconque de ce tore en multipliant les coordonnées (x,y,z) ramenées en alpha = 0 par une matrice de rotation d'axe z et d'angle alpha. Ce qui nous donne les équations suivantes pour les coordonnées d'un point (X',Y',Z') d'un point du tore :

X' = x*cos(alpha)
Y' = x*sin(alpha)
Z' = z

Nous avons là tous les éléments nécessaires à la génération du fichier de points. Ce problème étant réglé, nous allons nous pencher sur la manière dont nous allons relier ces points par des segments et ainsi créer notre objet. Il s'agit de la création du fichier "ligne.dat".

Pour chaque segment de notre tore, il faut déterminer les numéros des points origines et extrémités le caractérisant. Le maillage du tore s'effectue en deux étapes. Chaque petit cercle du tore est défini par n points, ces points sont connectés entre eux par n segments représentés par des couples de points. Par exemple, pour le premier petit cercle ces couples sont (j,j+1), j variant de 0 à n-2, le couple (n-1,0) clôturant le cercle. Pour un cercle quelconque i, les couples sont (i*n+j,i*n+j+1), j variant toujours de 0 à n-2. Le segment de clôture est dans ce cas (i*n+n-1,i*n). L'algorithme de création des segments associés aux petits cercles se détermine à partir des constatations ci-dessus.

C

Nous avons donc tous les segments associés aux petits cercles, il s'agit donc d'en faire de même pour les segments liés aux grands cercles. Pour le premier grand cercle un segment est défini par un couple (i*n,i*n+n), i variant de 0 à n-2. Le segment de clôture du cercle associé est (n*(n-1),0). Pour un grand cercle quelconque, ce couple devient (i*n+j,i*n+j+n) avec en clôture (n*(n-1)+j,j). L'algorithme de calcul de ces différents couples est donc :

C

Dernier point à déterminer : le nombre de segments liés à un objet. Nous avons n*n segments liés aux petits cercles et autant pour le grand cercle. Le nombre de segments total est donc 2*n*n.

A partir de toutes ces explications, il est très facile de réaliser un petit programme en C qui génère ce tore. Les fichiers tpoint.dat et tigne.dat pouvant être ensuite relus par le programme Anim afin d'être visualisés à l'écran. Une petite remarque toutefois ; n'oubliez pas de redimensionner les tableaux de points et de lignes du programme Anim en fonction des objets que vous allez manipuler.

C
C


[Retour en haut] / [Retour aux articles]