Skocz do zawartości

Importowanie modeli 3D


Rekomendowane odpowiedzi

Importowanie modeli 3D

Przedstawiam wam mój sposób na bezbłędne importowanie modeli z blendera do GMSa. Importowany model będzie miał poprawną geometrię, informacje o wektorach normalnych wierzchołków i UV mapę.
Potrzebne będzie narzędzie GM Model Fix i oczywiście blender.
To nie jest tutorial modelowania więc przygotowałem swoje 3 modele, które sobie ściągniecie tutaj.
Są to modele Podłogi, ściany i sufitu. Textury pochodzą z pierwszej części Heretic

1. Blender:

- ładujemy plik z którymś modelem .blend
- przełączamy się w Object Mode [tab] i jeżeli coś jest zaznaczone to odznaczamy wszystko przyciskiem [A] , teraz [PPM] zaznaczamy model.
- przechodzimy do File > Export > Wavefront .obj
- i zaznaczamy te opcje:
ssPqK9B.png
- za pomocą kolejnych ustawień można filpnąć lub zeskalować model.
MGXNsPs.png
Ważne tutaj jest pole UP, oś którą tutaj ustawiasz powinna zgadzać się z UP vectorem zdefiniowanym w ustawieniach perspektywy w twojej grze. UP vector są to 3 ostatnie parametry funkcji d3d_set_projection( xF, yF, zF, xT, yT, zT, UPx, UPy, UPz ); w moim przykładzie ustawiłem go na 0, 0, 1 więc w blenderze w polu UP ustawiam dodatnią oś Z

2. GM Model Fix

Za pomocą tego programu przekonwertujesz .obj na GMowy format .d3d

- W File otwieramy zapisany z blendera plik .obj
- I powinien się pojawić twój model z nałożoną przykładową texturką z tego programu
JqDs0yX.png
model ściany

Moje modele są dobrze zrobione więc się tam pojawią ale gdybyś wczytywał swój i się nie pojawi to są 3 znane mi przyczyny:
  1. Model jest zbyt mały
  2. Model ma niepoprawne Face Normale. Można je podejrzeć w blenderze w Edit mode w panelu pod przyciskiem [N] ( ustaw skalę bo nie będzie ich widać )
    Face Normale muszą być skierowane na zewnątrz ( chyba że robisz model na którego patrzy się od wewnątrz np. model jakiegoś pomieszczenia )
  3. Model nie posiada siatki UV. Jak nie wiesz jak ją zrobić to zapoznaj się z tutorialami blendera. Przy skomplikowanych modelach stworzenie dobrej siatki może być czasochłonne i trudne.

- zapisujemy plik File > save to GM model, klikamy ALL

3. Game Maker Studio

- Teraz przechodzimy do GMS i dodajemy w included files nasze modele w formacie .d3d. Oraz w sprites textury które są dostępne w paczce z plikami .blend
Ja te sprity ładuję jako kolejne subimage, jeśli maja tą samą rozdzielczość. Przy ładowaniu textur najprawdopodobniej będzie trzeba je flipnąć w pionie.
-Trzeba jeszcze stworzyć sobie jakiś wygodny system ładowania zasobów ja przeważnie robię to tak:
Tworzę nowy room o nazwie ladowanie, ten room zawsze jest pierwszy i w nim mam obiekt który ładuje zasoby w create:
GML
/// Wczytywanie zasobw gry

globalvar gModel, gModelCnt, gTex, gTexCnt;

gModelCnt = 3; // ilosc modeli
gTexCnt = sprite_get_number(sTex); // ilosc textur
gTex[gTexCnt] = 0; // tablica z indexami statycznych textur
gModel[gModelCnt] = 0; // tablica z indexami modeli

// MODELE
for( i = 0; i < gModelCnt; i++; )
{
gModel = d3d_model_create(); // inicjowanie
}

// Wczytywanie zasobów modeli z plików, nazwa musi się zgadać z tym co masz w include files
d3d_model_load( gModel[0], "Ceil10x10.d3d" );
d3d_model_load( gModel[1], "Wall10x10.d3d" );
d3d_model_load( gModel[2], "Floor10x10.d3d" );

// TEXTURY
for( i = 0; i < gTexCnt; i++; )
{
gTex = sprite_get_texture( sTex, i ); // konwersja spritow na textury
}
room_goto_next();


Gra po załadowaniu modeli i textur do pamięci przejdzie do następnego rooma.

Zakładam że masz już działającą kamerę i widok 3D więc nie będę się o tym rozpisywał. Napiszę tylko jak wyświetlić model:
GML
d3d_model_draw( gModel[0], 0, 0, 0, gTex[0] );
d3d_model_draw( gModel[1], 0, 0, 0, gTex[1] );
d3d_model_draw( gModel[2], 0, 0, 0, gTex[2] );

itd.
Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...