Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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 @
Есть небольшая задача построить параллелепипед с развертки как на фото...
piped.png (, : 1002)
Если это - развёртка, то хоть руками набросайте желаемый объект (прикрепите здесь картинку), а то непонятно, что сие за параллелепипед? :no-sad:

Автор: skinex 13.01.16, 17:06
Размерность указать?

Автор: skinex 13.01.16, 17:13
Вот как-то так, это проекция самой фигуры, вид сверху.
piped1.png (, : 959)

Автор: Славян 13.01.16, 17:25
Имелось ввиду, чтобы вы набросали 3D-изображение объекта (параллелепипеда?). А то у вас в тексте идёт то 'развёртка', то 'проекция'. :yes-sad:

Автор: skinex 13.01.16, 18:55
Вот так ведь выглядит обычный параллелепипед, а вот внутри него, должно быть то что подано выше, это выходит как такой домик, внутри параллелепипеда находятся те перегородки, с теми размерами.
parallelepiped_1.jpg (, : 995)

Автор: Славян 13.01.16, 19:13
Цитата skinex @
Вот как-то так, это проекция самой фигуры, вид сверху.
Как-то несогласованы размеры. :blush: 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
Цитата skinex @
А параметры lenX и lenZ, что именно задают?
Очевидно длину стен. (высоту, если вдоль 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?

Добавлено
Все равно не пойму как оно может быть привязано к граням, и как окончательно строятся эти перегородки.. :wall: :wall: :wall:

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)