Autor Wątek: Wyrównywanie struktury  (Przeczytany 1328 razy)

Offline Piot

  • Użytkownik

# Marzec 23, 2008, 02:24:27
Mam taki oto problem.
Próbuje odczytać model z COD4 z pliku binarnego stworzyłem odpowiednia strukturę wertexa i podczas odczytu część danych zawiera prawidłowe wartości  (normal, texCoord itp.) a druga część zawiera nieprawidłowe (pozycja, wagi.itp). Nieprawidłowość ta polega na tym ze dane te zostały przesunięte o jeden bajt. Mniemam ze przesuniecie to nastąpiło z powodu tego wyrównywania ( była o tym mowa w innym wątku)
Pytanie: Jak to obejść? Czy musze skorzystać z jakiejś opcji kompilatora, cz może jest jakieś inne rozwiązanie?

Offline Mr. Spam

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

Offline SauRooN

  • Użytkownik

# Marzec 23, 2008, 03:02:37
Najprostszym rozwiązaniem jest wczytywanie elementów tej struktury po kolei, a nie naraz całej struktury. Jedyny negatywny efekt tego rozwiązania to mniejsza szybkość wczytywania pliku.
« Ostatnia zmiana: Marzec 23, 2008, 15:21:35 wysłana przez SauRooN »

Offline Piot

  • Użytkownik

# Marzec 23, 2008, 13:53:22
chodzi o to ze kompilator sam uzupelnia ta strukture wertexa stad bledny odczyt danych.
W tej chwili wczytuje caly plik do bufora i kazdy elemet wertexa podczepiam odzielnie po przez wskaznik.
wtedy to dziala.

Jesli za to podczepie cala strukture wertexa(zawierajaca wszystkie jego elemety) to nastepuje to przesuniecie.

Chyba bez ustawienia odpowiednije opcji kompilatora sie nie da.

Wpliku dane sa zapisane bez tego przesuniecia.

Offline mINA87

  • Użytkownik

# Marzec 23, 2008, 14:08:36
Jeśli używasz C++ to możesz użyć
#pragma pack(1)
albo lepiej nawet:
#pragma pack(push, 1)
struct
{
};
#pragma pack(pop)
Dzięki temu ta akurat strukturka będzie miała rozmiar co do bajta taki jaki chcesz żeby miała. Jeśli używasz tej struktury wierzchołka w jakiejś tablicy, przesyłasz ją do karty przez jakiś bufor or sth, to warto to zrobić.

Offline Piot

  • Użytkownik

# Marzec 23, 2008, 14:12:19
Ok dzieki dziala.

 :)