Wektor ogólny

Vector General ( VG ) to seria terminali graficznych i nazwa kalifornijskiej firmy, która je wyprodukowała. Zostały one po raz pierwszy wprowadzone w 1969 roku i były używane w laboratoriach komputerowych do wczesnych lat 80-tych.

Terminale były oparte na wspólnej platformie odczytującej wektory dostarczane przez minikomputer hosta i zawierały sprzęt, który mógł wykonywać podstawowe przekształcenia matematyczne w terminalu. To znacznie poprawiło wydajność operacji, takich jak obracanie obiektu lub powiększanie. Przekształcone wektory były następnie wyświetlane na wbudowanym monitorze wektorowym terminala .

W przeciwieństwie do podobnych terminali innych producentów, systemy Vector General zawierały niewiele pamięci wewnętrznej . Zamiast tego przechowywali wektory w pamięci komputera hosta i uzyskiwali do nich dostęp poprzez bezpośredni dostęp do pamięci (DMA). W pełni wyposażone terminale VG3D kosztowały około 31 000 USD, w tym komputer PDP-11 z niższej półki , w porównaniu z maszynami takimi jak IBM 2250 , które kosztowały 100 000 USD za sam terminal.

Wśród wielu znanych zastosowań znanych w dziedzinie grafiki komputerowej, terminal VG3D podłączony do PDP-11/45 został użyty do stworzenia animacji „Atak na Gwiazdę Śmierci nie będzie łatwy” w Gwiezdnych wojnach .

Opis

Sprzęt komputerowy

Powszechną próbą pod koniec lat 60. XX wieku w celu poprawy wydajności wyświetlania grafiki, zwłaszcza w 3D, było użycie specjalnych terminali, które przechowywały listę wektorów w pamięci wewnętrznej, a następnie wykorzystywały sprzęt lub oprogramowanie działające w kontrolerze wyświetlacza , aby zapewnić podstawowe przekształcenia, takie jak obracanie i skalowanie. Ponieważ te przekształcenia były stosunkowo proste, można je było zaimplementować w terminalu stosunkowo niskim kosztem, a tym samym uniknąć marnowania czasu na wykonanie tych operacji przez procesor hosta. Systemy wykonujące przynajmniej niektóre z tych operacji obejmowały IDI, Adage i Imlac PDS-1 .

Kluczową innowacją w terminalach serii VG było wykorzystanie bezpośredniego dostępu do pamięci (DMA), aby umożliwić mu dostęp do pamięci komputera hosta. Oznaczało to, że terminale nie potrzebowały dużo własnej pamięci i dawały im możliwość szybkiego dostępu do danych bez kopiowania ich przez wolniejsze łącze, takie jak szeregowy Tektronix 4010 lub podobne systemy . Wadą tego podejścia jest to, że można go było używać tylko na maszynach oferujących DMA i tylko za pośrednictwem stosunkowo drogiego adaptera.

Podstawowa koncepcja polegała na tym, że komputer główny przeprowadzał obliczenia w celu utworzenia serii punktów dla modelu 2D lub 3D i wyrażał to jako wartości 12-bitowe, zwykle przechowywane w 16-bitowych słowach z dodatkowymi bitami stanu . Terminal okresowo przerywał pracę komputera, od 30 do 60 razy na sekundę, szybko odczytywał i wyświetlał dane. Każdy punkt był odczytywany jeden po drugim do lokalnych rejestrów pamięci w celu tymczasowego przechowywania, podczas gdy stosowane były do ​​nich funkcje matematyczne w celu skalowania, translacji i (opcjonalnie) obracania, a po obliczeniu końcowych wartości punkty te były przesyłane do katody- rura promieniowa (CRT) do wyświetlania.

