Enter.net


Brzydkie kacz▒tko, czyli historia Java3D
Adam Oko±


Java
Przyk│adowy ╢wiat stworzony za pomoc▒ Java3D
K iedy kilka lat temu pisa│em na moim ukochanym Elwro 800 Junior pierwsze procedurki do obliczania rozk│adu chmury elektronowej na cz▒steczce bia│ka, marzy│o mi siΩ, abym do┐y│ chwili, gdy na ekranie zamiast krzaczk≤w i cyferek û wynik≤w moich oblicze± û ukaza│a siΩ po prostu cz▒steczka i wiruj▒cych nad ni▒ kilkaset elektron≤w. To marzenie prze╢ladowa│o mnie przy przesiadaniu siΩ na kolejne, coraz szybsze komputery. Okazywa│o siΩ jednak wtedy, ┐e aby wy╢wietliµ m≤j program w nowym systemie, trzeba go... napisaµ od nowa (nie dziwcie siΩ û w Akademii Medycznej s▒ Macintoshe, PC i stacje Silicon Graphics).
Wybawieniem by│a rewolucja, jak▒ przynios│o pojawienie siΩ Javy. Pozwala│a ona programistom nie martwiµ siΩ o to, na jakim komputerze przyjdzie im tylko przez kilka miesiΩcy pracowaµ. Efekty pracy nie sz│y na marne, gdy trzeba by│o zmieniµ system operacyjny. A tymczasem Java dzia│a│a wszΩdzie. Niestety, Java mia│a podstawow▒ wadΩ û ze wzglΩdu na jej uniwersalno╢µ zdawa│o siΩ, ┐e trzeba bΩdzie zapomnieµ o wszystkich cudownych wynalazkach, takich jak akcelerowane sprzΩtowo karty graficzne. Jak bowiem pogodziµ ze sob▒ pracuj▒c▒ na PC kartΩ graficzn▒ VoodoRush i specjalizowany akcelerator wbudowany w Silicon INDY?
Nie oznacza to, ┐e grafiki przestrzennej pod Jav▒ nie da│o siΩ wy╢wietliµ. Problem polega│ na tym, ┐e program graficzny napisany w Javie dzia│a│ kilka tysiΩcy razy wolniej ni┐ jego odpowiednik w C++, pod warunkiem, ┐e ≤w program potrafi│ tΩ kartΩ wykorzystaµ. Tak wiΩc wszyscy rozs▒dni programi╢ci pisali programy pod konkretn▒ kartΩ graficzn▒, a rola Javy wydawa│a siΩ sprowadzona do program≤w dzia│aj▒cych na r≤┐nych komputerach w bankach i ksiΩgowo╢ci. Prze│omem by│a male±ka firma DimensionX, za│o┐ona przez Bena LunΩ i Aligatora Descartesa û osobisto╢ci teraz powszechnie znane na listach dyskusyjnych dotycz▒cych Javy. Ci chorobliwi javomaniacy zajmowali siΩ pisaniem zupe│nie nikomu nie potrzebnego programu û przegl▒darki do VRML napisanej w Java. Wpadli przy tym na pewien szata±ski pomys│ przyspieszenia dzia│ania swojego programu. Ot≤┐ zamiast pisaµ procedury wy╢wietlaj▒ce pod Java, napisali tylko zbi≤r nag│≤wk≤w odwo│uj▒cych siΩ do powszechnego ju┐ w≤wczas standardu DirectX (tego, pod kt≤rym pisze siΩ gry na PC). I co dziwne to dzia│a│o. I to z szybko╢ci▒, kt≤ra by│a w owych czasach wprost niewyobra┐alna.

Co siΩ sta│o z DimensionX?


W przemy╢le komputerowym scenariusz jest wypr≤bowany od lat. Pewnego piΩknego dnia w firmie pojawili siΩ przedstawiciele Microsoftu i podali sumΩ, od kt≤rej wszystkim (no, mo┐e z wyj▒tkiem mojego przyjaciela Aligatora) przewraca siΩ w g│owie. DimensionX sta│o siΩ czΩ╢ci▒ Microsoftu i zosta│o natychmiast zlikwidowane, a jej niedobitki wcielone do armii programist≤w Microsoftu. Po╢rednim efektem tego ma│┐e±stwa z rozs▒dku by│ û Direct Java, czyli rozszerzenie maszyny wirtualnej Javy o mo┐-liwo╢µ wywo│ywania procedur system≤w MS Windows. Oznacza│oby to jednak koniec tego, co by│o celem powstania Javy û jej przeno╢no╢ci. Tak napisany program dzia│a bowiem tylko pod Windows. I o to chodzi│o û Microsoft ba│ siΩ bowiem, ┐e rewolucja Javy przywr≤ci naturaln▒ rywalizacjΩ na rynku system≤w operacyjnych, bo ka┐dy przyzna, ┐e obecny dyktat tej firmy na rynku nie jest dla przysz│o╢ci informatyki zdrowy.
Tymczasem firma Sun û tw≤rca Javy û zachowywa│a kamienny spok≤j. Dwa lata temu, w okresie, gdy ca│y ╢wiat zach│ystywa│ siΩ nowo tworzonym jΩzykiem VRML, firma SUN o╢wiadczy│a, ┐e pracuj▒ nad czym╢, co bΩdzie systemem dla niego konkurencyjnym. Tego typu bu±czuczne o╢wiadczenia nie s▒ w tym przemy╢le brane na serio, wiΩc o sprawie zapomniano. Nieca│y rok temu na rzadko odwiedzanej stronie, na kt≤rej Sun prezentowa│ swoje planowane przedsiΩwziΩcia, pojawi│ siΩ opis systemu Java3D. I od tej pory moi przyjaciele û fanatycy Javy i profesjonalni analitycy rynku komputerowego odetchnΩli z ulg▒. Microsoft przegra│ bataliΩ. Sun opublikowa│ bowiem precyzyjny, dobrze przemy╢lany opis ╢rodowiska programistycznego (API) do programowania grafiki przestrzennej. Jego za│o┐enia stanowi▒ prze│om w pisaniu program≤w do wirtualnej rzeczywisto╢ci.
Sun uzna│, ┐e nie nale┐y dopasowywaµ siΩ do jakiegokolwiek istniej▒cego zbioru procedur graficznych, takiego jak Direct3D czy OpenGL. W zamian za to zaproponowa│ system, w kt≤rym stosuj▒c standardow▒ sk│adniΩ Javy, opisuje siΩ jak powinny wygl▒daµ i zachowywaµ siΩ obiekty w wirtualnej rzeczywisto╢ci. I tylko tyle. To, jak ma to zostaµ wy╢wietlone, nie jest bezpo╢rednio powiedziane w pisanym programie. Nie ma odwo│a± do konkretnego systemu, tylko do uniwersalnej maszyny wirtualnej Javy. Konsekwencj▒ takiego systemu jest ca│kowita przeno╢no╢µ napisanych w ten spos≤b program≤w.
No dobrze, ale co z wydajno╢ci▒ tak napisanego programu? Sun wykona│ tu karko│omn▒ sztuczkΩ. Nie wolno by│o wbudowaµ do jΩzyka Java bezpo╢redniego odwo│ania do kart graficznych û z powod≤w, o kt≤rych ju┐ wcze╢niej m≤wili╢my. Nic nie szkodzi jednak, aby co╢ takiego uczyniµ przy pisaniu maszyny wirtualnej û ta bowiem jest i tak budowana dla ka┐dego typu komputera od pocz▒tku. W ten oto spos≤b programy napisane w Javie zyska│y dostΩp do akcelerator≤w graficznych. DostΩp tak doskona│y, ┐e gdy bΩdΩ wymienia│ sw≤j monitor na he│m do wirtualnej rzeczywisto╢ci nie bΩdΩ potrzebowa│ zmieniµ ani jednej linijki w moim programie. Nie zmieni siΩ te┐ nic, kiedy wreszcie porzucΩ m≤j obecny, znienawidzony przez wszystkich system operacyjny na jakie╢ bardzo drogie krzemowe cude±ko, mimo i┐ ten obecny system ma w swojej podszewce DirectX, a owe cude±ko konkurencyjny OpenGL.
W chwili gdy piszΩ te s│owa dzia│a pierwsza oficjalna wersja Java3D. Ma zastraszaj▒c▒ liczbΩ b│Ωd≤w, a jej prΩdko╢µ wo│a o pomstΩ do nieba. Ale tysi▒ce ludzi ╢ci▒gaj▒cych j▒ na swoje komputery nie mo┐e siΩ myliµ. Java3D to na razie brzydkie kacz▒tko û wolne, szare i pokraczne. Ale mora│ ba╢ni uczy, ┐e nie nale┐y lekcewa┐yµ brzydkich kacz▒tek.

Informacje o Java3D


www.dimensionx.com
www.sun.com
www.sunyit.edu/~robinsm/java3d.htm
java3d.sdsc.edu/
www.javasoft.com/products/java-media/3D/

(c) Copyright LUPUS