rakson23 Napisano 8 Sierpień 2007 Napisano 8 Sierpień 2007 Witam, chcialem dowiedziec sie czy zna ktos jakis tutorial w ktorym wytłumaczone bedzie wczytanie oraz uzycie pliku obj lub jakiegos innego (wraz ze szkieletem i współrzędnymi tekstur) dla OpenGL. Jeżeli znacie jakis tutorial wklejcie linka bo niestety teraz mam dosc a wszystko co znajduje albo jest nieaktualne albo w conajmniej dziwnych językach.
Master Kiełbaster Napisano 8 Sierpień 2007 Napisano 8 Sierpień 2007 szkieletu chyba raczej nie wyeksportujesz w obj.
t0m3k Napisano 9 Sierpień 2007 Napisano 9 Sierpień 2007 nie wiem czy o to ci chodzi ale tu jest plugin dla max'a 8 (jest tez dla innych wersji) ktory umozliwia export obiektu jako kod jezyka C http://www.maxplugins.de/r6_files/mcgrath/EsmexportR6.zip
Alicia Napisano 11 Maj 2008 Napisano 11 Maj 2008 zacytuję przedpremierowy fragment mojej pracy inżynierskiej: Przede wszystkim są nam potrzebne dwa pliki glm.h, glm.cpp, które należy dołączyć do naszego projektu. W plikach tych są zawarte funkcje które przetwarzają informacje zawarte w obiekcie OBJ. W pliku OpenGla trzeba wkleić następującą funkcję: void LoadModel (char *objmodel){ glFrontFace(GL_CCW); // sposób wyświetlania ścianek GL_CW lub GL_CCW if (!objmodel_ptr) { objmodel_ptr = glmReadOBJ(objmodel); if (!objmodel_ptr) exit(0); glmUnitize(objmodel_ptr); glmFacetNormals(objmodel_ptr); glmVertexNormals(objmodel_ptr, 90.0); } glmDraw(objmodel_ptr , GLM_SMOOTH | GLM_MATERIAL | GLM_TEXTURE ); /* w zależności jaki sposób mapowania tekstur wybieramy, komentujemy tę linię albo następną */ // glmLinearTexture(objmodel_ptr); glmSpheremapTexture(objmodel_ptr); } Poprzez wywołanie funkcji w postaci: LoadModel("obj/NazwaObiektu.obj"); wyświetlamy model. Funkcja ta nie powinna być wywoływana w funkcji Display w głównym programie. W zmiennych globalnych trzeba jeszcze dodać: GLMmodel* objmodel_ptr; Te dwa pliki biblioteczne zawierają również funkcję czytająca i wyświetlająca bitmapę w formacie PPM. Wywołuje się ja w taki sposob: Texture = glmReadPPM("tex/NazwaTekstury.ppm", &width, &height); Więcej można przeczytać na stronie i z tej strony z jakiegoś przykładu scignij sobie glm.h, glm.cpp: http://www.xmission.com/~nate/
piksar Napisano 11 Maj 2008 Napisano 11 Maj 2008 bedzie zachwycony ze po 10 miesiacach otrzymal odpowiedx
Febrith Napisano 18 Styczeń 2009 Napisano 18 Styczeń 2009 Cześć Mam mały problem.... jak wpisuję linijkę kodu: Texture = glmReadPPM("Data/Tekstury/Drewno.ppm", &width, &height); to mi wyrzuca, że funkcja niezadeklarowana.... co ja mam z tym zrobić, jak i gdzie ją zadeklarować?? z góry dziękuję za pomoc
lechoo Napisano 18 Styczeń 2009 Napisano 18 Styczeń 2009 Prawdopodobnie musisz zainkludowac plik naglowkowy z daklaracja tej funkcji (glm.h).
Febrith Napisano 18 Styczeń 2009 Napisano 18 Styczeń 2009 Dzięki już znalazłam funkcja nazywa się GLM_TEXTURE. Teraz mam problem z szerokością i wysokością... W pliku dlm.cpp jest coś takiego: glmReadPPM(char* filename, int* width, int* height) ale jak wywołuję funkcję ta jak było wyżej, tzn. GLM_TEXTURE = glmReadPPM("Data/Tekstury/Drewno.ppm", &width, &height); to się czepia, że width i height są niezadeklarowane... Czy muszę coś dodać do zmiennych globalnych?? Jeśli tak to co?? Z góry dziękuję za pomoc
lechoo Napisano 18 Styczeń 2009 Napisano 18 Styczeń 2009 Zakladam ze masz je gdzies zadeklarowane. Jestes pewien ze width i height sa widoczne w miejscu wywolania funkcji?
Alicia Napisano 19 Styczeń 2009 Napisano 19 Styczeń 2009 Tak, trzeba zalinkować plik glm.h aby poszlo. Zmienne width i height trzeba podać w zmiennych globalnych jako: static GLint width , height; wartości tych zmiennych pobierane są z zalinkowanych plików *.ppm lepiej dla pewności zerknij sobie na kod źrodlowy: http://aseweryn.nazwa.pl/praca_inz/kod_zrodlowy/zj_Fresnela.rar rozzipuj to i zerkinj sobie na plik amain_f.cpp Ten myk z czytaniem pliku .obj zostal wykorzystany do prezentacji shaderow w GLSL na wlasnoręcznie wykonanych obiektach. Aha, tutaj zostala wykorzystana tekstura sześcienna (mapowanie srodowiska). Przy zwykłych teksturach też powinno pójść.
Febrith Napisano 21 Styczeń 2009 Napisano 21 Styczeń 2009 Wielkie dzięki!! Mam jeszcze pytanie jak wyeksportować plik ppm z Max'a.... Ja ma tylko mtl.... a jak się nie da to, w funkcji wczytującej mtl jast tak: glmReadMTL(GLMmodel* model, char* name) to co ja mam zrobić z tym model ?? z góry dziękuję
Alicia Napisano 21 Styczeń 2009 Napisano 21 Styczeń 2009 Ja pliki .ppm zapisywałam ze zwykłych bitmap w GIMPie. Obiekt eksportowałam bez tekstur z Lightwave3D, wię Ci z MAXem nie pomogę. Niestety w tym sposobie ładowania modeli mozna tylko mapować planarnie albo sferycznie i nie ma UV, zresztą inne mapowanie nie było mi potrzebne. I taka mała dygresja, może nie związana z tematem wątku. Kiedyś dawno temu była przeglądarka do plików 3D i chyba sie nazywała 3DEksplorer, mogła ona zapisywać obiekty jako kod C++/OpenGL w postaci klasy. Nie udało mi się jednak obczaić jak to załadować do OpenGLa.
Ziper Napisano 22 Styczeń 2009 Napisano 22 Styczeń 2009 Ta przegladarka nazywa sie dokladnie - Deep Exploration i exportuje do kodu c++ praktycznie wszystkie informacje zwiazane z modelem - liste vertexow, normalne, indexy, materialy. Wygenerowany kod posiada gotowa funkcje renderujaca listy opengl i wystarczy miec zainicjowany kontekst opengla zeby go uzyc.
Febrith Napisano 8 Luty 2009 Napisano 8 Luty 2009 Kolejne pytanie: Dlaczego napisana przeze mnie aplikacja się zamyka?? -.-' Poradziłam sobie z tymi teksturami i przy kompilacji nie wyskakują już żadne błędy, ale kiedy uruchamiam aplikację to się od razu zamyka... Domyślam się, że to ma związek z tymi teksturami, że się nie ładują i następuje wyjście, ale nie wiem dlaczego... Jak ktoś ma jakieś rady to bardzo proszę o pomoc. Z góry dziękuję!!
Ziper Napisano 8 Luty 2009 Napisano 8 Luty 2009 Dodaj do kodu messageboxa w miejscach sprawdzania bledow albo zapodaj kawalek kodu odpowiedzialnego za zdarzenia.
Alicia Napisano 9 Luty 2009 Napisano 9 Luty 2009 Jeśli pisałeś w Dev-C++ to czasami pomaga komenda na końcu programu: getchar();
Febrith Napisano 9 Luty 2009 Napisano 9 Luty 2009 Mam jeszcze jedno pytanie: Jak ładuje modele bez tekstur to one są jakby płaskie... Nie widać "głębokości".... Czy wiecie może dlaczego??
Ziper Napisano 9 Luty 2009 Napisano 9 Luty 2009 (edytowane) Pewnie dlatego ze nie wlaczyles swiatla. Po jego wlaczeniu dodatkowo musisz przekazac normalne dla kazdego face`a. Edytowane 10 Luty 2009 przez Ziper
Alicia Napisano 10 Luty 2009 Napisano 10 Luty 2009 W tej funkcji masz już znormalizowany obiekt: void LoadModel (char *objmodel){ glFrontFace(GL_CCW); // sposób wyświetlania ścianek GL_CW lub GL_CCW if (!objmodel_ptr) { objmodel_ptr = glmReadOBJ(objmodel); if (!objmodel_ptr) exit(0); glmUnitize(objmodel_ptr); glmFacetNormals(objmodel_ptr); // tutaj normalne faceów glmVertexNormals(objmodel_ptr, 90.0); // normalne wierzchołków } glmDraw(objmodel_ptr , GLM_SMOOTH | GLM_MATERIAL ); } Tak jak mój przedmówca powiem, że powinieneś tylko światła właczyć, w odpowiednim miejscu instrukcją: glEnable(GL_LIGHTING); // włączenie oświetlenia glEnable(GL_LIGHT0); // włączenie konkretnego światła (z tego co pamiętam z wykładów to chyba do óśmiu jednocześnie można) Może masz normalne odwrócone do wewnątrz obiektu i zamiast glFrontFace(GL_CCW); powinno być glFrontFace(GL_CW);. Ale w takim wypadku zobaczysz wnętrze obiektu, więc jest mało prawdopodobne, że to jest przyczyną. Obstawiam swiatła ;)
Febrith Napisano 22 Luty 2009 Napisano 22 Luty 2009 Wiecie może dlaczego jak ładuję pliki obj to mnie się program wyłącza?? W innej aplikacji mi działa, a w drugiej nie chce?? Wszystko robię tak samo z tą tylko różnicą, że w tym co się wyłącza ładuję pliki bmp, ale nie na te obj tylko na zwykłe sześciany?
Alicia Napisano 24 Luty 2009 Napisano 24 Luty 2009 Niestety dalej ci nie pomogę, może popytaj większych "wymiataczy" w programowaniu.
Rekomendowane odpowiedzi
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ę