| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > цилиндр - как лучше хранить и отрисовывать? |
| Автор: kosmonaFFFt 22.9.2008, 18:19 |
| Доброговсем времени суток. Надобно мне реализовать различные операции типа вращения, масштабирования и т. д. над 3D фигурами. С фигурами из прямых линий все просто - конверт в матрицу, умножить на матрицу преобразования и обратно в линию, и так со всеми линиями в цикле. Но по заданию надо чтобы в фигуре была криволинейная поверхность (мну надо цилиндр). В связи с этим возникают вопросы - в каком виде его лучше всего хранить и можно ли его как нибудь преобразовать в массив линий (с определенной долей потери качесва, например эллипс основания заменить на 10 - 15тиугольник), чтобы можно было применить уже готовые для линий методы преобразования. Порылся в гугле на тему уравнения эллиптического цилиндра, но картинка с формулой упорно не отображалась, + не знаю как его можно ограничить по длине (насколько я помню из математики, он бесконечный в длину). Заранее спасибо. |
| Автор: dereyly 22.9.2008, 21:54 | ||||
Ну линия вообщем говоря тоже бесконечна
А что тебе мешает так сделать? Цилиндров не существует (так же как и тортов, но торт сложная фигура и ее рассматривать не будем)... есть его только аппроксимации... Для единообразия можно триангулировать основание и стороны... PS С этим вопросом лучше в соседнюю тему по графике |
| Автор: Rickert 23.9.2008, 01:46 |
| kosmonaFFFt 0) Аналитически, цилиндр построить проще пареной репы: берём уравнение окружности: x = cos(a), y = sin(a). Теперь производим его несколько раз, увеличивая, уменьшая z координату - получаем набор точек, который и будет цилиндром. Я так понял что проблема в его получении у вас есть. 1) Как ханить? Да просто набор точек, плевать на линии. 2) Как поворачивать/перемещать? Через матрицу преобразований 4x4, путём умножения её на вершину. См. разработку игр, тему "Скелетная анимация", можете на gamedev.ru |
| Автор: kosmonaFFFt 23.9.2008, 05:52 |
Спасибо, попробую. Хотя линии все равно нужн; ну да если точки есть, то и линии думаю проведу. |