Показать сообщение отдельно
Старый 27.06.2008, 13:15   #1
zheland
Разработчик
 
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений
(для 95 пользователей)
Счастье OpenGl—Оптимизация для скорости и качества

OpenGl—Оптимизация для скорости и качества
Вот много вариантов рисования кубов,
Какой из них тратит меньше памяти, какой быстрее, какой когда применять?
(Если есть ещё варианты, тоже скажите чем отличаются.)
(Тут приведён простейший вариант, но хотелось-бы услышать какой вариант будет лучше в более крупных проектах.)
1(Рисование готовыми glut объектами):
//В главном цикле
glutSolidCube(10);
2(Самое обычное рисование):
//В главном цикле
glBegin(GL_QUADS);
   glVertex3b(0,0,0);
   glVertex3b(10,0,0);
   glVertex3b(10,10,0);
   glVertex3b(0,10,0);

   glVertex3b(0,0,10);
   glVertex3b(10,0,10);
   glVertex3b(10,10,10);
   glVertex3b(0,10,10);

   glVertex3b(0,0,0);
   glVertex3b(10,0,0);
   glVertex3b(10,0,10);
   glVertex3b(0,0,10);

   glVertex3b(0,10,0);
   glVertex3b(10,10,0);
   glVertex3b(10,10,10);
   glVertex3b(0,10,10);

   glVertex3b(0,0,0);
   glVertex3b(0,10,0);
   glVertex3b(0,10,10);
   glVertex3b(0,0,10);

   glVertex3b(10,0,0);
   glVertex3b(10,10,0);
   glVertex3b(10,10,10);
   glVertex3b(10,0,10);
glEnd();
3(Таблицы отображений):
//Перед главным циклом
glNewList(cube_list, GL_COMPLITE);
   glBegin(GL_QUADS);
   glVertex3b(0,0,0);
   glVertex3b(10,0,0);
   glVertex3b(10,10,0);
   glVertex3b(0,10,0);
   ...
   glEnd();
glEndList();
//В главном цикле
CallList(cube_list);
4(Массивы GLTVector):
//Перед главным циклом
GLTVector3 cube_list[24];
   cube_list[0][0]=(GLubyte)0;
   cube_list[0][1]=(GLubyte)0;
   cube_list[0][2]=(GLubyte)0;

   cube_list[0][0]=(GLubyte)10;
   cube_list[0][1]=(GLubyte)0;
   cube_list[0][2]=(GLubyte)0;
   ...
//В главном цикле
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_UNSIGNED_BYTE,0,cube_list);
glDrawArrays(GL_QUADS,0,24);
5(Индексированные массивы):
//Перед главным циклом
GLubyte cube_list_pnt[]={0,10,10,   10,10,10,   10,0,10,      0,0,10   0,10,0,   10,10,0,   10,0,0   0,0,0};
GLubyte cube_list_ind[]={0,1,2,3,   4,5,1,0,   3,2,6,7,   5,4,7,6,   1,5,6,2,   4,0,3,7};
//В главном цикле
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_UNSIGNED_BYTE,0,cube_list_pnt);
glDrawElements(GL_QUADS, 24,GL_UNSIGNED_BYTE,cube_list_ind);
p.s.:Возможно есть ошибки: исправьте.
(Offline)
 
Ответить с цитированием