Real3D Atari

O czym jest ta strona?

Strona opisuje szczegółowo jak do 8-bitowego Atari XL/XE okulary 3D firmy ASUS i uzyskać dzieki temu prawdziwy trójwymiarowy obraz na zwykłym monitorze lub telewizorze, oraz jak wykorzystać ten efekt we własnych programach.

Skąd pomysł

Pierwszy raz z okularami pozwalającącymi uzyskać prawdziwie przestrzenny obraz na ekranie zwykłego telewizora albo monitora spotkałem się przy okazji konsoli 8-bitowej SEGA ze specjalnym interfejsem 3D. Grając na niej w klon Missile Command 3D miało się autoentyczne złudzenie, że pociski wylatują z ekaranu telewizora w stronę gracza. W połączeniu z pistoletem, ktorym kasowało się te rakiety dawało to wspaniałą zabawę nawet mimo faktu, że trójwymiarowy obraz diabelnie mrugał.
Wtedy jednak lekkomyślnie sprzedałem konsolę nie pomyślawszy, że pomysł można przenieść na Atari.
Na szczęście jakiś czas temu wpadły mi w oko na aukcji podobne okulary 3D firmy ASUS, przeznaczone do wpinania do kart graficznych PC-ta ze specjalnym wyjściem. Takie jak widać na zdjęciu obok. I właśnie je wykorzystałem do realizacji tego pomysłu.

okulary ASUS 3D

Trochę teorii widzenia 3D.

Nie będę tu tłumaczył szczegółowo jak to się dzieje, że widzimy przestrzennie. Łatwo znaleźć takie informacje w sieci, np na tej stronie. Polecam przeczytać przed dalszą lekturą.
Mówiąc w wielkim skrócie, każde z oczu człowieka widzi obraz płaski, tyle, że lewe oko widzi obraz odrobinę inny niż prawe. Inczaj mówiąc każde z oczu patrzy na dany obiekt z innego punktu, czyli widzi go z innego kąta. Aby się przekonać, że to prawda, wystarczy kilka razy mrugnąć szybko na przemian lewym i prawym okiem trzymajać palec 15cm przed twarzą. Na podstawie tych dwóch płaskich obrazów nasz mózg tworzy trójwymiarowy obraz przestrzeni.

Rozwiązania techniczne widzenia 3D

Wiedząc jak działa "tryb 3D" naszych oczu łatwo można wgenerować parę obrazów, które sprawią, że nasz mózg sam utworzy z nich prawdziwy obraz trójwymiarowy. Jest tylko jeden problem: jak dostarczyć każdy z obrazów do jednego oka, tak by nie widziało go drugie?
Stsuje się kilka rozwiązań:

Jak łatwo się domyślić w okularach 3D ASUS, które podłączymy i wysterujemy z naszego Atari zastosowano właśnie ten ostatni pomysł. Daje on znakomity efekt - przy dobrze dobranych obrazach efekt trojwymiarowości jest prawie równy temu z kina IMAX (oczywiście w małym formacie telewizora).
Jedynym problemem jest silne mruganie obrazu - każde oko widzi tylko połowę z 50 klatek. W przypadku okularów podłączonych do PC'ta problem rozwiązano ustawiając na karcie graficznej odświeżanie obrazu 100Hz lub więcej. Niestety na Atari XL nie mamy takiego luksusu i do mrugania trzeba po prostu przywyknąć.
Uwaga! Efekt 3D będzie widoczny tylko na prawdziwym Atari podłączonym do klasycznego telewizora lub monitora. Na LCD lub plazmie albo na emulatorze efektu najprawdopodobniej nie będzie widać.

Jak to zrobić na Atari

Mamy do dyspozycji okulary ASUS 3D. I całe poniższe opracowanie bazuje właśnie na nich. Ale przypuszczam, że można go banalnie prosto przystosować do prawie każdych innych okularów 3D zawierających przesłony (nie wyświetlacze!) LCD.

