Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.27.232] |
|
Сообщ.
#1
,
|
|
|
Есть небольшая задача построить параллелепипед с развертки как на фото, хоть в GLU и нет готовых лыж для построения параллелепипеда, строю его так:
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(); } Но не пойму как построить внутренность, как ее нужно строить? Прикреплённая картинка
|
Сообщ.
#2
,
|
|
|
Сообщ.
#3
,
|
|
|
Размерность указать?
|
Сообщ.
#4
,
|
|
|
Сообщ.
#5
,
|
|
|
Имелось ввиду, чтобы вы набросали 3D-изображение объекта (параллелепипеда?). А то у вас в тексте идёт то 'развёртка', то 'проекция'.
|
Сообщ.
#6
,
|
|
|
Сообщ.
#7
,
|
|
|
Цитата skinex @ Как-то несогласованы размеры. 6 как 10, а 10,5 вообще меньше 6 выглядит. Может это и не суть, но всё же несложно ж было б натуральнее нарисовать?..Вот как-то так, это проекция самой фигуры, вид сверху. Впрочем, в итоге параллелепипед - это как план квартиры, а перегородки на схеме с размерами - как стены комнат или как? |
Сообщ.
#8
,
|
|
|
Да как стены комнат, рисовал я очень на глаз, а размеры можно и входными данными сделать.
|
Сообщ.
#9
,
|
|
|
Ну тогда просто набросали бы три функции (на основе вами уже написанного glBegin(GL_QUADS); ), кои рисовали бы прямоугольники в плоскостях XY, YZ , ZX со входными значениями (x0,y0,z0) да размерами стены. А там бы и получилось быстро их вызвать 3 раза (у вас 3 стены) и всё. Ещё параметром можно цвет задать, красоты ради.
Типа такого: 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(); } |
Сообщ.
#10
,
|
|
|
А параметры lenX и lenZ, что именно задают?
|
Сообщ.
#11
,
|
|
|
Цитата skinex @ Очевидно длину стен. (высоту, если вдоль Z). А параметры lenX и lenZ, что именно задают? |
Сообщ.
#12
,
|
|
|
Как я понял полный код выглядит так:
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? Добавлено Все равно не пойму как оно может быть привязано к граням, и как окончательно строятся эти перегородки.. |