Вниз  OpenGL на C/C++
- 29.07.2013 / 22:59
NaruTrey
  Пользователь

NaruTrey 
Сейчас: Offline
Никто не подскажет, как можно производительней отобразить параллелепипед на голом OpenGL?
__________________
 Чёрные усы кричает этот свисть
- 31.07.2013 / 13:50
NaruTrey
  Пользователь

NaruTrey 
Сейчас: Offline
У меня есть такой код, но явно его можно сократить.
  1. void drawParallelepiped(float x, float y, float z, float width, float height, float depth) {
  2.     float mw2 = -width / 2, mh2 = -height / 2, md2 = -depth / 2, w2 = width / 2, h2 = height / 2, d2 = depth / 2;
  3.     glPushMatrix();
  4.     glTranslatef(x, y, z);
  5.     // Лицевая грань
  6.     glBegin(GL_QUADS);
  7.     glNormal3f(0, 0, -1);
  8.     glVertex3f(mw2, mh2, md2);
  9.     glVertex3f(w2, mh2, md2);
  10.     glVertex3f(w2, h2, md2);
  11.     glVertex3f(mw2, h2, md2);
  12.     glEnd();
  13.     // Тыльная грань
  14.     glBegin(GL_QUADS);
  15.     glNormal3f(0, 0, 1);
  16.     glVertex3f(w2, h2, d2);
  17.     glVertex3f(mw2, h2, d2);
  18.     glVertex3f(mw2, mh2, d2);
  19.     glVertex3f(w2, mh2, d2);
  20.     glEnd();
  21.     // Левая грань
  22.     glBegin(GL_QUADS);
  23.     glNormal3f(-1, 0, 0);
  24.     glVertex3f(mw2, mh2, d2);
  25.     glVertex3f(mw2, mh2, md2);
  26.     glVertex3f(mw2, h2, md2);
  27.     glVertex3f(mw2, h2, d2);
  28.     glEnd();
  29.     // Правая грань
  30.     glBegin(GL_QUADS);
  31.     glNormal3f(1, 0, 0);
  32.     glVertex3f(w2, mh2, d2);
  33.     glVertex3f(w2, mh2, md2);
  34.     glVertex3f(w2, h2, md2);
  35.     glVertex3f(w2, h2, d2);
  36.     glEnd();
  37.     // Нижняя грань
  38.     glBegin(GL_QUADS);
  39.     glNormal3f(0, 1, 0);
  40.     glVertex3f(mw2, h2, md2);
  41.     glVertex3f(w2, h2, md2);
  42.     glVertex3f(w2, h2, d2);
  43.     glVertex3f(mw2, h2, d2);
  44.     glEnd();
  45.     // Верхняя грань
  46.     glBegin(GL_QUADS);
  47.     glNormal3f(0, -1, 0);
  48.     glVertex3f(mw2, mh2, md2);
  49.     glVertex3f(w2, mh2, md2);
  50.     glVertex3f(w2, mh2, d2);
  51.     glVertex3f(mw2, mh2, d2);
  52.     glEnd();
  53.     glPopMatrix();
  54. }

__________________
 Чёрные усы кричает этот свисть
- 31.07.2013 / 18:53
NaruTrey
  Пользователь

NaruTrey 
Сейчас: Offline
Оказывается, лишние glBegin() и glEnd() можно убирать. Теперь лучше...
  1. void draw3DParallelepiped(float x, float y, float z, float width, float height, float depth) {
  2.     float mw2 = -width / 2, mh2 = -height / 2, md2 = -depth / 2, w2 = width / 2, h2 = height / 2, d2 = depth / 2;
  3.     glPushMatrix();
  4.     glTranslatef(x, y, z);
  5.     //Лицевая грань
  6.     glBegin(GL_QUADS);
  7.     glNormal3f(0, 0, -1);
  8.     glVertex3f(mw2, mh2, md2);
  9.     glVertex3f(w2, mh2, md2);
  10.     glVertex3f(w2, h2, md2);
  11.     glVertex3f(mw2, h2, md2);
  12.     //Тыльная грань
  13.     glNormal3f(0, 0, 1);
  14.     glVertex3f(w2, h2, d2);
  15.     glVertex3f(mw2, h2, d2);
  16.     glVertex3f(mw2, mh2, d2);
  17.     glVertex3f(w2, mh2, d2);
  18.     //Левая грань
  19.     glNormal3f(-1, 0, 0);
  20.     glVertex3f(mw2, mh2, d2);
  21.     glVertex3f(mw2, mh2, md2);
  22.     glVertex3f(mw2, h2, md2);
  23.     glVertex3f(mw2, h2, d2);
  24.     //Правая грань
  25.     glNormal3f(1, 0, 0);
  26.     glVertex3f(w2, mh2, d2);
  27.     glVertex3f(w2, mh2, md2);
  28.     glVertex3f(w2, h2, md2);
  29.     glVertex3f(w2, h2, d2);
  30.     //Нижняя грань
  31.     glNormal3f(0, 1, 0);
  32.     glVertex3f(mw2, h2, md2);
  33.     glVertex3f(w2, h2, md2);
  34.     glVertex3f(w2, h2, d2);
  35.     glVertex3f(mw2, h2, d2);
  36.     //Верхняя грань
  37.     glNormal3f(0, -1, 0);
  38.     glVertex3f(mw2, mh2, md2);
  39.     glVertex3f(w2, mh2, md2);
  40.     glVertex3f(w2, mh2, d2);
  41.     glVertex3f(mw2, mh2, d2);
  42.     glEnd();
  43.     glPopMatrix();
  44. }

__________________
 Чёрные усы кричает этот свисть
- 31.07.2013 / 21:27
NaruTrey
  Пользователь

NaruTrey 
Сейчас: Offline
Оказывается, что для этой роли лучше подойдут шейдеры.
__________________
 Чёрные усы кричает этот свисть
- 28.09.2014 / 21:05
NeiroNext
  Пользователь

NeiroNext 
Сейчас: Offline
Ни у кого нет шаблона из книги с первого поста, ссылка что у книге уже не действительна, и еще настолько удобно использовать OpenGL с С++ ?
Наверх  Всего сообщений: 25
Фильтровать сообщения
Поиск по теме
Файлы топика (2)