Odpowiedź 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
O Spline słów kilka...
Autor Wiadomość

Użytkownik
Użytkownicy
Liczba postów: 51
Dołączył: 12-2012
Podziękowań: 20
Post: #1
O Spline słów kilka...
Może to nie do końca będzie poradnik, ale opis poszczególnych wpisów powinien być przydatny ;)


Spline definiuje się tak, żeby punkt 0 był na środku żeby oś splina była osią drogi, czyli lewy chodnik będzie np. pomiędzy -10 a -5, a prawy pomiędzy 5 a 10.

M&R określili pewne normy dla wysokości chodników i ulic:
- ulica - 10 cm (0.100),
- chodnik - 25 cm (0.250),
- obniżony krawężnik przy przejściach dla pieszych - 15 cm (0.150),


Height Profiles (nie wiem od czego dokładnie jest, być może AI jakoś wykorzystuje te wpisy).
W tej sekcji chodzi o ogólne wypisanie jakie części splina są na jakiej wysokości, np. od -10 do -5 chodnik na wys. 25 cm, od -5 do 5 droga na wys 10cm i od 5 do 10 chodnik na 25 cm.

Kod:
[heightprofile]
-10.000   --> Wartość początkowa
-3.000    --> Wartość końcowa
0.250     --> Wysokość początkowa
0.250     --> Wysokość końcowa

Textures - zawiera definicję tekstur, które zostaną wykorzystane na splinie, każda tekstura ma swój numer, liczenie zaczyna się od 0.

Kod:
[texture]
str_asphdrk.bmp

Graphical Lanes - określa nałożenie wcześniej zdefiniowanych tekstur. Definiuje się tutaj wektory, które na podstawie wpisanych parametrów rozciągają teksturę na splinie. Patrząc na przekrój poprzeczny splina można zauważyć, że tekstura pojawi się po lewej stronie tego wektora, tzn. że jeśli zaczniemy definiowanie od mniejszej wartości (np. - 10 do -5) to tekstura wyświetli się na górze, jeżeli jednak definicja będzie od -5 do -10 to tekstura będzie widoczna od dołu.

   

Kod:
[profile]
1     --> Nr tekstury zdefiniowanej w sekcji [b]Textures[/b] (w tym wypadku będzie to druga tekstura)

[profilepnt]  --> Określenie położenia pierwszego punktu (początek wektora)
-10.000    --> Wartość na osi x tego punktu
0.250      --> Wysokość punktu (oś y)
0.550      --> Ten wpis dotyczy tekstury, jeśli tekstura ma 512 pikseli szerokości, to zerowy piksel to wartość 0.000, a 512 piksel to wartość 1.000. Dozwolone są wartości ujemne i większe od 1.000 (przykładowo rozciągamy teksturę od jej punktu -1.000 do punktu 2.000, to znaczy, że na szerokość tekstura zostanie powielona 3 razy). Jeśli tutaj wartość będzie mniejsza niż w definicji końca wektora to tekstura rozłoży się "normalnie", jeśli na początku wartość będzie większa, to tekstura zostanie rozłożona "lustrzanie" (ważne np. dla teksturowania chodników gdyż 1. będzie miał krawęznik po lewej, a 2. krawęznik po prawej)
0.200      --> Jest to rozciągłość tekstury. Wartość ta mówi OMSI jaka część wysokości tekstury ma być rozciągnięta na 1 metr długości splina (dla 0.200 tekstura będzie się powtarzała co 5 metrów długości splina, dla 0.167 co 6 metrów), wartości powinny być takie same dla punktu początowego i końcowego.

[profilepnt]  --> Określenie położenia drugiego punktu (koniec wektora)
-8.250    --> dla tekstur będących pionowo (ściana, lub krawęznik) wartość powinna być taka sama jak punktu początkowego
0.250    --> Jeżeli tekstura jest pionowa to np. ściana lewego kraweznika bedzie miała początek 0.250 i koniec 0.100 wysokości.
0.895    
0.200

