- Symulator MaSzyna -

Symulator EU07 (i nie tylko) => Pomoc w tworzeniu => Wątek zaczęty przez: janek32 w 27 Stycznia 2014, 20:24:50

Tytuł: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: janek32 w 27 Stycznia 2014, 20:24:50
Witam, próbuję ostatnio zrobić kabinę 303e w wersji IC na podstawie EP08 i EP07-10xx @szoguna. Wstawiłem fotel z tego ostatniego i nie znajduje się w tym miejscu co powinien. Jak go cofnąć lekko do tyłu?

Fragment oryginalnego t3d:
//---------------------------------------------------------------------------------
Parent: kabinaa
Type: Mesh
Name: krzeslonanana01
Anim: false
Ambient: 255.0 255.0 255.0
Diffuse: 255.0 255.0 255.0
Specular: 229.5 229.5 229.5
SelfIllum: false
Wire: false
WireSize: 1.0
Opacity: 100.0
Map: 303e_1]elementy_fotel
MaxDistance: 1000
MinDistance: 0
Transform:
           1.0 0.0 0.0 0.0
           0.0 1.0 0.0 0.0
           0.0 0.0 1.0 0.0
           -1.05563 5.98972 2.5255 1.0
NumVerts: 2724

Wstawiony fotel z budynia:
//---------------------------------------------------------------------------------
Parent: kabinaa
Type: Mesh
Name: fotel_pomo
Anim: false
Ambient: 255.0 255.0 255.0
Diffuse: 255.0 255.0 255.0
Specular: 229.5 229.5 229.5
SelfIllum: false
Wire: false
WireSize: 1.0
Opacity: 100.0
Map: 4e_2]elementy_fotel
MaxDistance: 1000
MinDistance: 0
Transform:
           1.0 0.0 0.0 0.0
           0.0 1.0 0.0 0.0
           0.0 0.0 1.0 0.0
           0.0 0.0 0.0 1.0
NumVerts: 4536

To samo trzeba będzie zrobić z fotelem mechanika.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: Ra w 27 Stycznia 2014, 20:27:32
Pierwsze 3 liczby w ostatniej linijce Transform: to są współrzędne wstawienia, np. -1.05563 5.98972 2.525. Ich orientacja zależy, do czego dany submodel masz podczepiony w hierarchii.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: szogun w 27 Stycznia 2014, 20:44:18
Lepszy będzie fotel z 303Eb, tylko tekstura do podmiany.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: janek32 w 28 Stycznia 2014, 01:08:18
Dzięki za pomoc, zawsze się zastanawiałem, jak się za ten transform zabrać. Ale faktycznie wstawiłem fotele z 303eb, przy okazji dołożyłem też stamtąd sołony przeciwsłoneczne.
Tak to teraz wygląda, gdyby było zainteresowanie, mogę poprawić kilka tekstur pulpitu (na razie robiłem na szybko z DDSów) i wrzucić na testy.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: Sawi w 28 Stycznia 2014, 14:27:27
Poprawka, to nie fotel z 303eb, tylko jak już ze 104eb.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: janek32 w 28 Stycznia 2014, 14:33:45
Poprawka, to nie fotel z 303eb, tylko jak już ze 104eb.
Fotele kopiowałem z t3d kabiny 303eb, zresztą w 104eb OIDP pomocnik ma taki sam fotel jak mechanik.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: Sawi w 28 Stycznia 2014, 14:39:34
Tak wiem, bo w kabinach 303eb fotel z epoczki wersji z klimą ma tylko mechanik.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: janek32 w 31 Stycznia 2014, 16:51:48
Fotele z 303eb i osłony są w tej chwili bezpośrednio pod bananem (czyli_int_42a), żeby nad sobą mieć taki sam transform jak w 303eb. Chciałbym wrzucić je w prawidłowe miejsce, czyli int_42a->int_424->kabinaa (albo b). Co trzeba zmienić w transformie?
Parent: int_42a
Type: Mesh
Name: fotele
Anim: false
Ambient: 180.0 180.0 180.0
Diffuse: 180.0 180.0 180.0
Specular: 229.5 229.5 229.5
SelfIllum: false
Wire: false
WireSize: 1.0
Opacity: 100.0
Map: 303e_b]fotele
MaxDistance: 1000
MinDistance: 0
Transform:
           0.102547 -1.09195 0.0 0.0
           1.09195 0.102547 0.0 0.0
           0.0 0.0 1.09675 0.0
           -0.772034 5.95434 2.33246 1.0
