Witam,
Napisalem klase, ktora wczytuje dane z pliku.
W pliku tym mam informacje dot. położenia wierzcholkow modelu, polaczenia wierzcholkow, ktore tworza dany trojkat, oraz dane do normali.
Wykorzystalem w tym celu dwuwymiarowe tablice dynamiczne o wielkosci [iloscWierzcholkow][3], podobnie jest z innymi.
Model wczytuje mi sie idealnie, wszystko dziala.
Jednak kiedy proboje obracac model pod danym katem lub tez dokonywac innych transformacji nie jest juz tak fajnie.
Obraca sie bardzo powoli, nawet w przypadku prostych modeli typu opona, czajnik, stozek itp. Maja one tylko kilkadziesiąt wierzcholków.
Plynnie dziala jedynie przy prostopadloscianach.
Nie wiem w czym leży problem.
Kiedy wgram sobie model o bardzo rozbudowanej siatce, to wszelkie transormacje to już tragedia. Wszystko jest bardzo wolno.
Im mniejsza siatka modelu, tym wzrost szybkosci.
W jaki sposób mogę to zoptymalizowac?
void genereateScene(void)
{
int ilosc;
int ilosc2;
float **zmienna;
int **zmienna2;
float **zmienna3;
ModelASE map1;
map1.LoadFile();
ilosc = map1.GetVertexNumbers();
zmienna = map1.GetVertex(ilosc);
ilosc2=map1.GetMeshNumFaces();
zmienna2 = map1.GetFaces(ilosc2);
zmienna3 = map1.GetFacesNormals(ilosc2);
map1.SetModel(ilosc2);
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
GLfloat lightColor[] = {0.7f, 0.7f, 0.7f, 1.0f};
GLfloat lightPos[] = {-2 * 2, 2, 4 * 2, 1.0f};
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
glPushMatrix();
glTranslatef(0.0f, 0.0f, poz);
glRotatef(_angle, 0.0f, 1.0f, 0.0f);
glBegin(GL_TRIANGLES);
for(int i = 0; i<ilosc2; i++)
{
glNormal3f(zmienna3[i][0], zmienna3[i][1], zmienna3[i][2]);
glColor3f(0.0f, 0.0f, 1.0f);
for(int j = 0; j<3; j++)
{
glVertex3f(map1.Triangles.Face[i].Vertex[j].x, map1.Triangles.Face[i].Vertex[j].y, map1.Triangles.Face[i].Vertex[j].z);
}
}
glEnd();
glPopMatrix();
glutSwapBuffers();
}
Dziekuje, pozdrawiam