Paths - wpisy ścieżek dla AI.
Rodzaje scieżek:
0 - dla samochodów
1 - dla pieszych
2 - kolejowa
Kierunki poruszania się po ścieżce:
0 - w kierunku rozkładania splina
1 - przeciwny
2 - oba kierunki (stosowane np. dla ściezek ludzi)

Kod:
[path]
1       --> Rodzaj ścieżki
-9.250  --> umiejscowienie ściezki w osi x (jeżeli droga jest od -5 do 5, to ścieżki dla samochodów będą w -2.500 i 2.500)
0.250   --> wysokośc na jakiej ściezka się znajduje
0.981   --> szerokość ścieżki (nie wiem jak jest to wykorzystywane przez OMSI)
2       --> kierunek poruszania się AI po ściezce


Przykład gotowego splina (Seeburger Str.)
Kod:
File created with StreetCreator v1.000

---------------------------
      Height Profiles
---------------------------

[heightprofile]
-10.500
-5.500
0.250
0.250

[heightprofile]
-5.500
5.500
0.100
0.100

[heightprofile]
5.500
10.500
0.250
0.250

---------------------------
         Textures
---------------------------

[texture]
str_side1.bmp

[texture]
str_asphdrk_1line.bmp

---------------------------
     Graphical Lanes
---------------------------

Left sidewalk:

[profile]
0

[profilepnt]
-10.500
0.250
0.187
0.200

[profilepnt]
-5.500
0.250
0.953
0.200

[profile]
0

[profilepnt]
-5.500
0.250
0.953
0.200

[profilepnt]
-5.500
0.100
0.995
0.200

Lane:

[profile]
1

[profilepnt]
-5.500
0.100
0.995
0.167

[profilepnt]
0.000
0.100
0.005
0.167

Lane:

[profile]
1

[profilepnt]
0.000
0.100
0.005
0.167

[profilepnt]
5.500
0.100
0.995
0.167

Right sidewalk:

[profile]
0

[profilepnt]
5.500
0.100
0.995
0.200

[profilepnt]
5.500
0.250
0.953
0.200

[profile]
0

[profilepnt]
5.500
0.250
0.953
0.200

[profilepnt]
10.500
0.250
0.187
0.200

---------------------------
          Paths
---------------------------

[path]
1
-7.806
0.250
1.959
2

[path]
0
-1.639
0.100
3.278
1

[path]
0
1.639
0.100
3.278
0

[path]
1
7.806
0.250
1.959
2

PS. Jeśli to co napisałem odpowiada - proszę o przeniesienie do odpowiedniego działu ;)

/ Poradnik został opracowany w odpowiedzi na pytanie: http://strefa-omsi.pl/Watek-wydzielono-S...822#pid822 /

(Ten post był ostatnio modyfikowany: 22.01.2013 22:29 przez skawek.)
22.01.2013 15:22
Szukaj postów Cytat
 Podziękowania za post: .::Pezet , P K S

VIP
Zasłużeni
Liczba postów: 255
Dołączył: 12-2012
Podziękowań: 180
Post: #2
RE: O Spline słów kilka...
Podrzucę jeszcze patent na dwustronny krawężnik.

Najczęściej krawężnik jest widoczny tylko od strony jezdni, ale w niektórych sytuacjach przydałaby się widoczność krawężnika także z drugiej strony. Można zrobić to tak:

Kod:
[profile]
0

[profilepnt]
2.500
0.100
0.995
0.200

[profilepnt]
2.500
0.250
0.973
0.200

[profile]
0

[profilepnt]
2.500
0.250
0.973
0.200

[profilepnt]
2.500
0.100
0.995
0.200

Pierwsza część profilu wyświetla tekstury od strony jezdni, natomiast odwrotność dwóch środkowych pozycji w drugim profilu umożliwia wyświetlenie krawężnika z drugiej strony.

Analogicznie można to zastosować dla jezdni albo chodników. Wówczas ze splinów możemy stworzyć np. most/wiadukt.

