Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Додекаэдр с непрозрачными гранями |
Автор: Ramzai 14.4.2005, 16:21 |
Построил додекаэдр, у к-рого 20 точек (x, y, z) - перемещается в пр-ве параллельным переносом и поворотом вокруг осей. Вопрос, как в каждый момент времени определить, какие ребра не рисовать. ИМХО что-то сложное вроде z-буфера здесь не надо, а есть что-то простое для частного случая. Заранее спасибо |
Автор: Void 14.4.2005, 18:36 |
Додекаэдр рисуется проволочной моделью (только ребра) ? Тогда это можно сделать так: вычисляются нормали ко всем граням додекаэдра, затем определяется угол м/у нормалью каждой грани и лучом зрения наблюдателя. Если угол острый (т.е. скалярное произведение положительно), то соответствующая грань видима, если тупой (отрицательно) - то невидима. Дальше все просто - видимы те ребра, у которых хотя бы одна образующая их грань видима. |
Автор: Ramzai 14.4.2005, 19:11 | ||
Да, проволочная модель. Каждая из 20 вершин - запись (x, y, z) + 3 указателя на индексы соседних вершин. Про параллельный перенос я погорячился, только поворот вокруг осей по формулам (для оси X):
Вывод на экран - просто X, Y (в соотв. область). Чем мне не нравится предложенное: вычисление нормали должно учитывать направление нормали, так? По трем точкам - помимо чисто математических формул нужны еще какие-то дополнительные управляющие конструкции, определяющие направление нормали. Луч зрения наблюдателя - вообще как-то себе слабо представляю (в моем случае по оси Z что-ли?) В общем, нельзя как-нибудь использовать то, что центр додекаэдра - (0, 0, 0) и z-координаты вершин? Заранее спасибо. |
Автор: DENNN 15.4.2005, 13:06 | ||||
Несовсем. Порядок обхода вершин на всех гранях должен быть одинаквым. Т.е., к примеру, для каждой грани все вершины перечислятся по порядку против часов стрелки. ТОгда "ориентированную" нормаль к грани можно получить просто выполнив векторное произведение двух сосдених ребер.
Если хочется изврата, то конечно. ![]() |
Автор: maxim1000 15.4.2005, 19:10 | ||
можно и очень просто берем просто среднее арифметическое всех вершин выбранной грани - получаем вектор я точно не помню додекаэдра, вполне возможно, что это и будет нормаль но в любом случае этот вектор будет идти наружу фигуры, а значит, нормаль можно выбрать такую, чтобы угол между ней и этим вектором был острый... |