NumVerts: 3732

Przy fotelach z budynia wystarczyło dodać odległości przeciwne do tych z parenta, tutaj to nie skutkuje. Próbowałem na osłonach i zjeżdżały kilkanaście centymetrów w dół.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: Ra w 31 Stycznia 2014, 17:16:27
Tutaj w transformie jest jakiś kosmiczny obrót, normalnie nie powinny występować wartości większe od 1 (jako sinus i cosinus kąta obrotu). Biorąc pod uwagę pozycje "jedynek" (tzn. 1.09195), to ten transform zamienia osie OX i OY, czyli jest to obrót o około 90° w płaszczyźnie poziomej (aczkolwiek płaszczyzny mogą być obracane transformami). Najlepiej podaj/obejrzyj transformy obiektów nadrzędnych. Transform danego submodelu jedynie ustawia ten submodel względem miejsca wstawienia i ewentualnie obraca mu układ współrzędnych, natomiast układ współrzędnych w miejscu wstawienia zdefiniowany jest przez iloczyn transformów obiektów nadrzędnych.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: janek32 w 31 Stycznia 2014, 19:34:08
Hierarchia wygląda następująco: int_42a > int_424 > kabinaa/kabinab

int_42a:
Transform:
          1 0 0 0
          0 1 0 0
          0 0 1 0
          0 0 0 1

int_424:
Transform:
          1.0 0.0 0.0 0.0
          0.0 1.0 0.0 0.0
          0.0 0.0 0.94 0.0
          0.0 -0.07 0.145 1.0

kabinaa:
Transform:
           1.0 0.0 0.0 0.0
           0.0 1.0 0.0 0.0
           0.0 0.0 1.0 0.0
           0.0 0.0799999 -0.05 1.0

Co ciekawe, zastosowano tu podwójny banan, int_424 też nie zawiera żadnych trójkątów.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: Ra w 31 Stycznia 2014, 19:43:49
W takim razie w int_424 masz skalowanie w osi pionowej (94%), pewnie dlatego w kolejnym jest powiększenie. Żeby zmienić nadrzędny, musisz wymienić nazwę w Parent:. Ale jak tam jest skalowanie, to możesz nie dojść do ładu.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: janek32 w 01 Lutego 2014, 01:04:01
Tylko na czym dokładnie polega to skalowanie? Próbowałem przed chwilą wstawić przy osłonach skalowanie 1.06....., tak żeby po wymnożeniu tego przez 0.94 z grubsza wyszło 1 i raczej nie pomogło.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: Ra w 01 Lutego 2014, 01:43:16
Skalowanie polega na tym, że wszystkie współrzędne leżące na skalowanej osi są przemnażane przez jakiś współczynnik. Czyli np. jeśli w modelu będzie koło, to po przeskalowaniu wyjdzie z niego elipsa. Skalowanie jest bardzo niekorzystnym zjawiskiem i powinno być unikane.

Transform:
          1 0 0 0
          0 1 0 0
          0 0 1 0
          0 0 0 1
To jest macierz jednostkowa, która nie wprowadza żadnych zmian do współrzędnych wierzchołków sumodelu, jak również nie ma wpływu na potomne. Można ją zignorować.

Transform:
           1.0 0.0 0.0 0.0
           0.0 1.0 0.0 0.0
           0.0 0.0 1.0 0.0
           0.0 0.0799999 -0.05 1.0