(Ten post był ostatnio modyfikowany: 23.01.2013 13:14 przez mpaw82.)
23.01.2013 13:13
Szukaj postów Cytat
 Podziękowania za post: .::Pezet

Użytkownik
Użytkownicy
Liczba postów: 1
Dołączył: 01-2013
Podziękowań: 2
Post: #3
RE: O Spline słów kilka...
Pomyślałem że szkoda aby moje wypociny się marnowały, więc przeklejam je tutaj, a że jestem ich autorem to wolno mi;)

------------------------------

W tym miejscu, chcę przedstawić poradnik, jak zbudować własny spline i omówię wszystkie sekcje jakie znajdują się w pliku .sli.

UWAGA! Nie wzorujcie się na SDK, a konkretnie na pliku Inofficial_SDK_Omsi_0.1.02.pdf, bo chyba od tamtego czasu zmieniła się trochę struktura spline.

Do dzieła. Najlepiej się omawia na przykładzie, a więc na tapetę idzie jeden z prostszych segmentów czyli str_2spur_11m_SeeburgerStr1.sli. Plik można edytować w notatniku.

Struktura każdego spline składa się z 4 sekcji: Height Profiles, Textures, Graphical Lanes i Paths. Do poprawnego zrozumienia wartości używanych w pliku trzeba to zobrazować plikiem:

[Obrazek: symetria.jpg]

Ważne: wszystkie wartości są wyrażone w metrach. Do tego trzeba sobie rozrysować przyszły spline na kartce, bo jak widać, jest on symetryczny!. Zatem koordynatą środka X jest zawsze 0, a resztę drogi rozkładamy na boki. W powyższym przypadku chodnik przypada w sekcjach -10.5 do -5.5 oraz 5.5 do 10.5. Droga natomiast to obszar pomiędzy punktami -5.5 do 5.5 (na osi X - jest to ważne). Wszystkie sekcje swoje wpisy opiera na kierunku od lewej do prawej. Nie sprawdzałem czy zaburzenie tej kolejności coś psuje (na pewno czytelność).

Po takim wstępie omówię po kolei sekcje:

Kod:
---------------------------
      Height Profiles
---------------------------

[heightprofile]
-10.500
-5.500
0.250
0.250

[heightprofile]
-5.500
5.500
0.100
0.100

[heightprofile]
5.500
10.500
0.250
0.250

Z angielskiego: profil wysokości. Jak widać są trzy wpisy w sekcji. Pierwsza odpowiedzialna jest za lewy chodnik. Wg. wzoru:

Kod:
[heightprofile]
x1 - współrzędna lewej krawędzi
x2 - współrzędna prawej krawędzi
z1 - wysokość lewej krawędzi
z2 - wysokość prawej krawędzi

0.250 - jest to wysokość chodnika (tak to zostało przyjęte)

Drugi wpis w sekcji mówi nam, że od punktu -5.5 do 5.5 (czyli razem 11 metrów szerokości) będziemy mieli drogę na wysokości 0.1 (standardowa wysokość drogi w OMSI).

Trzeci wpis to prawy chodnik, stworzony analogicznie do lewego.

Zasada jest prosta: im więcej przewidujemy różnic wysokości w spline, tym więcej wpisów musi być w sekcji. Każdy odcinek musi być opisany w profilu wysokości!. Np. spline z chodnika, asfaltu, pasu zieleni, asfaltu i chodnika musi posiadać 5 wpisów w sekcji jeśli chcemy, aby chodnik i pas zieleni był wyżej niż asfalt.

Sekcja textures:

Kod:
---------------------------
         Textures
---------------------------

[texture]
str_side1.bmp

[texture]
str_asphdrk_1line.bmp

