Skocz do zawarto艣ci

Featured Replies

Napisano

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.

  • Odpowiedzi 20
  • Wy艣wietle艅 9,7k
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

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

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

Prawdopodobnie musisz zainkludowac plik naglowkowy z daklaracja tej funkcji (glm.h).

Napisano

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

Zakladam ze masz je gdzies zadeklarowane. Jestes pewien ze width i height sa widoczne w miejscu wywolania funkcji?

Napisano

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

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

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

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

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

Dodaj do kodu messageboxa w miejscach sprawdzania bledow albo zapodaj kawalek kodu odpowiedzialnego za zdarzenia.

Napisano

Je艣li pisa艂e艣 w Dev-C++ to czasami pomaga komenda na ko艅cu programu:

getchar();

Napisano

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

Pewnie dlatego ze nie wlaczyles swiatla. Po jego wlaczeniu dodatkowo musisz przekazac normalne dla kazdego face`a.

Edytowane przez Ziper

Napisano

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

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

Niestety dalej ci nie pomog臋, mo偶e popytaj wi臋kszych "wymiataczy" w programowaniu.

Je艣li chcesz doda膰 odpowied藕, zaloguj si臋 lub zarejestruj nowe konto

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj wi臋cej Polityka prywatno艣ci