Były trzy różne modele sprzętu do transformacji współrzędnych. Najbardziej podstawowy system zawierał sprzęt potrzebny do przesuwania i powiększania obrazów 2D, w którym to przypadku terminal zawierający go byłby znany jako Vector General 2D. Inna wersja dodała możliwość obracania obrazu 2D wokół dowolnego punktu, znanego jako 2DR (od Rotate). Najdroższą opcją była opcja 3D, która zapewniała obracanie, przesuwanie i powiększanie wektorów 3D. Kolejną opcją, którą można było dodać do któregokolwiek z tych modeli i nie znalazła odzwierciedlenia w nazwie, dodano generator znaków .

Kwadratowe kineskopy były sterowane bezpośrednio z wyjścia sprzętu do transformacji, w przeciwieństwie do wyświetlania przy użyciu tradycyjnej metody skanowania rastrowego . Firma określiła tego typu działanie mianem „skanowania losowego”, choć powszechnie określa się go mianem monitora wektorowego we współczesnych referencjach. Dostępne były dwa podstawowe modele CRT o przekątnej 17 cali (430 mm) i 21 cali (530 mm). Model 21-calowy był również dostępny w specjalnej wersji „high speed”, która poprawiła szybkość rysowania. CRT wykorzystywały odchylenie elektromagnetyczne, a nie magnetyczne, jak w telewizorach, aby zapewnić wysoką prędkość skanowania.

Do systemu można podłączyć kilka różnych urządzeń wejściowych. Najbardziej powszechna była klawiatura 70-klawiszowa , podczas gdy inne zawierały zestaw chwilowych przełączników z wewnętrznymi kontrolkami kontrolnymi, tablet graficzny , pióro świetlne , pokrętło i joystick . System jako całość był dość duży, mniej więcej wielkości małej lodówki .

Koncepcje rysunkowe

Wektory były reprezentowane logicznie przez dwa punkty końcowe w przestrzeni. Każdy punkt był zdefiniowany przez dwie lub trzy wartości 12-bitowe, reprezentujące w ten sposób spację od 0 do 4095 w X, Y i (opcjonalnie) Z. Terminal miał trzy 12-bitowe rejestry do przechowywania wartości podczas manipulowania nimi.

System umożliwiał reprezentację wektorów w pamięci na wiele sposobów. Najbardziej podstawowy tryb, „absolutny”, wymagał dwóch punktów, po jednym na każdy koniec wektora. Wektory „względne” zostały wyrażone jako przesunięcia od ostatniego zestawu wartości, więc do zdefiniowania wektora potrzebny był tylko jeden punkt, przy czym pierwszy punkt był punktem końcowym ostatniego. Mogłoby to zmniejszyć o połowę liczbę punktów potrzebnych do opisania całego rysunku, gdyby dane były ciągłe jak wykres liniowy . Wektory „przyrostowe” jeszcze bardziej zmniejszyły pamięć, wykorzystując tylko 6 bitów na każdy punkt, umożliwiając spakowanie danych do mniejszej pamięci w hoście. System można ustawić tak, aby dodawał wartości do 6 bitów wysokiego lub niskiego rzędu ostatniej wartości, umożliwiając ruch zgrubny lub dokładny. Wreszcie, wektory „autoinkrementujące” jeszcze bardziej zmniejszyły wymagania dotyczące pamięci, wymagając przechowywania tylko jednej wartości, a pozostałe były zwiększane o określoną wartość w miarę wczytywania każdego nowego punktu. Były one podobne do wektorów względnych, z jedną z dwóch osi zawsze z tym samym względnym przesunięciem. System miał również oddzielny obwód do generowania łuków kołowych, w przeciwieństwie do konieczności wysyłania serii punktów.

Wyświetlacz był w stanie wytworzyć 32 różne poziomy intensywności. Można to zaprogramować bezpośrednio, ustawiając rejestr w terminalu, ale było częściej używane w trybie programowania w 3D. W tym trybie intensywność była zmieniana automatycznie podczas rysowania wektora, przy czym elementy znajdujące się głębiej w wymiarze Z były rysowane z mniejszą intensywnością. Spowodowało to wyświetlenie wskazówki głębi, dzięki której przód obiektu wyglądał na jaśniejszy na wyświetlaczu. Szybkość tej zmiany została ustalona przez rejestr ISR.

