Napisano 8 Sierpień 200717 l 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.
Napisano 9 Sierpień 200717 l 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
Napisano 11 Maj 200816 l 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/
Napisano 18 Styczeń 200916 l 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
Napisano 18 Styczeń 200916 l Prawdopodobnie musisz zainkludowac plik naglowkowy z daklaracja tej funkcji (glm.h).
Napisano 18 Styczeń 200916 l 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
Napisano 18 Styczeń 200916 l Zakladam ze masz je gdzies zadeklarowane. Jestes pewien ze width i height sa widoczne w miejscu wywolania funkcji?
Napisano 19 Styczeń 200916 l 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ść.
Napisano 21 Styczeń 200916 l 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ę
Napisano 21 Styczeń 200916 l 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.
Napisano 22 Styczeń 200916 l 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.
Napisano 8 Luty 200916 l 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ę!!
Napisano 8 Luty 200916 l Dodaj do kodu messageboxa w miejscach sprawdzania bledow albo zapodaj kawalek kodu odpowiedzialnego za zdarzenia.
Napisano 9 Luty 200916 l Jeśli pisałeś w Dev-C++ to czasami pomaga komenda na końcu programu: getchar();
Napisano 9 Luty 200916 l 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??
Napisano 9 Luty 200916 l Pewnie dlatego ze nie wlaczyles swiatla. Po jego wlaczeniu dodatkowo musisz przekazac normalne dla kazdego face`a. Edytowane 10 Luty 200916 l przez Ziper
Napisano 10 Luty 200916 l 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 ;)
Napisano 22 Luty 200916 l 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?
Napisano 24 Luty 200916 l Niestety dalej ci nie pomogę, może popytaj większych "wymiataczy" w programowaniu.
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto