Postanowiłem któregoś pięknego dnia zająć się plikami scenerii. Niestety, mimo różnych prób nie potrafię skorzystać z programu
gmax, a programu
3D Studio Max (który nie jest darmowy) z pewnych względów nie mogę używać.
Ale, oprócz tak przez wielu ludzi chwalonego
Notatnika, znalazłem jeszcze jedno użyteczne narzędzie, mogące, jeśli nie zastąpić, to przynajmniej pomóc w tworzeniu scenerii. Programem tym jest
Jet 1.0 beta napisany w Javie.
Jego autorem jest Adam Domański, a strona domowa tego programu jest tutaj:
http://af186.internetdsl.tpnet.pl/doman/jet/Początkowo może sprawiać problem samo uruchomienie programu. Nie wystarczy bowiem ściągnąć z powyższej strony programu i go uruchomić. Co prawda, na tej stronie wymienione są niezbędne składniki, z których korzysta
Jet 1.0 beta, jednak pozwolę sobie je tutaj zebrać:
[*]Program
Jet 1.0 beta;[*]Środowisko uruchomieniowe Java:
J2SE 1.4.2 Runtime Environment;[*]Biblioteka
Java 3D API.[/list]Nieistotne jest, czy bibliotekę
Java 3D API ściągniemy i zainstalujemy w wersji dla
DirectX (4,22 MB, bajtów: 4 427 612) czy
OpenGL (4,13 MB, bajtów: 4 335 289). Wielkości plików instalacyjnych podałem dla wersji
1.3.1. Nasz system musi mieć możliwość wyświetlenia ekranu w rozdzielczości 800×600 pikseli.
No, to instalujemy po kolei:
J2SE Runtime Environment,
Java 3D API, i potem program
Jet 1.0 beta. Instalacja tego ostatniego polega na rozpakowaniu po prostu pliku
ZIP do jakiegoś katalogu.
Kolejnym problemem, na który można napotkać jest niewłaściwie ustawiona zmienna środowiskowa
CLASSPATH, na której Java się opiera przy wyszukiwaniu plików klas (
*.class) programu.
Ja, w swoim systemie, poczyniłem następujące ustawienia:
set PATH=%PATH%;C:\j2sdk1.4.2_06\bin
set CLASSPATH=.
set J2D_D3D=true
Mówiąc krótko: binaria Javy (np.
java.exe) są objęte systemową ścieżką wyszukiwania (zmienna
PATH). Zmienna
CLASSPATH zawiera wartość będącą bieżącym katalogiem ("
."), gdyż w nim właśnie znajdzie Java potrzebne programowi pliki klas. Ostania zaś zmienna
J2D_D3D określa, że będziemy używać biblioteki
DirectX Java 3D API.
W katalogu z rozpakowanym programem jest plik
jet.bat ułatwiający uruchomienie programu. Nieco go poprawiłem, przez co u mnie ma on teraz taką treść:
@echo off
start java -cp . org.jet.Jet
W przypadku niejasności odsyłam zainteresowanych do
tego wątku, szczegółowo wyjaśniającego instalację i uruchomienie programu
Jet 1.0 beta.
Nie będę tutaj wyjaśniał obsługi programu. Wydaje mi się, że program jest wystarczająco dobrze udokumentowany. Również na wyżej wymienionej stronie projektu jest
instrukcja obsługi.
Oto, co mi się udało stworzyć przy pomocy tego programu:
Jest to ot, taka sobie mała mijanka, czyli prosty tor z odgałęzionym drugim torem, połączone z sobą za pomocą zwrotnic. Jak widać na obrazku, niektórym odcinkom zostały nadane nazwy. Niedługo dowiemy się, po co.
Tu znajduje się gotowy wynik mojego działania:
plik scenerii. Proponuję go sobie ściągnąć, gdyż w całym dalszym opisie będę odwoływał się do jego zawartości.
Lecz nie wyprodukujemy go całkowicie za pomocą programu
Jet 1.0 beta. Po zapisaniu pliku otrzymamy następującą zawartość:
// Scenery generated by jET
// Date: Thu Jan 27 20:38:31 CET 2005
description
enddescription
node -1 0 none track normal 200.0 1.435 0.25 20.0 20 0 flat vis
Rail_screw_used1 4.0 TpBpS-new2.tex 0.2 0.5 1.1
0.0 0.0 433.23 0.0 // Point 1
0.0 0.0 0.0 // Control vector 1
0.0 0.0 0.0 // Control vector 2
0.0 0.0 633.23 0.0 // Point 2
0.0
endtrack
. . . [pominąłem tu cały środkowy fragment pliku]
node -1 0 zw2 track switch 33.23 1.435 0.25 20.0 20 0 flat vis
Rail_screw_used1 4.0 Rail_screw_used1 0.2 0.5 1.1
0.0 0.0 666.46 0.0 // Point 1
0.0 0.0 0.0 // Control vector 1
0.0 0.0 0.0 // Control vector 2
0.0 0.0 633.23 0.0 // Point 2
0.0
0.0 0.0 666.46 0.1 // Point 3
0.0 0.0 -11.079 // Control vector 3
1.225 0.0 11.012 // Control vector 4
-1.838 0.0 633.298 -0.1 // Point 4
-300.0
endtrack
firstinit
Aby otrzymać z tego gotowy plik scenerii, trzeba będzie go nieco jeszcze uzupełnić. Najlepszym podręcznikiem jest tutaj oczywiście wspominany przeze mnie wciąż plik
Scenery.docA jak uzupełnić nasz plik, aby stanowił on poprawną scenerię do symulatora?
Po pierwsze: gdziekolwiek w scenerii powinien być ustawiony skład, aby można było jeździć. Mój poprzedni tutaj post dokładnie wyjaśnia jak tego dokonać. W przykładowym pliku zawarłem taki oto zapis:
FirstInit
trainset none start 100.0 0.0
//$o Lokomotywka :-)
node -1 0 EU07-424 dynamic PKP\EU07 eu07-424 303E 0.0 headdriver 3 0 enddynamic
node -1 0 505120-00256-5 dynamic PKP\Bd Bdu-0.tga 111a 0.0 nobody 3 10 Passengers enddynamic
node -1 0 505120-00256-3 dynamic PKP\Bd Bdu-0.tga 111a 0.0 nobody 3 10 Passengers enddynamic
node -1 0 505120-00256-1 dynamic PKP\Bd Bdu-0.tga 111a 0.0 nobody 0 5 Passengers enddynamic
endtrainset
Jest więc tu lokomotywa
EU07-424 wraz z trzema doczepionymi wagonami 2 klasy.
Jeśli jednak uruchomimy symulator z tą scenerią, owszem, będzie może i pociąg, tory i zwrotnice, lecz zamiast nieba cała reszta będzie zielona.
Zatem potrzebna jest też definicja oświetlenia. Z uważnej lektury pliku
Scenery.doc wynika, że do tego służą komendy
atmo i
light, a z innych scenerii można je sobie skopiować wraz z gotowymi parametrami:
atmo 0.6 0.7 0.9 0 1600 0.6 0.7 0.8 endatmo
light -500 500 200 0.3 0.33 0.35 0.70 0.65 0.6 0.75 0.74 0.70 endlight
Gdy uzupełnimy jeszcze nasz plik o następujące komentarze:
//$n Prosta sceneria
//$d Przykład pokazuje jak stworzyć małą, nieskomplikowaną scenerię.
to podczas uruchamiania scenerii przy pomocy programu
start.exe, zobaczymy następujący obraz:
OK, uruchamiamy symulator, mamy tory, mijankę, możemy jeździć, ale... tylko po torze prostym. Na zwrotnicach nie ma tekstur podsypki. No, a czemu w ogóle zwrotnice nie działają? Ano, dlatego, że nie są one przestawiane. A co zrobić, żeby były?
Popatrzmy na nasze zwrotnice w pliku:
node -1 0 zw1 track switch 33.23 1.435 0.25 20.0 20 0 flat vis
Rail_screw_used1 4.0 Rail_screw_used1 0.2 0.5 1.1
0.0 0.0 400.0 0.0 // Point 1
0.0 0.0 0.0 // Control vector 1
0.0 0.0 0.0 // Control vector 2
0.0 0.0 433.23 0.0 // Point 2
0.0
0.0 0.0 400.0 0.1 // Point 3
0.0 0.0 11.079 // Control vector 3
1.225 0.0 -11.012 // Control vector 4
-1.838 0.0 433.162 -0.1 // Point 4
300.0
endtrack
node -1 0 zw2 track switch 33.23 1.435 0.25 20.0 20 0 flat vis
Rail_screw_used1 4.0 Rail_screw_used1 0.2 0.5 1.1
0.0 0.0 666.46 0.0 // Point 1
0.0 0.0 0.0 // Control vector 1
0.0 0.0 0.0 // Control vector 2
0.0 0.0 633.23 0.0 // Point 2
0.0
0.0 0.0 666.46 0.1 // Point 3
0.0 0.0 -11.079 // Control vector 3
1.225 0.0 11.012 // Control vector 4
-1.838 0.0 633.298 -0.1 // Point 4
-300.0
endtrack
Możemy sobie wyobrazić zwrotnicę "
zw1" jak dwa tory: jeden prosty, drugi łukowy, które mają jeden punkt wspólny. Oto współrzędne tych punktów:
Punkt 1: [0.0, 0.0, 400.0], punkt 2: [0.0, 0.0, 433.23];
Punkt 3: [0.0, 0.0, 400.0], punkt 4: [-1.838, 0.0, 433.162].
Widać tutaj, że punkt o współrzędnych
[0.0, 0.0, 400.0] jest wspólnym punktem tych torów w rozjeździe. I właśnie ten punkt będzie punktem umieszczenia definicji zwrotnicy z pliku
zwrP34R300.inc. Dlaczego akurat to ma być ten plik? Bo jest to rozjazd prawy ("
P"), o długości toru prostego
33.23 m (
~34 m) i promieniu toru łukowego
300 m. Z usytuowania zwrotnicy w scenerii wynika, że jej kąt wynosi
0.0°. Druga zwrotnica ("
zw2") jest podobna, tyle, że jest ona lewa ("
L"), a jej kąt wynosi
180.0° (bo jest zorientowana przeciwnie w stosunku do tej pierwszej).
Postępując tak z obiema zwrotnicami, otrzymujemy następujące wpisy, którymi trzeba będzie uzupełnić scenerię:
include;zwrP34R300.inc;zw1;0.0;-0.200012;400.0;0.0;zwrot34r300pods-new.tex;;;;end
include;zwrL34R300.inc;zw2;0.0;-0.200012;666.46;180.0;zwrot34r300pods-new.tex;;;;end
Zapis "
zwrot34r300pods-new.tex" jest jednym z wymaganych przez definicję zwrotnicy parametrów i określa teksturę, która zostanie użyta na podsypkę.
W ten sposób "wyposażone" zwrotnice dodatkowo otrzymują jeszcze latarnię zwrotnika, pokazującą wskaźniki
Wz1,
Wz2 i
Wz3. To już coś, ale wciąż te zwrotnice nie działają - dlaczego?
Dlatego, że nie ma tu jeszcze "mechanizmu", który by je przestawiał. Tym "mechanizmem" w symulatorze
MaSzyna są zdarzenia (ang.
events).
Jednak użycie zdarzeń w scenerii powinno być starannie przemyślane. Najlepiej po prostu zaplanować sobie "co ma się dziać, kiedy coś innego się stanie" - to takie łopatologiczne stwierdzenie doskonale przybliża istotę ich funkcjonowania.
A tutaj zaplanujemy sobie, że gdy na torze przed mijanką przez 10 sekund będzie stał jakiś pojazd, to zwrotnice przestawią się tak, żeby pociąg mógł ominąć tor prosty, a kiedy przez 10 sekund będzie stał za mijanką, wówczas zwrotnice przestawią się tak, że będzie można przez nią przejechać po torze prostym (według scenariusza, w którym po zatrzymaniu się za mijanką chcemy tyłem wymanewrować na tor prosty).
Czytamy sobie dokument
Scenery.doc i czytamy... Znajdujemy tam opis toru (
node ... track ... ), a w nim klauzulę "
event0", powodującą zadziałanie zdarzenia, gdy na torze, do którego jest ono przypisane stoi pojazd obsadzony przez załogę (czyli np. lokomotywa - sam wagon już nie).
Zatem do toru przed mijanką przypiszemy zdarzenie: "
event0 mijanka_bok", a do toru za mijanką - zdarzenie "
event0 mijanka_wprost". Oto, co uzyskujemy:
node -1 0 pocz track normal 200.0 1.435 0.25 20.0 20 0 flat vis
Rail_screw_used1 4.0 TpBpS-new2.tex 0.2 0.5 1.1
0.0 0.0 200.0 0.0 // Point 1
0.0 0.0 0.0 // Control vector 1
0.0 0.0 0.0 // Control vector 2
0.0 0.0 400.0 0.0 // Point 2
0.0
event0 mijanka_bok
endtrack
node -1 0 koniec track normal 100.0 1.435 0.25 20.0 20 0 flat vis
Rail_screw_used1 4.0 TpBpS-new2.tex 0.2 0.5 1.1
0.0 0.0 666.46 0.0 // Point 1
0.0 0.0 0.0 // Control vector 1
0.0 0.0 0.0 // Control vector 2
0.0 0.0 866.46 0.0 // Point 2
0.0
event0 mijanka_wprost
endtrack
Nie uda się nam jeszcze uruchomić tej scenerii tak, jakbyśmy sobie tego życzyli. Owszem, może i się ona uruchomi, lecz będą "wyskakiwać" komunikaty błędów, że "to a to zdarzenie nie istnieje", a potem zwrotnice i tak będą nieruchome.
No tak! Wszak nie zostało jeszcze zdefiniowane, co ma się stać po spełnieniu warunków na wystąpienie tych zdarzeń. Po prostu: zostało zdefiniowane, kiedy zdarzenia mają nastąpić, lecz nie zostały zdefiniowane ich konsekwencje.
A, jak wspomniałem wcześniej, po 10-sekundowym postoju na torze przed mijanką, obie zwrotnice trzeba ustawić tak, aby wpuścić pociąg na drugi tor. Będą to ustawienia "w bok" ("
zwrotnica+"), a po 10-sekundowym postoju na torze za mijanką, obie zwrotnice zostaną ustawione "na wprost" ("
zwrotnica-"), aby wpuścić pociąg na tor prosty.
Oto co otrzymamy:
event mijanka_wprost multiple 10.0 none zw1- zw2- endevent
event mijanka_bok multiple 10.0 none zw1+ zw2+ endevent
Zdarzenie typu
multiple jest takim jakby zbiorem czynności, które po kolei trzeba wykonać. A czynności te (w obu przypadkach) zostaną wykonane po 10 sekundach trwania warunków na wystąpienie tych zdarzeń. Po szczegółowe informacje dotyczące zdarzeń odsyłam do pliku
Scenery.doc.
No, to teraz już wszystko działa jak należy. Swietnie! Uruchamiamy loka, podjeżdżamy przed pierwszą zwrotnicę, stajemy na 10 sekund, zwrotka się przestawia w bok. Wjeżdżamy na mijankę, omijając tor prosty, wyjeżdżamy poza nią, znów stajemy na 10 sekund (ale tak, aby nie przestawiła się zwrotnica pod składem!). Cofamy i wjeżdżamy tyłem na tor prosty. Koniec naszych prostych manewrów :-).
Wiemy już też, do czego potrzebne są nazwy torów: do ustawiania na nich składu(-ów), a także do wywoływania na nich różnych akcji związanych ze zdarzeniami.
I takim właśnie przykładowym plikiem scenerii, stworzonym przy pomocy programu
Jet 1.0 beta, oprócz tego wspomaganym też systemowym
Notatnikiem wyjaśniłem, jak można bez wielkiego zachodu stworzyć sobie prostą scenerię. Jedno, czego nie da się zrobić przy użyciu wymienionych narzędzi, to pokrycie scenerii teksturą trawy, po za tym nie da się też wstawiać dróg samochodowych. Ale, jak na dobry początek, do nauki tworzenia scenerii - znakomicie te programy wystarczą.
Zatem wszystkim chętnym życzę dobrej zabawy i wielu owoców swej nauki.
Pozdrowienia dla wszystkich "kolejarzy" ;-).