Okulary ASUS mają kabel z wtyczką typu "jack stereo":

wtyczka okularow ASUS
Wspólna masa i 2 sygnały strujące przesłonami.
Przesłonami steruje się banalnie prosto: napięcie przylożone do styku zaciemnia przesłonę, zwarcie styku do masy powoduje, że przesłona znów staje się przezroczysta.
Niestety napięcie sterujące przesłony w okularach ASUS wynosi 12V. No, minimum 10V. Niższe napięcie po prostu nie zaciemni całkowicie przesłony. A małe Atari dyspnuje zalednie 5V. Jedynym rozwiązaniem jest interfejs-wzmacniacz zmnieniający 5V, które może wystawić Atari na 12V na odpowiednim styku wtyczki okularów. A jeśli juz trzeba robic jakikolwiek interfejs, to od razu warto zrobic to tak, zeby dalo sie okularami sterowac za pomocą tylko jedego (zamiast dwóch) wyjścia cyfrowego. Czyli interfejs ma działać tak: jeśli Atari na jakiemś pinie ustawia 5V, to interfejs ustawia 12V na lewej prześłonie LCD i 0V na prawej. Jeśli Atari wystawi 0V to intefejs na lewej przesłonie ustawia 0V a na prawej 12V. Nigdy bowiem nie występuje sytuacje, że obie przesłony są otwarte lub obie zamknięte!

Przyznam uczciwie, że schemat wzmacniacza przerysowałem z tej strony, opisującej jak podłączyć okulary ASUS do komputera INDY. Autor zastosował podwójny komparator. Trzeba tylko zmienić odrobinę rezystory ustalające poziom przełączenia komparatora, bo INDY generuje 2V a Atari 5V.

Hardware

