Eksport z Blendera do OpenGL

0

Witam potrzebuje przeniesc dno "jaskini podwodnej" do opengl jak najprostszym sposobem skorzystałem z plugina który eksportuje z Blendera do pliku .h
Oto kod pliku dno.h(nie wszystko zeby nie zasmiecac):

#define VERTEX_COUNT_DL 22500
#define FACES_COUNT_DL 44402
#ifndef VERTEX_STRUCT
#define VERTEX_STRUCT
struct vertex_struct{
	float x, y, z;
	float nx,ny,nz;
	float u,v;
};
#endif
struct vertex_struct vertexs_dl[]=
{
{-3.700670, -3.580773, 0.306235, 0.000366, -0.012055, 0.999908, 0.0, 0.0},
{-3.665402, -3.586005, 0.306158, 0.000366, -0.012055, 0.999908, 0.0, 0.0},
{-3.665950, -3.546953, 0.306630, 0.000366, -0.012055, 0.999908, 0.0, 0.0},
{-3.704976, -3.545383, 0.306664, 0.000366, -0.012055, 0.999908, 0.0, 0.0},
...
#define INX_TYPE GL_UNSIGNED_INT
unsigned int indexes_dl[]={0, 1, 2,0, 2, 3,3, 2, 4,3, 4, 5,
5, 4, 6,5, 6, 7,7, 6, 8,7, 8, 9,
9, 8, 10,9, 10, 11,11, 10, 12,11, 12, 13,
13, 12, 14,13, 14, 15,15, 14, 16,15, 16, 17,

...
 

Z ukladu indeksow dla powierzchni wynika ze nalezy uzyc TRIANGLES wiec tak tez robie w moim kodzie:

glBegin(GL_TRIANGLES);
	for(f =0 ; f<FACES_COUNT_DL; f++ ) 
	{
    
       
        glNormal3f( vertexs_dl[indexes_dl[f]].nx,vertexs_dl[indexes_dl[f]].ny, vertexs_dl[indexes_dl[f]].nz );       
       glVertex3f( vertexs_dl[indexes_dl[f]].x,vertexs_dl[indexes_dl[f]].y, vertexs_dl[indexes_dl[f]].z );
      
	}
  glEnd( );

Wczesniej rysowalem same wierzcholki i za pomoca line_strip rysowalo cala powierzchnie co prawda byla ona w duzym stopniu znieksztalcona ale rysowalo calosc a teraz idealnie odwzorowuje ale tylko kawalek powierzchni.

0

Jeden face to 3 indeksy, zakładając, ze model składa się z samych trójkątów. Wydaje mi się, że na każdy face powinieneś pobierać 3 vertexy (obecnie bierzesz na jeden face 1 vertex) i indeks powinieneś zwiększać o 3. Teraz pewnie rysujesz 1/3 modelu bo nie przechodzisz przez całą tablicę... hmmm najszybsza modyfikacja jaka przychodzi mi do głowy to tylko przemnożenie warunku końca pętli przez 3 minus ewentualny wyjazd poza tablicę (jakby coś nie działało). Czyli f<FACES_COUNT_DL zamień na f<FACES_COUNT_DL*3

Jak zaczniesz używać tekstur to jeszcze przed glVertex wywołaj glTexCoord2f i przed glBegin(GL_TRIANGLES); glBindTexture ;)

0

Należy Ci sie duży browar pomnożenie przez 3 załatwiło sprawę:)
Dzięki też za info z teksturami:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1