Здравствуйте.
Вот такой вопрос возник.
В общем, мне нужно получить координаты точек прямоугольного параллелепипеда и нарисовать его по этим координатам. Параллелепипед задаётся своими размерами и количеством сегментов, на которые он делится по каждой оси.
Это всё я делаю в OpenGl.
Координаты точек я, конечно, получил, самая сложность в том, чтобы нарисовать его теперь по этим точкам. Наверняка для этого есть какие-то стандартные алгоритмы, но я их не нашёл ):.
А может, можно вообще как-то создать такой примитив и просто получить доступ к его координатам? Этого я тоже не нашёл.
Ну так вот, где поискать? Или алгоритм подскажите какой-нибудь...
Заранее всем спасибо.
Здравствуйте, BioComp, Вы писали:
BC>Здравствуйте.
BC>Вот такой вопрос возник.
BC>В общем, мне нужно получить координаты точек прямоугольного параллелепипеда и нарисовать его по этим координатам. Параллелепипед задаётся своими размерами и количеством сегментов, на которые он делится по каждой оси.
BC>Это всё я делаю в OpenGl.
Не ясно зачем делить его на сегменты, это же все-таки 6-прямоугольников. Или есть какой-то смысл?
BC>Координаты точек я, конечно, получил, самая сложность в том, чтобы нарисовать его теперь по этим точкам. Наверняка для этого есть какие-то стандартные алгоритмы, но я их не нашёл ):.
Используй GL_QUADS для отрисовки всех граней:
glBegin(GL_QUADS);
glVertex3f(x1, y1, z1);
glVertex3f(x2, y2, z2);
glVertex3f(x3, y3, z3);
glVertex3f(x4, y4, z4);
glEnd();
где { x
i, y
i, z
i } координаты четырех вершин грани.
BC>А может, можно вообще как-то создать такой примитив и просто получить доступ к его координатам? Этого я тоже не нашёл.
Если используешь GLU — глянь функцию gluNewQuadric.
BC>Ну так вот, где поискать? Или алгоритм подскажите какой-нибудь...
BC>Заранее всем спасибо.... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Здравствуйте, Arsenicum, Вы писали:
A>Не ясно зачем делить его на сегменты, это же все-таки 6-прямоугольников. Или есть какой-то смысл?
На сколько я знаю, смысл есть. Просто если разбить прямоугольник каждой стороны на несколько прямоугольников, это будет реалистичнее выглядеть в плане освещения.
Хотя, я могу ошибаться.
И вот если каждая сторона — не просто прямоугольник, а несколько, то высчитать точки и прорисовать все грани становится трудно.
A>Используй GL_QUADS для отрисовки всех граней
A>glBegin(GL_QUADS);
A> glVertex3f(x1, y1, z1);
A> glVertex3f(x2, y2, z2);
A> glVertex3f(x3, y3, z3);
A> glVertex3f(x4, y4, z4);
A>glEnd();
Это понятно. Я вообще рисую через glDrawElements().
A>Если используешь GLU — глянь функцию gluNewQuadric.
Я не знаю, как потом достать координаты точек этого объекта. А мне это надо.
В таком случае я бы предложил все делать своими руками (не надеясь на GLU). Например, организовать свою иерархию классов в которой и на объект Parallelepiped найдется свой метод Draw и конструктор с параметрами n — число делений по горизонтали, m — по вертикали. Если проект большой то в последствии от грамотного дизайна будут только плюсы.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Здравствуйте, BioComp, Вы писали:
A>>Не ясно зачем делить его на сегменты, это же все-таки 6-прямоугольников. Или есть какой-то смысл?
BC>На сколько я знаю, смысл есть. Просто если разбить прямоугольник каждой стороны на несколько прямоугольников, это будет реалистичнее выглядеть в плане освещения.
BC>Хотя, я могу ошибаться.
не-а.
не ошибаетесь 
(смотреть пункт 2 —
Poor Tessellation Hurts Lighting)