Oddzielny 12-bitowy rejestr PS zawierał mnożnik skali. Gdy ta wartość nie była używana, układ współrzędnych reprezentował obszar fizyczny około dwa razy większy niż ekran, co pozwalało na translację obrazu w celu zapewnienia przewijania. Kiedy wartość została umieszczona w tym rejestrze, współrzędne w rejestrach wektorowych i systemie rysowania znaków były mnożone przez tę wartość, tworząc efekt powiększenia.

Opcjonalny generator znaków rysował znaki przy użyciu zestawu pięciu kształtów zdefiniowanych sprzętowo, koła, kwadratu z pionową linią pośrodku, kwadratu z poziomą linią pośrodku oraz kształtów klepsydry zorientowanych pionowo i podobnych zorientowanych poziomo . Włączając i wyłączając wiązkę podczas rysowania każdego z tych kształtów przez sprzęt, system mógł narysować dowolny wymagany znak. Na przykład litera C została narysowana przy użyciu kształtu O i wyłączeniu wiązki, gdy znajdowała się po prawej stronie. Litera D byłaby rysowana przy użyciu kształtu O i wyłączania go, gdy znajdowała się po lewej stronie, a następnie rysowania prostokąta linii pionowej z wiązką włączoną tylko wtedy, gdy rysowany był środkowy pionowy pasek. Do stworzenia kompletnej postaci potrzeba od jednego do trzech takich „losowań”. Oprócz normalnych system zawierał szereg greckich liter i symboli matematycznych ASCII .

Programowanie

Terminal okresowo odczytuje pamięć główną komputera hosta za pomocą DMA w celu odświeżenia wyświetlacza. Dalsza komunikacja była obsługiwana przez pojedynczy dwukierunkowy port I/O po utworzeniu żądania przerwania ze szczegółami żądania w rejestrze PIR. Ustawienia i instrukcje były obsługiwane przez wysyłanie danych do iz portu I / O do jednego z 85 rejestrów terminala.

Na przykład host może ustawić wartość rejestru PS, powodując powiększenie obrazu. Zrobiłby to, wywołując przerwanie, którego 16-bitowy komunikat zawierał numer rejestru do ustawienia, w tym przypadku 17. Terminal odpowiedziałby, wysyłając 16-bitową wiadomość z powrotem przez kanał we/wy. Zapisy były obsługiwane przy użyciu podobnego procesu, ale terminal odpowiedział na przerwanie, odczytując zamiast tego wartość.

Adres bazowy początku listy wektorów oraz przesunięcie w jej obrębie znajdowały się w rejestrach 14 i 15. Dzięki temu wyświetlacz mógł wykonać swego rodzaju „przerzucanie stron” poprzez zapisywanie oddzielnych zestawów punktów w pamięci komputera, a następnie zmianę wyświetlić wszystkie na raz, zmieniając wartość rejestru 14, aby wskazywał inny adres bazowy. Było to ograniczone przez ilość pamięci dostępnej na komputerze hosta.

Instrukcje wyświetlania miały różne formaty, które pozwalały na konstruowanie nie tylko wektorów, ale także różnych poleceń. Istniały na przykład instrukcje ładowania danych do danego rejestru, składające się z dwóch 16-bitowych słów, pierwsze ze szczegółami rejestru, a drugie z wartością. Inne instrukcje wykonywały logiczne OR lub AND na wartościach rejestrów. Same instrukcje wyświetlania można mieszać z tymi operacjami, więc system może na przykład rozpocząć wyświetlanie wybranych elementów, spowodować zapalenie lampy, obrócić obraz, a następnie narysować więcej wektorów.

Godne uwagi zastosowania

VG3D jest historycznie znany ze swojego zastosowania w Gwiezdnych Wojnach , ale jest również dobrze znany ze swojej wczesnej roli w rozwoju projektowania wspomaganego komputerowo .

W Gwiezdnych wojnach

Część animacji przedstawia wynik grafiki wektorowej przechwycony na filmie, a następnie rzutowany wstecz na scenę podczas filmowania.

