Suivez-nous sur X

|
|
|
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
|
|
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
|
|
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
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
En pratique : Programmer les lunettes 3D X-Specs en utilisant la xspecs.library
(Article écrit par Randy Finch et extrait du Randy Finch's Web Site - juin 1995)
|
|
Il y a plusieurs années, un matériel très intéressant, très puissant et pourtant très bon marché
(environ 100 $) est devenu disponible pour l'ordinateur Amiga. Il s'agissait d'une petite boîte noire
qui se branchait sur le deuxième port souris et qui comportait deux petits trous permettant de brancher
deux jeux de lunettes noires dignes de l'ère spatiale. Un jeu de lunettes était inclus dans l'emballage.
Les lunettes se fixaient à votre tête par un bandeau (voir figure 1). Cela est très pratique
pour les porteurs de lunettes de vue comme moi, car elles s'adaptent confortablement aux lunettes de vue.
Les lunettes noires étaient constituées de lentilles LCD qui pouvaient être assombries et éclaircies
très rapidement par logiciel et ressemblaient à une version simplifiée des lunettes de réalité virtuelle
en vogue aujourd'hui. En permettant à l'oeil gauche de ne voir qu'une perspective gauche d'une scène et
à l'oeil droit de ne voir qu'une perspective droite par le biais d'une rapide commutation d'image, une
illusion de 3D pouvait être obtenue à partir d'un seul écran Amiga. Ce matériel était distribué par Haitex
Resources Inc. et était connu sous le nom de X-Specs 3D Stereoscopic Glasses.
Figure 1
J'ai vu pour la première fois cet étonnant matériel lors du salon AmiExpo 1988 à Chicago. Je me suis assis,
j'ai placé les lunettes sur ma tête et j'ai commencé à voir des molécules tridimensionnelles et à jouer
à un jeu, Space Spuds, à une bonne vitesse. Ces deux programmes étaient inclus avec les lunettes, ainsi
que quelques programmes de démonstration et utilitaires. C'était une excellente affaire. En tant que programmeur,
j'ai également été intéressé d'apprendre qu'une bibliothèque partagée était en cours d'écriture afin que
tout programmeur puisse facilement exploiter la puissance des lunettes X-Specs. J'ai acheté les lunettes peu
après le salon et je ne l'ai jamais regretté.
Bien qu'un certain nombre de développeurs de logiciels aient commencé à gérer les lunettes X-Specs, elles
n'ont jamais semblé gagner la popularité que je pensais qu'elles méritaient. Pendant un certain temps, les
lunettes ont été difficiles à trouver, mais aujourd'hui, je n'arrive pas à trouver un revendeur qui les
propose ou même à connaître quelqu'un qui les propose. Cependant, je pense qu'il est encore possible de
trouver un jeu de lunettes d'occasion à un prix raisonnable (pour votre information, je ne vends pas les
miennes). Pour illustrer à quel point peu de logiciels ont été écrits pour ces lunettes, j'ai cherché le
mot "X-Specs" dans le CD-ROM Gold Fish, qui contient les 1000 premières disquettes Fred Fish, et je n'ai
trouvé que deux références : LanderGame et RaiderGame. Il s'agit de jeux en 3D pour les lunettes X-Specs.
Ils se trouvent tous deux sur la disquette Fish 544.
Comme pour les lunettes X-Specs, il semble que l'intérêt pour la technologie 3D ait toujours été un phénomène
en dents de scie. Au début du siècle, les vieux stéréoscopes en bois, composés de deux lentilles qui permettaient
à chaque oeil de ne voir qu'une des deux images d'une carte postale en noir et blanc, sont devenus populaires.
Leur popularité s'est estompée pour renaître des années plus tard lorsque le ViewMaster a été commercialisé.
Bien que le ViewMaster soit toujours disponible, il ne semble pas être aussi populaire que lorsque j'étais enfant.
Bien sûr, les films en 3D étaient à la mode dans les années 1950. Aujourd'hui, les films en 3D sont rarement,
voire jamais, réalisés. Je pense que cela a quelque chose à voir avec le fait de devoir porter de drôles de
lunettes ou de regarder à travers une sorte de dispositif binoculaire. Lorsque l'imagerie 3D sera disponible pour
une visualisation directe, comme c'est le cas actuellement pour un film, un téléviseur ou un écran d'ordinateur,
elle pourrait devenir populaire et le rester. Peut-être qu'un type d'holographie plus avancé fournira la
technologie nécessaire.
Programmation des lunettes 3D X-Specs
Comme on me l'a dit à l'AmiExpo, une bibliothèque partagée a été publiée afin que même moi
je puisse écrire des programmes pour les lunettes X-Specs. À l'époque, je travaillais sur un programme de
traçage de fonctions 3D qui était un candidat parfait pour l'ajout de la gestion des X-Specs. La bibliothèque
s'appelle xspecs.library. La version 1.2 de cette bibliothèque se compose de 36 fonctions. Bien que je
programme en C, la bibliothèque peut être utilisée par n'importe quel langage qui gère les bibliothèques
partagées standard d'Amiga. Le tableau 1
montre les noms et les brèves descriptions des fonctions disponibles
dans la bibliothèque. Plusieurs sont disponibles pour allouer et désallouer les structures de données Rastport
et Viewport pour les vues régulières, les vues à double tampon et les vues en suraffichage. Les couleurs de
stylo, le numéro de stylo et le mode de dessin peuvent tous être définis. Des lignes, des polygones, du texte
et même des sprites peuvent être dessinés dans un espace tridimensionnel.
Malheureusement, les fichiers compressés que j'ai téléchargés contenant la bibliothèque n'avaient pas de
fichier d'en-tête C contenant les déclarations #pragma et les prototypes de fonction nécessaires à mon programme.
Cependant, la documentation contenait suffisamment d'informations pour que je puisse créer un fichier de
définition de fichier (.fd) (voir listing 1).
J'ai utilisé le programme fd2pragma qui était inclus dans mon
compilateur SAS/C pour convertir ce fichier ".fd" en un fichier d'en-tête C contenant les instructions #pragma.
J'ai ensuite ajouté des prototypes de fonction. Ce fichier est présenté dans le
listing 2. Une fois ce travail
terminé, j'étais prêt à ajouter la gestion des X-Specs à mon programme.
Le listing 3 montre des extraits de mon programme de traçage de fonctions tridimensionnelles. Une version
antérieure de ce programme, qui ne gère pas les X-Specs, se trouve sur la disquette Fish 440. Elle s'appelle
3DPlot. Les extraits contiennent du code dont je ne parlerai pas car il n'est pas pertinent pour cet
article. Je n'ai laissé ce code dans le listing que pour fournir un contexte aux appels de fonctions X-Specs.
Remarquez d'abord que le fichier d'en-tête XSpecsLib.h est inclus au début pour rendre les #pragmas et
les prototypes de fonctions disponibles. De plus, un pointeur de structure de bibliothèque externe
(il est ouvert dans un fichier différent) nommé "XSpecsBase" est déclaré.
Lorsque l'utilisateur demande le rendu d'un tracé X-Specs, la fonction DrawGraph est appelée avec une
variable globale, plottype, définie comme égale à PLOTXSPECS, qui est définie dans un autre fichier
d'en-tête. Un port de message est déclaré ainsi qu'un tableau contenant les 32 couleurs de l'écran X-Specs.
Les structures RastPort et ViewPort pour l'écran X-Specs sont allouées avec la fonction XSpecsAllocView.
Le paramètre NULL indique qu'un écran 32 couleurs 320x200 doit être créé. D'autres résolutions d'écran
peuvent être allouées en passant un paramètre différent. L'écran est affiché sur le moniteur avec la
fonction XSpecsOn, qui renvoie le port de message de l'écran. Le paramètre MOUSEBUTTONS indique que seuls
les messages relatifs aux boutons de la souris doivent être envoyés à ce port. Ensuite, la palette est
remplie en appelant la fonction XSpecsLoadRGB4.
En suivant le code plus bas, vous trouverez de nombreux calculs effectués pour préparer le tracé réel.
Finalement, une autre fonction du programme, CalcAndPlot3, est appelée. Cette fonction est présentée vers
le début du listing 3. Elle effectue le travail fastidieux de calcul des coordonnées tridimensionnelles
pour le tracé sur l'écran X-Specs. Le tracé consiste en une mosaïque de polygones à quatre côtés. Après
avoir calculé les coordonnées des quatre coins d'un polygone et la couleur à utiliser pour celui-ci,
trois fonctions de la xspecs.library sont appelées pour accomplir la tâche. Tout d'abord, XSpecsSetAPen
est appelé pour définir la couleur appropriée, XSpecsMove est appelé pour déplacer le stylo au point de
départ approprié dans l'espace tridimensionnel, et XSpecsDraw est appelé trois fois pour dessiner trois
côtés du polygone à quatre côtés. Le quatrième côté est dessiné lorsqu'un polygone à quatre côtés adjacent
est dessiné. Cela permet de gagner un peu de temps car les côtés adjacents n'ont pas à être dessinés deux fois.
Vers la fin de la fonction DrawGraph se trouve un appel de fonction système WaitPort. Cet appel attend
qu'un message soit reçu sur le port de message de win avant de fermer l'affichage X-Specs. Le pointeur
de fenêtre nommé win pointe vers une fenêtre créée par le programme 3DPlot. Pourquoi est-ce que j'attends
un message sur ce port plutôt que sur celui de l'affichage X-Specs ? Je ne le sais pas. Il s'avère que si
vous utilisez l'instruction suivante :
...où "uport" est le port de message renvoyé par la fonction XSpecsOn, un message sera reçu correctement
pour une pression sur le bouton droit de la souris, mais le programme se figera essentiellement lorsque
le bouton gauche de la souris sera pressé. En utilisant l'instruction :
...où "win->UserPort" est le port de message d'une autre fenêtre du programme 3DPlot non liée à l'affichage X-Specs,
le bouton gauche de la souris peut être enfoncé sans que le programme ne se fige. Cependant, il faut appuyer
sur le bouton droit après le bouton gauche pour qu'un message soit reçu sur "win->UserPort". Je n'ai pas
encore déterminé pourquoi cela fonctionne de cette façon. Si quelqu'un a une idée, faites-le moi savoir.
Enfin, la fonction XSpecsOff est appelée pour fermer l'affichage X-Specs, et XSpecsFreeView est appelée pour
désallouer les structures RastPort et ViewPort de l'affichage.
En conclusion
Les lunettes X-Specs 3D peuvent être programmées facilement à l'aide de la xspecs.library. La dernière version
de cette bibliothèque dont j'ai connaissance est la 1.2. J'ai essayé de contacter Richard Horne, qui était
l'une des personnes responsables de la création de cette bibliothèque, mais en vain.
En attendant, tous les programmeurs Amiga devraient sortir leur compilateur et se mettre au travail.
|