Librairie mode7 pour TI
Intro
Cette librairie est pour le moment au stade expérimental, ce qui signifie qu'elle contient encore quelques bugs.
La version actuelle n'a pas été prévue pour une utilisation dans des jeux ou programmes similaires, elle a uniquement un but de test.
Documentation des variables globales
Cette librairie utilise des variables globales pour stocker certaines informations nécéssaires au rendu. Vous devez bien entendu les initialiser correctement au démarrage du programme
extern unsigned char *m7_map
Le moteur de rendu travaille à l'aide d'une map de 16x16 tiles. Vous devez allouer vous-même l'espace nécéssaire à la map (256 octets) et placer le pointeur dans cette variable pour que le rendu fonctionne
extern unsigned short *m7_tilearray
Bien entendu, pour que la map puisse être utilisée, vous aurez besoin de spécifier une liste de tiles.
Les tiles utilisés par la librairie sont des tiles 16x16 pixels en 4 niveaux de gris, interlacés Light-Dark
extern unsigned short m7_pos_x
extern unsigned short m7_pos_y
Ces deux variables indiquent la position de la caméra sur la map, vous n'êtes pas obligés de les initialiser au début, car elles devraient en principe être initialisées à 0 dès le lancement du programme
extern unsigned char m7_rotation
Cette variable spécifie l'angle que fait la caméra avec l'axe horizontal x.
extern unsigned char m7_firstscan
extern unsigned char m7_lastscan
Ces deux variables spécifient l'espcae dans lequel s'effectuera le rendu. m7_firstscan spécifie la première ligne à dessiner et m7_lastscan spécifie la dernière ligne.
Documentation des fonctions
void mode7_build_tables(unsigned char znear asm("d0"), unsigned char zfar asm("d1"), unsigned char angle asm("d2"));
Cette fonction est une fonction essentielle de la librairie. Elle remplit deux tables qui seront utilisées pour l'affichage en fonction des paramètres que vous lui spécifiez.
Les paramètres znear et zfar spécifient l'intervalle des lignes (relativement à la position de la caméra) qui seront représentées à l'écran.
Le paramètre angle spécifie la taille du champ de vision. Il es impératif que celui-ci soit compris dans l'intervalle ]0..180[ si vous voulez éviter des erreurs de rendu ou bien une division par zéro... :D
La fonction utilise aussi les variables m7_firstscan et m7_lastscan, alorrs soyez sûr de les avoir initialisées avant d'appeller la fonction :)
void mode7_advance(short units asm("d0"));
Cette fonction fait avancer la caméra de
units unités dans la direction pointée par la variable globale
m7_angle. Bien entendu, si la valeur spécifiée est négative, la caméra recule :)
void mode7_change_height(char increment asm("d0"));
Cette fonction est une fonction bonus. Elle modifie légèrement les tables calculées par la fonction
mode7_build_tables pour donner une impression d'altitude au rendu.
Le paramètre
increment spécifie l'augmentation d'altitude. Si ce paramètre est négatif, l'altitude diminuera. Mais faites attention à ne pas diminuer trop au dessous de l'altitude initiale si vous voulez conserver une image correcte :)
void mode7_render(void *plane0 asm("%a0"), void *plane1 asm("%a1"));
Cette fonction est la fonction principale de la librairie. Vous devez l'utiliser pour dessiner l'écran en lui passant comme paramètres les pointeurs vers les plans gris-clair et gris-foncé.