OpenGL на C/C++ 29.07.2013 / 22:59 | | NaruTrey Пользователь Сейчас: Offline
Имя: Андрей K. Откуда: Тольятти Регистрация: 15.01.2010
| Никто не подскажет, как можно производительней отобразить параллелепипед на голом OpenGL?
__________________
Чёрные усы кричает этот свисть |
31.07.2013 / 13:50 | | NaruTrey Пользователь Сейчас: Offline
Имя: Андрей K. Откуда: Тольятти Регистрация: 15.01.2010
| У меня есть такой код, но явно его можно сократить. void drawParallelepiped(float x, float y, float z, float width, float height, float depth) {
float mw2 = -width / 2, mh2 = -height / 2, md2 = -depth / 2, w2 = width / 2, h2 = height / 2, d2 = depth / 2;
glPushMatrix();
glTranslatef(x, y, z);
// Лицевая грань
glBegin(GL_QUADS);
glNormal3f(0, 0, -1);
glVertex3f(mw2, mh2, md2);
glVertex3f(w2, mh2, md2);
glVertex3f(w2, h2, md2);
glVertex3f(mw2, h2, md2);
glEnd();
// Тыльная грань
glBegin(GL_QUADS);
glNormal3f(0, 0, 1);
glVertex3f(w2, h2, d2);
glVertex3f(mw2, h2, d2);
glVertex3f(mw2, mh2, d2);
glVertex3f(w2, mh2, d2);
glEnd();
// Левая грань
glBegin(GL_QUADS);
glNormal3f(-1, 0, 0);
glVertex3f(mw2, mh2, d2);
glVertex3f(mw2, mh2, md2);
glVertex3f(mw2, h2, md2);
glVertex3f(mw2, h2, d2);
glEnd();
// Правая грань
glBegin(GL_QUADS);
glNormal3f(1, 0, 0);
glVertex3f(w2, mh2, d2);
glVertex3f(w2, mh2, md2);
glVertex3f(w2, h2, md2);
glVertex3f(w2, h2, d2);
glEnd();
// Нижняя грань
glBegin(GL_QUADS);
glNormal3f(0, 1, 0);
glVertex3f(mw2, h2, md2);
glVertex3f(w2, h2, md2);
glVertex3f(w2, h2, d2);
glVertex3f(mw2, h2, d2);
glEnd();
// Верхняя грань
glBegin(GL_QUADS);
glNormal3f(0, -1, 0);
glVertex3f(mw2, mh2, md2);
glVertex3f(w2, mh2, md2);
glVertex3f(w2, mh2, d2);
glVertex3f(mw2, mh2, d2);
glEnd();
glPopMatrix();
}
__________________
Чёрные усы кричает этот свисть |
31.07.2013 / 18:53 | | NaruTrey Пользователь Сейчас: Offline
Имя: Андрей K. Откуда: Тольятти Регистрация: 15.01.2010
| Оказывается, лишние glBegin() и glEnd() можно убирать. Теперь лучше... void draw3DParallelepiped(float x, float y, float z, float width, float height, float depth) {
float mw2 = -width / 2, mh2 = -height / 2, md2 = -depth / 2, w2 = width / 2, h2 = height / 2, d2 = depth / 2;
glPushMatrix();
glTranslatef(x, y, z);
//Лицевая грань
glBegin(GL_QUADS);
glNormal3f(0, 0, -1);
glVertex3f(mw2, mh2, md2);
glVertex3f(w2, mh2, md2);
glVertex3f(w2, h2, md2);
glVertex3f(mw2, h2, md2);
//Тыльная грань
glNormal3f(0, 0, 1);
glVertex3f(w2, h2, d2);
glVertex3f(mw2, h2, d2);
glVertex3f(mw2, mh2, d2);
glVertex3f(w2, mh2, d2);
//Левая грань
glNormal3f(-1, 0, 0);
glVertex3f(mw2, mh2, d2);
glVertex3f(mw2, mh2, md2);
glVertex3f(mw2, h2, md2);
glVertex3f(mw2, h2, d2);
//Правая грань
glNormal3f(1, 0, 0);
glVertex3f(w2, mh2, d2);
glVertex3f(w2, mh2, md2);
glVertex3f(w2, h2, md2);
glVertex3f(w2, h2, d2);
//Нижняя грань
glNormal3f(0, 1, 0);
glVertex3f(mw2, h2, md2);
glVertex3f(w2, h2, md2);
glVertex3f(w2, h2, d2);
glVertex3f(mw2, h2, d2);
//Верхняя грань
glNormal3f(0, -1, 0);
glVertex3f(mw2, mh2, md2);
glVertex3f(w2, mh2, md2);
glVertex3f(w2, mh2, d2);
glVertex3f(mw2, mh2, d2);
glEnd();
glPopMatrix();
}
__________________
Чёрные усы кричает этот свисть |
31.07.2013 / 21:27 | | NaruTrey Пользователь Сейчас: Offline
Имя: Андрей K. Откуда: Тольятти Регистрация: 15.01.2010
| Оказывается, что для этой роли лучше подойдут шейдеры.
__________________
Чёрные усы кричает этот свисть |
28.09.2014 / 21:05 | | NeiroNext Пользователь Сейчас: Offline
Имя: Михаил Откуда: Херсон Регистрация: 16.01.2010
| Ни у кого нет шаблона из книги с первого поста, ссылка что у книге уже не действительна, и еще настолько удобно использовать OpenGL с С++ ?
|
Всего сообщений: 25 Фильтровать сообщения Поиск по теме Файлы топика (2)
|