Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Удаление невидимых граней с 3d объекта |
Автор: taurs 2.1.2008, 10:47 |
Доброго времени суток! Народ, у кого-нибудь есть мысли по этому вопросу?! |
Автор: Rickert 2.1.2008, 17:55 |
Что подразумевается под "гранями"? Полигоны или линии - ребра полигона? |
Автор: taurs 5.1.2008, 10:11 | ||
2 Rickert, Грани - это ребра полигонов. Есть варианты? |
Автор: Rickert 5.1.2008, 12:01 |
Объясни толком - зачем? Оптимизации добиваешь путём удаления граней? Почему не полигонов? |
Автор: taurs 5.1.2008, 16:20 | ||
Такая была поставлена задача: Удаление невидимых граней у 3d объекта. |
Автор: Rickert 6.1.2008, 08:49 |
Именно удаление? Или "отрисовка только видимых граней"? |
Автор: taurs 6.1.2008, 10:12 | ||
я думаю можно и так. |
Автор: Rickert 6.1.2008, 23:03 |
Какие - то конкретные требования прдъявлены? например работа только с определёнными примитвами или работа через определённый алгоритм? |
Автор: taurs 7.1.2008, 07:21 | ||
2 Rickert, в том то и проблема что нужно именно алгоритмом Робертса..к сожалению я его реализовать пока не могу..слишком мало знаний и навыков.. а насчет примитивов, я думаю, можно взять любой для начала. Спасибо за поддрежку. |
Автор: Rickert 9.1.2008, 13:09 |
С каким именно моментом ты разобраться не можешь? |
Автор: sgi1981 10.1.2008, 00:21 |
В общем эта задача распространенная. И решается так. 1. Задать OpenGL - какая сторона многоугольника считается передней (противоположная сторона будет задней) с помощью функции void glFrontFace(GLenum mode) mode может принимать значения либо GL_CW (передней стороной будет та сторона, для которой обход вершин делается по часовой стрелке), либо GL_CCW (наоборот - против часовой). 2. Включить исключение из рисования сторон с помощью функции glEnable(GL_CULL_FACE), либо отключить это glDisable(GL_CULL_FACE). 3. Задать то, какую сторону (переднюю или заднюю) необходимо исключать из рисования при включенном режиме исключения сторон с помощью функции void glCullFace(GLenum mode) mode может принимать значения либо GL_FRONT либо GL_BACK. |
Автор: Rickert 10.1.2008, 06:06 |
sgi1981, ты говоришь про сами поверхности полигонов, а ему нужна работа с гранями! |
Автор: Solitario 17.1.2008, 18:24 |
Если я не ошибаюсь, метод Робертаса предназначен для работы с выпуклыми многогранниками...насколько я помню вопрос заключается в определении нормали к грани, затем если нормаль составляет острый угол с вектором направления на зрителя, то грань видима если, то нет). Для определения угла используется сколярное произведение: т.е. если (l,n)<0, то грань является нелицевой(угол тупой)....кажется примерно вот так.. |
Автор: atavinta 31.1.2008, 08:06 |
Такой алгоритм на самом деле определяет видимую сторону грани. Если все грани не прозрачны и нет отверстий, то из этого мы делаем лог8ический вывод о том, что внутренняя сторона грани не может быть видима, следовательно если алгоритм говорит, что видима внутренняя, то грань не видима. Но возможности алгоритма шире. В сочетании с быфером глубины он позволяет менять текстуру граней, видимых через окна, если надо внутреннюю и внешнюю поверхности тела окрасить различно. |