|
La programmation graphique dans les jeux vidéo sur PC. |
Dans les articles qui suivent, nous apprendrons à effectuer des
sorties graphiques sur PC qui soient adaptées aux jeux vidéo.
A terme, vous serez capable de mettre au point un moteur 3D du style de
celui qui figure à cette
page. La programmation graphique des jeux vidéo diffère de la programmation graphique standard par sa fluidité. Imaginez ce que serait Doom si chaque image mettait plusieurs secondes à s'afficher. Il en résulte un certain nombre de contraintes : Les régles du programmeur de jeu sont : Peut on utiliser les classes C++ dans ce genre de programmation? La
souplesse apportée par les classes facilite tellement la programmation
qu'il serait dommage de s'en priver. Mais d'un autre côté,
les classes rajoutent un overlay qui ralentit les sauts aux différentes
routines. Dans la suite de cette article, nous allons étudier les différents mode graphique utilisé et la principale interface entre la carte graphique et le programmeur, à savoir le bios vidéo. Les prochains articles traiteront respectivement de : I) Les modes graphiques utilisés dans les jeux vidéo.Traditionnellement, les jeux vidéo utilisent 4 modes graphiques differents, le mode 13h, le mode X et les modes super VGA 256 couleurs 640 X 400 et 640 X 480 (Ces deux derniers se programmant de la même façon, il seront appelés SVGA dans la suite des articles). Tous ces modes ont des avantages et des inconvenients que nous allons étudier. Tous ces modes affichent 256 couleurs au choix parmis 262144 1) le mode 13hC'est le mode VGA traditionnel, 320 X 200, 256 couleurs. A une résolution faible, il associe une grande variete de couleur. La memoire requise pour le faire fonctionner est 64000 octet et tiens donc entièrement dans la fenêtre d'accés situé en A000h. Trés rapide, il est de plus le mode graphique le plus facile à utiliser, toutes cartes confondue. 2) Le mode XC'est le mode roi des programmeurs de jeux, 320 X 200, 256. Ce n'est
pas un mode standard, d'ou son nom de X. N'étant pas pris en charge
par le bios, il faut donc l'activer en manipulant soi même les registres
de la carte VGA. De plus, sa memoire n'est plus organisée linéairement
comme pour le mode 13h, il est donc plus difficile à utiliser. 3) Les modes SVGALes modes SVGA comprennent les modes 16 couleurs à partir de
800 X 600, 256 couleurs à partir de 640 X 400 et les modes à
plus de 256 couleurs (HiColor et True Color). Nous ne parlerons ici que
des modes 256 couleurs bien que certaines choses puissent s'appliquer aux
autres. Fondamentalement, les modes SVGA sont organisés de la même
façon que le mode 13h, avec une mémoire linéaire.
Mais cette mémoire a une taille supérieure aux 64 Ko de la
fenêtre d'accés et ne peut donc pas être adressée
en une seule fois. Dans ces modes, la mémoire est donc paginée,
les routines d'accés sont donc singulierement compliquées.
D'autre part, le nombre de pixels affichés à l'ecran en fait
des modes beaucoup plus lent que les autres. Enfin, sur les vieilles cartes
SVGA, ils ne sont pas normalisés. Le problème a été
résolue avec la norme VESA pour les modes les plus courants. Le
principal avantage de ces modes est d'une part leur résolution élevée
et d'autre part que ces modes fonctionnant de la même façon,
les mêmes routines peuvent fonctionner dans tous. (Ces routines peuvent
également être utilisées en mode 13h, si ont considère
comme un mode SVGA avec une seule page mémoire, mais elles seront
bien moins efficaces et beaucoup plus compliquées que des routines
écrites spécialement pour le mode 13h). Enfin, il faut signaler
que la structure de la mémoire permet de tamponner facilement les
routines en EMS. II) Le bios vidéoLe bios vidéo est l'interface principale entre l'utilisateur et la carte graphique. Bien que trop lent pour nos besoins, il prodigue des fonctions irremplaçable. L'interruption du bios est accessible a travers l'interruption 10h. Le registre AH doit contenir le numero de la fonction du bios à appeler. En pratique seules quelques fonctions sont utiles dans notre cas.
1) Reconnaitre une carte VGAAvant d'utiliser un mode graphique, il faut d'abord s'assurer que ce
mode existe. Le mode 13h existe sur toutes les cartes VGA. c'est la fonction
1Ah du bios vidéo, chargé de la gestion des systèmes
multicartes, qui permet d'identifier une telle carte. Dans notre cas, seule
la sous fonction 0 est utile. La fonction 1Ah n'existe que si une carte
VGA ou plus est installée dans le système. Pour l'utiliser,
il faut mettre le numéro de fonction 1Ah dans AH et de sous fonction
0 dans AL puis d'appeller l'interruption 10h. En retour, si le registre
AL contient 1Ah, c'est qu'une carte VGA est installée sur le système
:
En prime, la fonction retourne deux valeurs en BH et BL correspondant aux cartes graphique installées sur le système, la carte active etant en BL. Les valeurs possibles sont :
Si vous avez detecté une carte VGA, vous pouvez utiliser le mode 13h. 2) Activer le mode 13hLa premiere étape dans l'utilisation du mode graphique 0x13 est
son activation. Pour cela il suffit d'utiliser la fonction 0 du BIOS vidéo
avec le numéro du mode choisi en AL. si vous voulez que le contenu
de la RAM vidéo soit conservé après l'activation du
mode graphique, vous devez rajouter 80h au registre AL.
D'une part, la transcription en assembleur évite la création
de la variable intermédiaire Registre.
D'autre part le code compilé ne comprend que quelques instructions
en haut et plus d'une centaine en bas, à cause justement du remplissage
de cette variable intermédiaire. Les instructions du bas sont donc
terriblement inefficaces. Après l'appel de la routine ci dessus, la carte vidéo
a initialisé le mode graphique 0x13. A la sortie de votre programme,
il faudra quitter ce mode. Si vous l'oubliez, le bios est parfaitemnt capable
de gerer les sortie texte dans ce mode, l'ordinateur restera donc fonctionnel.
Mais vous n'aurez plus qu'une résolution de 40 colonnes X 25 lignes
et non les 80 X 25 du mode d'origine. 3) Modifier la couleur du cadre de l'écran.La dernière fonction du bios a nous être utile est la fonction
10h qui permet de gérer la palette de couleur de la carte. Pour
nos besoins, il sera préferable d'accéder directement à
l'electronique pour gérer les couleurs. Aussi n'utiliseront nous
qu'une seule sous fonction, la sous fonction 1 qui permet un effet peu
connu car peu utilisé sur les PC : modifier la couleur de la bordure
de l'ecran. Cela se fait en mettant le code couleur dans le registre overscan
de la carte. Mais l'accés a ce registre est beaucoup plus facile
par le bios. Pour changer la couleur du cadre, vous devez appeler l'interruption 10h avec :
|
Informations sur l'auteur: E-mail: fenkys@mygale.org |
.