Obligement - L'Amiga au maximum

Lundi 27 mars 2017 - 20:23  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · 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 in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


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


Soutien

N'hésitez pas à soutenir le projet Obligement



Contact

David Brunet

Courriel

 


Test de Wazp3D
(Article écrit par Alain Thellier - mai 2008)


C'est quoi ?

Wazp3D est une réimplémentation de la bibliothèque bien connue Warp3D. C'est-à-dire que Wazp3D a été réécrit à partir des spécifications de la documentation développeur de Warp3D. Ainsi, les fonctions ont les mêmes noms, les mêmes paramètres et sont censées (ou au moins essayent de) fonctionner à l'identique. Donc on peut dire que c'est comme Mesa vis-à-vis d'OpenGL : pas un portage "officiel" mais vu de l'utilisateur ou du programmeur, c'est censé fonctionner à l'identique (compatible au niveau des binaires).

Pourquoi cette bibliothèque ?

Avec l'équipe de Tales Of Tamar, j'ai essayé de programmer une carte 3D (dite "TOT3D") pour ce jeu de stratégie, cela résultait un peu comme un jeu d'échec en 3D. C'était basé sur OpenGL et je voulais le porter sur Amiga/Warp3D.

Wazp3D

Je voulais le compiler dans WinUAE et sur MorphOS. Malheureusement, à cette époque, l'adaptateur QuarkTex était bogué et fonctionnait mal sur ma configuration PC. Aussi, pour la version WinUAE, je "wrappais" les fonctions de tracé 3D (Warp3D) vers mes propres routines de tracé logiciel (SOFT3D). Un jour, j'en ai eu marre et j'ai "wrappé" mes propres routines SOFT3D pour qu'elles aient le même aspect que celles de Warp3D ainsi les sources redevenaient les mêmes pour tout système compatible AmigaOS.

En 2006, à cause de difficultés personnelles et familiales, Arkadius Zielinski (concepteur 3D) et moi (programmeur) ne faisions plus beaucoup avancer TOT3D. Ainsi, les personnages 3D ne sont toujours pas tous faits et il faudrait de nouveau un programmeur pour intégrer TOT3D au reste du projet "Tales of Tamar" (pour l'instant TOT3D est un programme séparé qui sait lire/afficher des fichiers cartes). En fait, on est plus très sûr que ce projet ne soit jamais fini et je ne peux décemment le diffuser puisque j'ai reçu de Martin Wolf (inventeur de Tales of Tamar) un peu d'argent pour le développer. Bref, n'ayant plus trop l'envie de programmer sur TOT3D, je me suis lancé dans la finalisation de ma bibliothèque : ajouter le restant des fonctions Warp3D, notamment celles que je n'utilisais pas.

Cela paraît énorme de réécrire les 88 fonctions mais heureusement beaucoup de fonctions se ressemblent : une pour tracer un triangle/une autre une série de triangles, une pour lire un point de Zbuffer/une pour écrire une ligne de Zbuffer, etc. En fait, c'est assez bourrin de faire la plupart des fonctions qui sont surtout du copier/coller ; le plus difficile c'est de vérifier que cela fonctionne correctement (paramètres, retour d'erreur, etc.), c'est d'ailleurs pour cela qu'il y a un débogueur intégré. ;-)

En fait, il y a vraiment que trois gros morceaux dans Wazp3D :
  • La gestion des structures (contexte et textures), bien vérifier que tout se met bien à jour correctement, que les structures en mémoire s'allouent bien, se chaînent et sont bien libérées au final.
  • Les "states" qui sont des interrupteurs. Par exemple, j'active le brouillard, je désactive le texturage et maintenant comment je dois tracer ?
  • Le rasterizer qui vraiment trace les pixels.
Ça marche comment ?

C'est basé sur un moteur de rendu logiciel (un rasterizer) que j'avais commencé à écrire il y a plusieurs années (SOFT3D). Et en fait tout les appels Warp3D sont convertis finalement en appels vers SOFT3D qui, lui, trace les triangles. Car, à la base, toute carte 3D ne trace que des triangles 3D c'est-à-dire une surface reliant trois points avec des coordonnées X Y Z. Le Z donne la profondeur : des triangles peuvent donc se superposer selon leur Z, si le brouillard commence en Z=0,5 et que le triangle est entre 0,0 et 1,0 il sera "brouillardé", etc. Un triangle n'est jamais que des lignes horizontales de pixels reliant un côté à l'autre : tracer ces segments c'est la rastérisation et c'est juste tracer des pixels les uns après les autres. Idem avec de la couleur les points ont alors des valeurs de couleur RGBA. Si le début du segment est rouge et la fin blanche, alors il suffit de calculer le "pas" (blanc-rouge)/distance et de l'ajouter à chaque pixel pour linéariser le calcul des pixels. Cela reste vrai avec une texture car les points ont alors des coordonnées dites U V sur la texture. J'appelle ce pas "Xdelta" et, en gros, rastériser c'est à partir du premier point obtenir les suivants ainsi :

z=z + Xdelta.z ;
u=u + Xdelta.u ;
v=v + Xdelta.v ;
R=R + Xdelta.R ;
G=G + Xdelta.G ;
B=B + Xdelta.B ;
A=A + Xdelta.A ;

A est la composante alpha des couleurs ou des textures, c'est leur transparence. Pour une texture (ou une couleur simple) avec Alpha=255 c'est opaque donc on affiche le pixel de la texture =facile. Avec Alpha=0 c'est la transparence totale, là c'est facile aussi, on affiche le pixel du fond. Pour les autres valeurs Alpha donne le ratio de transparence, donc généralement le résultat=(alpha/255)*Texture+(1-Alpha/255)*Fond, cette fonction de "blending" est appelée W3D_ONE_MINUS_SRC_ALPHA, c'est la seule de Wazp3D.

Le Zbuffer, pour la gestion des faces cachées, est un tableau de la taille de l'écran où se stockent les valeurs de Z des triangles tracés. Au moment du tracé du triangle suivant, si les pixels ont des valeurs Z inférieures (s'ils sont devants), alors ils s'affichent. Le "culling" n'affiche que les polygones vus de face dont les points sont dans l'ordre "ClockWise" et donc cache les polygones vus de dos (les faces cachées).

