Autor Wątek: plik Md2 wierzchołki.  (Przeczytany 1110 razy)

Offline konserwa

  • Użytkownik

# Lipiec 05, 2012, 22:57:25
Z tego co rozumiem współrzędne wierzchołków znajdują się w Klatce:
188 215 158 61 - Skala x
188 215 158 61 - Skala y
188 215 158 61 - Skala z
172 135 135 46 -Translacja x
120 228 130 66 -Translacja y
167 158 200 193 -Translacja z
102 114 97 109 101 48 49 -Nazwa klatki

I pytanie brzmi gdzie tu są wierzchołki a przynajmniej ich współrzędne.
0 70 2 0 0 244 243 18 0 0
254 171 143 0
254 0 143 0
0 0 143 0
0 171 143 192

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Avaj

  • Użytkownik

# Lipiec 05, 2012, 23:42:59
http://home.elka.pw.edu.pl/~aokarski/md2_model_tutorial_pl.html

miłego czytania, z tego co przejrzałem to tu jest wszystko co potrzeba

Offline Veldrin

  • Użytkownik

# Lipiec 06, 2012, 00:53:13
I to na jakim, przyjaznym i zawsze działającym serwerze :D

Offline konserwa

  • Użytkownik

# Lipiec 06, 2012, 03:05:15
pisze w C# wiec kodem nie mogę się za bardzo sugerować.
że muszę użyć wzoru to już zauważyłem ale skąd te "verts" jeżeli "verts" jest charem to musi zajmować 1 bajt.
struktura vertex_t ma 4 pola char czyli zajmuje 4 bajty wiec ilość tego kodu po podzieleniu na 4 powinna dać 4.

nie jest tak wiec w czym problem.

Offline voytech

  • Użytkownik

# Lipiec 06, 2012, 10:26:31
Odnosząc się do pierwszego postu, Skala i Translacja razem da nam 6 floatów i podane przez ciebie grupki czterech bajtów można w pytonie szybko "rozpakować" do floata w ten sposób:
Kod: (python) [Zaznacz]
>>> import struct
>>> def to_float(s4): return struct.unpack( '<f', bytes( [int(x) for x in s4.split()] ) )[0]
>>> to_float('188 215 158 61')
0.07755991816520691
>>> to_float('172 135 135 46')
6.163189403274316e-11
>>> to_float('120 228 130 66')
65.44622802734375
>>> to_float('167 158 200 193')
-25.07746696472168
>>>
liczby wyglądają w miarę sensownie, więc chyba nie popełniłem błędu.

Później w strukturze klatki jest nazwa wielkości 16 bajtów, czyli do tej pory mamy już 16 + 6*4 bajtów.

Potem są wierzchołki. W strukturze jest to tylko jeden wierzchołek, a dokładnie jest to pierwszy z wielu. Ot taki dziwny zapis. Liczby wierzchołków powinieneś szukać w nagłówku md2_t w polu o nazwie "num_xyz". W języku C nie ma kontroli zakresu dla tablicy przy zapisie i odczycie dlatego takie coś zadziała. Jedna definicja struktury frame_t i można jej używać do modeli o różnej liczbie wierzchołków. C# nie znam i nie wiem czy tam takie coś przejdzie.

Oczywiście wierzchołek jest zakodowany, a normalna jest indeksem do tablicy normalnych, którą możesz ściągnąć np. z tej strony: http://tfc.duke.free.fr/coding/src/anorms.h.

102 114 97 109 101 48 49 -Nazwa klatki
I pytanie brzmi gdzie tu są wierzchołki a przynajmniej ich współrzędne.
0 70 2 0 0 244 243 18 0 0
nie ładnie tak wchrzaniać komentarz między dane. Nota bene 16 z nich to nazwa:
>>> s = '102 114 97 109 101 48 49 0 70 2 0 0 244 243 18 0 '.split()
>>> [chr(int(x)) for x in s]
['f', 'r', 'a', 'm', 'e', '0', '1', '\x00', 'F', '\x02', '\x00', '\x00', 'ô', 'ó', '\x12', '\x00']
>>>
widać, że nazwa to "frame01"

następnie dane wierzchołków pogrupowane po 4 bajty:
0 254 171 143
0 254 0 143
0 0 0 143
0 0 171 143
192

wierzchołek0: 0 254 171
normalna0: { -1.000000f,  0.000000f,  0.000000f } <- wektor o indeksie 143 w pliku anorm.h

Odkodowanie wierzchołka polega na pomnożeniu przez Skale i dodaniu Translate odczytanych ze struktury klatki. Szybkie sprawdzenie:
>>> x = to_float('188 215 158 61')*0 + to_float('172 135 135 46')
>>> y = to_float('188 215 158 61')*254 + to_float('120 228 130 66')
>>> z = to_float('188 215 158 61')*171 + to_float('167 158 200 19')
>>> x,y,z
(6.163189403274316e-11, 85.1464472413063, 13.262746006250381)
>>>
Tak to chyba powinno chyba wyglądać.


Offline konserwa

  • Użytkownik

# Lipiec 06, 2012, 12:12:05
Jezu wszystkie bajty po nazwie to Wierzchołki ?

Bo jeśli tak mam model z 8 wierzchołkami ale mam aż 24 rzędy bitów po 4 bity w każdym.

NVM jednak sie zgadza
bo wartość
num_xyz=24
« Ostatnia zmiana: Lipiec 06, 2012, 17:26:12 wysłana przez konserwa »