To jest macierz definiująca przesunięcie submodelu (i wszystkich jego potomnych) o wektor. Jeśli nadrzędne submodele nie obracają układu współrzędnych, to oś OX będzie skierowana do przodu pojazdu, OY w lewo, a oś OZ do góry. Czyli przesunięcie będzie 8cm w lewo i 5cm w dół.

Transform:
          1.0 0.0 0.0 0.0
          0.0 1.0 0.0 0.0
          0.0 0.0 0.94 0.0
          0.0 -0.07 0.145 1.0
Ta macierz oznacza, że po przesunięciu o 7cm w prawo i 14.5cm w górę, wszystkie dalsze trójkąty będą miały zmniejszoną wysokość do 94%. To znaczy, że jeśli ta jest nadrzędna do poprzedniej, a tam jest przesunięcie -0.05 w transformie, to faktyczne przesunięcie będzie równe -0.047.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: muri w 02 Lutego 2014, 15:34:40
Tutaj masz info: http://pl.wikipedia.org/wiki/Elementarne_macierze_transformacji. Tylko macierze w plikach t3d są transponowane względem tego co masz w wiki (widać po macierze elementarnej - jedynki są na drugiej przekątnej).
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: janek32 w 10 Lutego 2014, 20:20:54
Ze skalowaniem już doszedłem do ładu, za to mam inne pytanie. Gdzie w transformie są informacje na temat obrotu względem osi X, Y i Z? Z opisu na wiki nie udało mi się wywnioskować, poza tym tam np. translacja o wektor jest podawana w ostatniej kolumnie a nie wierszu.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: Ra w 10 Lutego 2014, 20:38:26
Obroty w macierzach można tłumaczyć w różny sposób, mi się najbardziej podoba koncepcja wektorów jednostkowych. Dla macierzy o postacia d g 0
b e h 0
c f i 0
x y z 1
Wektorami jednostkowymi będą: OX: [a, b, c], OY: [d, e, f], OZ: [g, h, i]. W najprostszym przypadku macierzy jednostkowej, wektory są ustawione tak OX: [1, 0, 0], OY: [0, 1, 0], OZ: [0, 0, 1]. Rozważając np. obrót względem osi OZ, mamy początkowo OX: [1=cos(0°), 0=sin(0°), 0], OY: [0=-sin(0°), 1=cos(0°), 0], a trzecia współrzędna zostaje bez zmian. Chcąc zrobić obrót, wyliczamy wartości sin i cos kąta i wstawiamy je do wektorów jednostkowych w macierzy. Można też sobie wyznaczyć dowolny wektor jako jednostkowy dla którejś z osi submodelu, a pozostałe wyliczyć tak, aby były do niego prostopadłe. Wektory jednostkowe powinny mieć długość 1 (czyli a²+b²+c²=1, d²+e²+f²=1 i g²+h²+i²=1) , inaczej macierz będzie dokonywała również skalowania.
Tytuł: Odp: Dopasowanie pozycji fotela w kabinie
Wiadomość wysłana przez: muri w 10 Lutego 2014, 21:35:03
poza tym tam np. translacja o wektor jest podawana w ostatniej kolumnie a nie wierszu.
No tak, na tym polega transpozycja o której wspominałem:
Tylko macierze w plikach t3d są transponowane względem tego co masz w wiki (widać po macierzy elementarnej - jedynki są na drugiej przekątnej).
Transponowanie macierzy to po prostu "kopnięcie jej o 90 stopni" - i dlatego to co tam masz w wierszu u nas jest w kolumnie.
Gdzie w transformie są informacje na temat obrotu względem osi X, Y i Z? Z opisu na wiki nie udało mi się wywnioskować
Wartości funkcji trygonometrycznych kąta obrotu w danej osi są zawarte na odpowiednich miejscach macierzy. Które gdzie - to masz tutaj: http://pl.wikipedia.org/wiki/Elementarne_macierze_transformacji#Elementarne_macierze_rotacji - tylko pamiętaj o transpozycji! Albo pomęcz @Ra, on to chyba "kuma" najlepiej :)