En gros Warp3D (ou Wazp3D) est capable de tracer des primitives : des lignes, des points, de gros points, des triangles, des séries de triangles (tristrip, trifan) d'une couleur unie ou dégradée (Gouraud) ou avec une texture, un brouillard ou même texturé et coloré ensemble (blending) : ceci donne la base d'un modèle d'éclairage avec, par exemple, un côté d'un triangle teinté d'un dégradé de rouge (<=> éclairé par une lampe rouge).

Parmi les choses que Wazp3D ne sait pas faire (mais Warp3D si) :
  • Le "mipmapping" : c'est-à-dire utiliser des versions réduites des textures pour les points éloignés.
  • Le "filtering : faire une moyenne des pixels des textures vu de près.
  • Le "stencil" (peu utilisé) : qui est un tableau de la taille de l'écran où se stockent les pixels tracés (=masque) et qui permet de découper ou redessiner certaines parties tracées.
  • Le "stippling" : un tramage des pixels.
  • Les fonctions de Zbuffer autres que Z > Zbuffer, etc.
Warp3D n'est qu'un rasterizer, il ne contient pas les fonctions "lighting & geometry" contrairement à OpenGL. Les fonctions de géométrie d'OpenGL sont peu de choses : on définit essentiellement une rotation, une translation, un redimensionnement de la scène et ensuite toute primitive tracée subira cette transformation (=ces points X Y Z seront multipliés avec cette matrice de transformation). A cela s'ajoutera un calcul de perspective (c'est-à-dire les valeurs X Y rétrécissent selon Z). Pour l'éclairage d'OpenGL, des lampes colorées sont définies et selon leurs positions et leurs angles vis-à-vis des normales des points du triangle, elles vont influencer les couleurs de ces points et donc, au final, colorer le triangle comme une lampe.

Et en pratique ?

Si vous avez déjà Warp3D, vous pouvez le sauvegarder avec la commande suivante :

copy Libs:Warp3D.library TO Libs:Warp3D.library.sav

On installe Wazp3D ainsi :

copy Wazp3D.library TO Libs:Warp3D.library

Wazp3D est très lent, chaque pixel est calculé par le 68040. Il faut donc une grande puissance processeur, idéalement un UAE avec un JIT très rapide pour atteindre une dizaine de FPS. La plupart des programmes 3D utilisant Warp3D disponibles sur Aminet sont désormais compatibles avec Wazp3D : aminet.net/search?readme=warp3D&arch[]=m68k-amigaos. De même, les programmes utilisant MiniGL ou StormMesa sont désormais compatibles (environ 200 démos disponibles). Mais StormMesa a besoin de l'installation de ces propres bibliothèques pour fonctionner (agl.library, agle.library, aglu.library, aglut.library, aglsmap.library).

Il existe une autre émulation de Warp3D, c'est QuarkTex qui est une belle extension de WinUAE (mais qui ne fonctionnait pas sur toutes les configurations PC). Il a besoin de WinUAE, d'OpenGL et d'une carte 3D. QuarkTex est bien plus rapide car il utilise le matériel 3D du PC et s'il fonctionne bien pour vous ainsi, alors n'essayez même pas Wazp3D.

Warp3D : Programme 3D --> Warp3D --> AmigaOS --> Pilote --> Carte 3D.
QuarkTex : Programme 3D --> Warp3D --> AmigaOS --> WinUAE (Windows) --> Warp3D.alib --> OpenGL --> Pilote --> Carte 3D.
Wazp3D : Programme 3D --> Warp3D --> AmigaOS --> 68040.

Quelle compatibilité ?

Wazp3D n'est pas limité à WinUAE, il peut tourner sur n'importe quel Amiga à base de 68040, c'est juste la vitesse qui lui manque. Donc il faut effectivement un UAE (quelconque) mais très rapide. Ainsi, il a été utilisé avec succès sur Amithlon. Et comme les sources sont là, alors si vous savez faire une "library" vous pouvez le porter sur n'importe quel système compatible AmigaOS, sur n'importe quel processeur (Pegasos, Amiga PowerPC, etc.).

Ainsi, il a déjà été porté sur AROS et fait désormais partie du CD AROS pour x86 :-D. Enfin, le débogueur intégré permet des trucs impossibles avec Warp3D comme tracer un programme, "dumper" ou changer les textures, etc.

Warp3D trace directement dans une bitmap mais Warp3D trace lui toujours dans un tampon RGBA 32 bits de la taille de la bitmap. Aussi Wazp3D doit trouver le meilleur moment pour copier ce tampon dans la bitmap (=Update), il y arrive plus ou moins bien selon les programmes 3D d'où quelques légères incompatibilités.

Le programme 3D peut également modifier la bitmap (l'effacer, écrire dedans) grâce à AmigaOS sans que la partie Warp3D ne soit au courant. Pour corriger au cas par cas ces incompatibilités, le programme Wazp3D-Settings permet de modifier les paramètres de la bibliothèque (notamment l'Update, l'effacement de la bitmap ou du tampon). Voir sur thellier.free.fr/Wazp3D.htm toutes les options possibles.

Malgré son imperfection, Wazp3D permet des trucs impossibles avec Warp3D comme tracer le déroulement d'un programme, "dumper" ou changer les textures, ou encore "dumper" ce qui a été tracé sous forme de fichier texte au format .OBJ/.MTL (un format très répandu dans les programmes 3D). On peut développer pour Wazp3D en utilisant l'archive développeur standard de Warp3D (Warp3Ddev-4.2a.lha) notamment en partant de l'exemple WarpTest.c mais la gestion des bitmap/écran/souris demeure fastidieuse (surtout avec ce programme d'exemple qui n'est pas parfait). Donc le plus simple est peut-être de programmer en OpenGL avec StormMesa qui inclut GLUT (gestion des fenêtres/souris) en utilisant uniquement les supers fonctions glDrawArrays() ou glDrawElements() qui permettent de tracer une série de triangles (c'est-à-dire un objet) en une seule passe. L'approvisionnement en objets 3D (presque) près à tracer pouvant alors se faire avec certaines extensions d'applications 3D qui exportent du format .OBJ ou du format .RTG. Parmi les programmes fonctionnant le mieux avec Wazp3D citons les petits jeux AlyBox, Bzone ou glSokoban ou les démos comme GlutMech et Atlantis (de StormMesa), Engine (de Warp3D) ou le magazine The Vague.

Wazp3D Wazp3D
Alybox et The Vogue

Mise à jour : Wazp3D a été porté sur AmigaOS 4.x en juillet 2011 et sur MorphOS en janvier 2014.

Nom : Wazp3D.
Développeur : Alain Thellier.
Genre : émulateur Warp3D.
Date : 2008.
Configuration minimale : AmigaOS 3.x, AmigaOS 4.x, AROS ou MorphOS, processeur rapide.
Licence : freeware.
Téléchargement : Aminet.


[Retour en haut] / [Retour aux articles]