Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Удаление невидимых граней с 3d объекта


Автор: taurs 2.1.2008, 10:47
Доброго времени суток!

Народ, у кого-нибудь есть мысли по этому вопросу?!

Автор: Rickert 2.1.2008, 17:55
Что подразумевается под "гранями"? Полигоны или линии - ребра полигона?

Автор: taurs 5.1.2008, 10:11
Цитата(Rickert @ 2.1.2008,  17:55)
Что подразумевается под "гранями"? Полигоны или линии - ребра полигона?

2 Rickert,
Грани - это ребра полигонов.
Есть варианты?

Автор: Rickert 5.1.2008, 12:01
Объясни толком - зачем? Оптимизации добиваешь путём удаления граней? Почему не полигонов?

Автор: taurs 5.1.2008, 16:20
Цитата(Rickert @ 5.1.2008,  12:01)
Объясни толком - зачем? Оптимизации добиваешь путём удаления граней? Почему не полигонов?

Такая была поставлена задача: Удаление невидимых граней у 3d объекта.

Автор: Rickert 6.1.2008, 08:49
Именно удаление? Или "отрисовка только видимых граней"?

Автор: taurs 6.1.2008, 10:12
Цитата(Rickert @ 6.1.2008,  08:49)
"отрисовка только видимых граней"


я думаю можно и так.

Автор: Rickert 6.1.2008, 23:03
Какие - то конкретные требования прдъявлены? например работа только с определёнными примитвами или работа через определённый алгоритм?

Автор: taurs 7.1.2008, 07:21
Цитата(Rickert @ 6.1.2008,  23:03)
Какие - то конкретные требования прдъявлены? например работа только с определёнными примитвами или работа через определённый алгоритм?

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ический вывод о том, что внутренняя сторона грани не может быть видима, следовательно если алгоритм говорит, что видима внутренняя, то грань не видима. Но возможности алгоритма шире. В сочетании с быфером глубины он позволяет менять текстуру граней, видимых через окна, если надо внутреннюю и внешнюю поверхности тела окрасить различно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)