Schemat:

                                       +------------------+-------+------ +12V
                                       |                  |       |
                                       |                  v R1    |
                                       |                  v 100k  |
                                       |                  v       |
                                       |                  |       |
                           +-----------|------------------|-------|------o ASUS Right
                           |           |                  |       |
                           |       +---|-------+----------+       |
                           |       |   |       |          |       |
   +-----------------------|---+---|---|---+   |   +------|-------|------o ASUS Left
   |                       |   |   |   |   |   |   |      |       |
   | DB9(rear view)    +---+---+---+---+---+---+---+---+  v R2    |
   o o o o o           |   7   6   5   4   3   2   1   |  v 33k   |
    o o o o            |                               |  v       |
        |              |        US1 LM324N            (   |      --- C1
        |              |                               |  |      --- 10n
        |              |   8   9   10  11  12  13  14  |  |       |
        |              +---+---+---+---+---+---+---+---+  |       |
        |                  |   |   |   |   |   |   |      |       |
        |                              |                  |       |
        +------------------------------+------------------+-------+------o ASUS Ground

Spis elementów:

Parę słów komentarza:
Układ działa jako podwójny wzmacniacz pracujący w układzie komparatora. Próg przełączania powinien być ustawiony na około 2,5V. Starałem się tak dobrać rezystory ale moja wiedza teoretyczna mocno zardzewiała. Jeśli ktoś ma w głowie odpowiedni wzór i potrafi dobrać precyzyjnie rezystory, bardzo proszę o poprawkę. Precyzyjne dobranie rezystorów jest jednak sprawą drugorzędną. Biorąc pod uwagę, że sterowanie będzie cyfrowe (sygnał prostokątny 0V-5V), nie powinniśmy widzieć różnicy w działaniu układu zarówno przy ustwieniu komparatora na 1,5V jak i na 3,5V zamiast optymalnych 2,5V.
Do sterowania interfejsem zdecydowałem się użyć portu joysticka. To chyba najprostrze i najbardziej wygodne rozwiązanie, opisane w TA 2/92.
Jesli ktos nie ma opory w odcięciu wtyczki od jakiegoś starego joysticka, można nabyć żeńską wtyczkę RS232. Niestety takiej wtyczki nie da się wsadzić do gniazda joya bo metalowa osłona zawadza o obudowę Atari. Trzeba przy pomocy porządnych cęgów obciąć ten metalowy kołnierz wtyczki i wydłubać plastikowy środek. Ten środek składa się z dwóch części, więc żeby się nie rozpadły trzeba je skleić.
Aha, zasilanie ukladu 12V stalego napiecia trzeba niestety podlaczyc z zewnetrznego zasilacza.

Zdjęcia prototypu:
prototyp zoom prototypu wtyczka

Software

Napisałem najprostszy na świecie program demonstracyjny 3D.asm - wyświetla on na ekranie statyczny obraz trójwymiarowy. Niestety nie potrafię w asemblerze napisać czegokolwiek bardziej skomplikowanego, o animacji nawet nie wspominając. Jedyną zaletą tego programu jest to, że działa. Gdyby ktoś umiał rozwinąć ten proram (np dodać możliwość otwierania z dysku obrazów do odtwarzania), bradzo proszę o pomoc (a jeszcze bajeczniej by było, gdyby ktoś napisał jakąś animację 3D :)
Zasada działania jest następująca: w pamięci umieszczone są dwa obrazy przeznaczone dla lewego i prawego oka. Program na początku ustawia tryb 9. Zdecydowalłem się na niego, bo ma 16 odcieni szarości i najlepiej wyglądały w nim przekonwertowane z PC-ta obrazy. Ale można oczywiście uzyskać efekt 3D w każdym trybie. Następnie program konfiguruje port joya tak by można było sterować wyjściem. Po czym ustawia przerwanie VBL.
W przerwaniu VBL wykonywanym po narysowaniu przez ANTIC każdego ekranu (czyli co 1/50 sekundy) program zamienia w DL adres pamięci obrazu naprzemiennie na adresy ekranL oraz zmienia polaryzacje pinu w porcie joysticka, który steruje okularami.
Program sprawdza też, czy został naciśnięty jakiś klawisz. Jeśli tak, to zamienia on obrazy - ten przenzaczony dla lewego oka bedzie wyświetlany dla prawego i odwrotnie. Dla niektórych obrazów daje to bardzo ciekawy efekt - obiekty, które "wystawały" z ekranu monitora, po takiej zamianie uciekają w głąb ekranu. Obraz staje się wklęsły zamiast wypukłego. Radze poeksperymentować.

Program 3D.asm jest napisany w standardzie XASM. Można go pobrać stąd.
Aby sie skompilowal potrzebne sa dwa obrazy: right.ata i left.ata - pliki w formacie GR9 odpowiednio dla prawego i lewego oka. Każdy o długości 7680 bajtów. Można je pobrać poniżej. W wolnej chwili opiszę jak przekonwertować dowolny obraz z PS-ta na format trybu GR9 Atari.
Przypominam jeszcze raz: Efekt 3D będzie widoczny tylko na prawdziwym Atari podłączonym do klasycznego telewizora lub monitora. Na LCD lub plazmie albo na emulatorze efektu najprawdopodobniej nie będzie widać.

Dobrej zabawy!
nosty

Gotowy software:
Interfejs podlaczamy do portu joya nr 1.
Najlepiej usiąść jakieś 2 metry przed monitorem lub tv - efekt jest wtedy najlepszy.
PRESS ANY KEY - zamiana miejscami obrazu dla lewego i prawego oka.
Oryginał BMP Pliki GR9 potrzebne do kompilacji ASM'a Gotowy ATR
01 Herb lewy obraz
prawy obraz
01herb.atr
03 Lincoln lewy obraz
prawy obraz
03lincol.atr
04 Sfera lewy obraz
prawy obraz
04sfera.atr
05 Pies lewy obraz
prawy obraz
05pies.atr
06 Architektura lewy obraz
prawy obraz
06arch.atr