Każda z użytych tekstur musi być wpisana w tej sekcji. Tekstury są "numerowane", tzn. że w przyszłej sekcji definicje tekstur są liczone od góry i od 0, w tym przypadku wpis str_side1.bmp będzie miał numer 0 a str_asphdrk_1line.bmp będzie miał numer 1 i tak dalej (w przypadku większej ilości tekstur. Pliki wypisane w tej sekcji muszą znajdować się w katalogu "textures" (oczywiście powinny posiadać też swój plik .cfg).

Sekcja następna (najtrudniejsza) to Graphical Lanes:

Kod:
---------------------------
     Graphical Lanes
---------------------------

Left sidewalk:

[profile]
0

[profilepnt]
-10.500
0.250
0.187
0.200

[profilepnt]
-5.500
0.250
0.953
0.200

[profile]
0

[profilepnt]
-5.500
0.250
0.953
0.200

[profilepnt]
-5.500
0.100
0.995
0.200

Lane:

[profile]
1

[profilepnt]
-5.500
0.100
0.995
0.167

[profilepnt]
0.000
0.100
0.005
0.167

Lane:

[profile]
1

[profilepnt]
0.000
0.100
0.005
0.167

[profilepnt]
5.500
0.100
0.995
0.167

Right sidewalk:

[profile]
0

[profilepnt]
5.500
0.100
0.995
0.200

[profilepnt]
5.500
0.250
0.953
0.200

[profile]
0

[profilepnt]
5.500
0.250
0.953
0.200

[profilepnt]
10.500
0.250
0.187
0.200


Left sidewalk: <---- to jest ignorowany wpis w tej sekcji, służy za komentarz.

[profile]
0 <---- odnosi się do numeru tekstury z sekcji "textures". Zgodnie z przykładem jest to tekstura str_side1.bmp, czyli chodnik. Teraz definiujemy położenie tekstury:

Do łatwiejszego omówienia przyda się kolejny obrazek przykładowej tekstury:

[Obrazek: tekstura.jpg]

Kod:
[profilepnt]
-10.500 <--- położenie punktu x1
0.250 <--- wysokość punktu x1
0.187 <--- wartość od którego punktu zaczyna być pobierana określona tekstura (w tym przypadku jest to odległość 18,7% od lewej krawędzi)
0.200 <--- trochę tajemniczy faktor, który odpowiedzialny jest za powtarzanie się tekstury, czasem trzeba go dobrać doświadczalnie, sam dokładnie tego nie zgłębiłem

Aby "zakończyć" kładzenie tekstury, należy zdefiniować jej drugi brzeg:

Kod:
[profilepnt]
-5.500 <--- położenie punktu x2
0.250 <--- wysokość punktu x2
0.953 <-- wartość do którego punktu zaczyna być pobierana określona tekstura (w tym przypadku jest to odległość 95,3% od lewej krawędzi)
0.200

W teorii zakończyliśmy definicję chodnika. Ale chcielibyśmy, aby był ładny krawężnik, zamiast "powietrza pod chodnikiem". Zatem nic prostszego, definiujemy kolejną podsekcję wykorzystując różnicę wysokości:

Kod:
[profile]
0 <--- definicja tekstury

[profilepnt]
-5.500 <--- punkt x1 krawężnika
0.250 <--- wysokość punktu x1 krawężnika
0.953 <-- wartość od którego punktu zaczyna być pobierana określona tekstura (w tym przypadku jest to odległość 95,3% od lewej krawędzi)
0.200

[profilepnt]
-5.500 <--- punkt x2 krawężnika jest równy x1, ponieważ idziemy w pionie!
0.100 <--- wysokość punktu x2 krawężnika - tu jest zmiana wysokości
0.995 <-- wartość do którego punktu zaczyna być pobierana określona tekstura (w tym przypadku jest to odległość 99,5% od lewej krawędzi)
0.200

I już! Ponieważ jesteśmy w punkcie -5.5 zabieramy się za drogę, więc definiujemy kolejne sekcje:

Kod:
Lane: <--- pomijalny komentarz

[profile]
1 <--- tekstura numer 1 (czyli druga!)

[profilepnt]
-5.500 <--- x1
0.100 <--- z1
0.995 <--- ciekawa sprawa, jeżeli zaczniemy definiować teksturę od prawej do lewej [od 99,5% do 0,5%] to zostanie ona odbita lustrzanie!)
0.167

