Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Программирование графики > Параллелепипед |
Автор: skinex 13.01.16, 15:13 |
Есть небольшая задача построить параллелепипед с развертки как на фото, хоть в GLU и нет готовых лыж для построения параллелепипеда, строю его так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> void piped(GLfloat a, GLfloat b, GLfloat c) { glShadeModel(GL_FLAT); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glBegin(GL_QUAD_STRIP); glVertex3f(-a/2,-b/2,-c/2); glVertex3f(-a/2,-b/2, c/2); glVertex3f(-a/2, b/2,-c/2); glVertex3f(-a/2, b/2, c/2); glVertex3f( a/2, b/2,-c/2); glVertex3f( a/2, b/2, c/2); glVertex3f( a/2,-b/2,-c/2); glVertex3f( a/2,-b/2, c/2); glVertex3f(-a/2,-b/2,-c/2); glVertex3f(-a/2,-b/2, c/2); glEnd(); glBegin(GL_QUADS); glVertex3f(-a/2,-b/2, c/2); glVertex3f(-a/2, b/2, c/2); glVertex3f( a/2, b/2, c/2); glVertex3f( a/2,-b/2, c/2); glVertex3f(-a/2,-b/2,-c/2); glVertex3f(-a/2, b/2,-c/2); glVertex3f( a/2, b/2,-c/2); glVertex3f( a/2,-b/2,-c/2); glEnd(); } Но не пойму как построить внутренность, как ее нужно строить? piped.png (, : 1002) |
Автор: Славян 13.01.16, 15:53 |
Если это - развёртка, то хоть руками набросайте желаемый объект (прикрепите здесь картинку), а то непонятно, что сие за параллелепипед? |
Автор: skinex 13.01.16, 17:06 |
Размерность указать? |
Автор: skinex 13.01.16, 17:13 |
Вот как-то так, это проекция самой фигуры, вид сверху. piped1.png (, : 959) |
Автор: Славян 13.01.16, 17:25 |
Имелось ввиду, чтобы вы набросали 3D-изображение объекта (параллелепипеда?). А то у вас в тексте идёт то 'развёртка', то 'проекция'. |
Автор: skinex 13.01.16, 18:55 |
Вот так ведь выглядит обычный параллелепипед, а вот внутри него, должно быть то что подано выше, это выходит как такой домик, внутри параллелепипеда находятся те перегородки, с теми размерами. parallelepiped_1.jpg (, : 995) |
Автор: Славян 13.01.16, 19:13 |
Как-то несогласованы размеры. 6 как 10, а 10,5 вообще меньше 6 выглядит. Может это и не суть, но всё же несложно ж было б натуральнее нарисовать?.. Впрочем, в итоге параллелепипед - это как план квартиры, а перегородки на схеме с размерами - как стены комнат или как? |
Автор: skinex 13.01.16, 19:19 |
Да как стены комнат, рисовал я очень на глаз, а размеры можно и входными данными сделать. |
Автор: Славян 13.01.16, 19:32 |
Ну тогда просто набросали бы три функции (на основе вами уже написанного glBegin(GL_QUADS); ), кои рисовали бы прямоугольники в плоскостях XY, YZ , ZX со входными значениями (x0,y0,z0) да размерами стены. А там бы и получилось быстро их вызвать 3 раза (у вас 3 стены) и всё. Ещё параметром можно цвет задать, красоты ради. Типа такого: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> void PaintWallZX( float x0,float y0,float z0, float lenZ,float lenX) { glBegin(GL_QUADS); glVertex3f( x0, y0, z0); ... glVertex3f( x0, y0, z0+lenZ); glEnd(); } |
Автор: skinex 13.01.16, 19:39 |
А параметры lenX и lenZ, что именно задают? |
Автор: Славян 13.01.16, 19:47 |
Очевидно длину стен. (высоту, если вдоль Z). |
Автор: skinex 13.01.16, 19:59 |
Как я понял полный код выглядит так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> void PaintWallZX( float x0,float y0,float z0, float lenZ,float lenX) { glBegin(GL_QUADS); glVertex3f( x0, y0, z0); glVertex3f( x0+lenX, y0, z0); glVertex3f( x0, y0, z0+lenZ); glEnd(); } Это выходит лишь в плоскоcти XZ, и аналогичное проделать с XY и YZ? Добавлено Все равно не пойму как оно может быть привязано к граням, и как окончательно строятся эти перегородки.. |