Larry Cuba wyprodukował dwa segmenty animacji komputerowej dla Gwiezdnych Wojen na PDP-11/45 z terminalem VG3D. Aby sfilmować obrazy klatka po klatce, podłączono przewód między jedną z lampek na panelu przycisków a spustem migawki w aparacie. Zostało to wywołane przez komputer hosta, powodując jednokrotne zwolnienie migawki aparatu i przesunięcie filmu o jedną klatkę do przodu.

Pierwszy segment, który pokazuje zewnętrzną stronę Gwiazdy Śmierci , jest całkowicie oparty na wewnętrznych możliwościach wyświetlania VG3D. Model składał się z prostej serii punktów 3D reprezentujących zarys stacji przechowywanej w pamięci PDP-11, skonstruowanej algorytmicznie przy użyciu kodu generowania krzywych powiązanego języka programowania GRASS . Aby przesuwać i obracać obraz, jak widać na filmie, powiązany program GRASS ładowałby nowe liczby obrotu i powiększenia do rejestrów terminala, a następnie uruchamiał kamerę.

Drugi segment przedstawia widok lecący w dół rowu w ostatnim ataku, najpierw z góry, a następnie z perspektywy pilota. Było to znacznie trudniejsze do stworzenia, ponieważ terminal nie obsługiwał obliczania perspektywy, co było wymagane w tej sekwencji. Fizyczny model rowu użyty podczas kręcenia filmu składał się z serii sześciu elementów, które były wielokrotnie powielane, a następnie łączone na różne sposoby, aby stworzyć pojedynczy model o długości 40 stóp (12 m). Kuba zdigitalizował każdą z tych sześciu cech ze zdjęć, a następnie połączył je w różnych konfiguracjach w ponad 50 sekcji w kształcie litery U. Dla każdej klatki pięć z tych przekrojów zostało ułożonych głęboko w stos, a następnie zastosowano obliczenia perspektywiczne. W filmie widać dodawanie nowych sekcji w miarę postępu animacji. Został on następnie wysłany do terminala jako obraz statyczny i kamera została uruchomiona. Renderowanie każdej klatki trwało około dwóch minut.

W armii USA

Mike Muuss (siedzący) użył PDP-11 /70 i Vector General 3D, aby zrobić obrotowy obraz czołgu XM-1 . Wywołało to duże poruszenie wśród dowódców armii, którzy przez następne dwa tygodnie domagali się demonstracji.

Mike Muuss opowiada, że ​​Laboratorium Badań Balistycznych Armii Stanów Zjednoczonych zakupiło Cyber ​​173 i trzy stacje robocze składające się z terminala VG3D i PDP-11/34 do jego obsługi. Miały one być ze sobą połączone, ale nikt nie był w stanie tego uruchomić, a ostatecznie stacje robocze VG pozostały nieużywane. Martwił się, że cały ten sprzęt się marnuje, więc w 1979 roku podłączył jedną ze stacji roboczych i stworzył program, który tworzył obracający się sześcian 3D.

Inny programista otrzymał zestaw punktów 3D projektu czołgu XM1 i pisał kod w celu wyprowadzenia go do plotera Calcomp . Zapytał Muussa, czy zamiast tego mogliby wyświetlić go na terminalach VG, aby mogli go obrócić. Najpierw wyprowadził go jako statyczny obraz na Tektronix 4014 , ale następnej nocy udało mu się przenieść obraz na VG3D, gdzie można go było łatwo obracać za pomocą wewnętrznego sprzętu wektorowego.

Nikt w armii nie widział wcześniej czegoś takiego. Następnego dnia dowódca generalny ARRADCOM przyleciał zobaczyć to na żywo. Przez następne dwa tygodnie Muuss nieustannie prezentował system demonstracjom oficerów. Demo stało się tak dobrze znane, że Muuss mógł rozpocząć rozwój BRL-CAD .

Notatki

Cytaty

Bibliografia

Linki zewnętrzne

Zobacz też