[profilepnt]
0.000 <--- x2 (sam środek)
0.100 <--- z2
0.005 <--- ciekawa sprawa, jeżeli zaczniemy definiować teksturę od prawej do lewej [od 99,5% do 0,5%] to zostanie ona odbita lustrzanie!)
0.167

Lane: <--- pomijalny komentarz (tworzymy kolejny pas)

[profile]
1 <--- tekstura numer 1 (czyli druga!)

[profilepnt]
0.000 <--- x1
0.100 <--- z1
0.005 <--- tym razem tekstura "po bożemu" czyli od lewej do prawej [od 0,5% do 99,5%]
0.167

[profilepnt]
5.500 <--- x2
0.100 <--- z2
0.995 <--- tym razem tekstura "po bożemu" czyli od lewej do prawej [od 0,5% do 99,5%]
0.167

I mamy załatwioną drogę. Został nam chodnik, a ponieważ idziemy od lewej, jako pierwszy musimy ułożyć krawężnik:

Kod:
[profile]
0 <--- tekstura pierwsza z listy

[profilepnt]
5.500 <--- x1 = x2
0.100 <--- z1 (krawężnik przy drodze)
0.995
0.200

[profilepnt]
5.500 <--- x2 = x1
0.250 <--- z2 ((krawężnik przy chodniku)
0.953
0.200

[profile]
0 <--- tekstura pierwsza z listy

[profilepnt]
5.500 <--- x1
0.250 <--- z1
0.953 <--- tekstura odwrócona lustrzanie (bo pierwszy punkt jest dalej lewej krawędzi)
0.200

[profilepnt]
10.500 <--- x2
0.250 <--- z1
0.187 <--- tekstura odwrócona lustrzanie (bo pierwszy punkt jest dalej lewej krawędzi)
0.200

I tyle. O czym należy bezwględnie pamiętać? O właściwej strukturze, czyli najpierw definiujemy fragment teksturą ([profile]) a następnie dwoma punktami ([profilepnt]).

I na koniec definiujemy patche, czyli ruch na naszym spline, bo na razie jest martwy:

Kod:
---------------------------
          Paths
---------------------------

[path]
1
-7.806
0.250
1.959
2

[path]
0
-1.639
0.100
3.278
1

[path]
0
1.639
0.100
3.278
0

[path]
1
7.806
0.250
1.959
2

Definicja ścieżki nie jest trudna. Oto opis:

Kod:
[path]
V <--- definicja, kto może się poruszać ścieżką (0 - auto, 1 - pieszy, 2 - kolej)
X <--- miejsce, w którym dana ścieżka jest położona (wartości zgodnie z pierwszym rysunkiem)
Z <--- wysokość (dla aut 0.1, dla pieszych 0.25)
W <--- szerokość ścieżki (1.959 dla pieszych, 3.278 dla aut)
D <--- kierunek poruszania się (0 - do przodu, 1 - do tyłu, 2 - oba kierunki)

Patche należy tak modyfikować, aby nasze spline mogły się połączyć już z istniejącymi. A na deser, dowód że to działa. Mój pierwszy spline:D

[Obrazek: spline.jpg]

25.02.2013 20:46
Szukaj postów Cytat
 Podziękowania za post: solarisjanek , barteg
Odpowiedź 




Użytkownicy przeglądający ten wątek: 1 gości

Forum Strefa-OMSI.pl

Tematyczne Forum dotyczące najpopularniejszego symulatora autobusu - OMSI. Zapraszamy do rejestracji i aktywnego udziału w Społeczności.

Strona wykorzystuje pliki cookies. Korzystanie z witryny oznacza zgodę na ich zapis lub odczyt wg ustawień przeglądarki.

Współpracujemy z:

Polecamy także: