Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Отсечение граней


dmk ©   (30.01.17 23:41

Кто-нибудь занимался отсечением граней?
Как, например, удалить грани у сферы?
http://hostingkartinok.com/show-image.php?id=983e742f831810dcd078308eff5e3677

Есть единый рецепт или надо свой придумывать?


Pavia ©   (31.01.17 05:59[1]

Какой у вас API?

Для отсечения вычисляем нормаль к треугольнику если она смотрит на нас то рисуем если от нас то не рисуем. Во всяких там OpenGL и DirecX за это отвечает один флаг один битик.

Рецепт не бывает один. Их много сейчас просто не вспомню других методов.

Что касается удалить грани это просто нарисовать одни рёбра edge. Они рисуются линиям, просто соединяя точки. Опять таки способ вывода переключается одним флагом. Есть конечно свои тонкости.


Pavia ©   (31.01.17 07:37[2]

Отсечение glCullFace .
https://www.khronos.org/opengl/wiki/Face_Culling

Удаление glPolygonMode с GL_LINE.
https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml


dmk ©   (31.01.17 12:28[3]

API свой. Обычная фронтальная проекция.
Нужен алгоритм или направление как это примерно делается.
OpenGL, DirectX не использую. API софтверный. Все вычисления для ЦП.

Отсечь нужно ребра, т.е. линии.


dmk ©   (31.01.17 12:29[4]

Надо как в варианте Б: http://www.100byte.ru/stdntswrks/gl/gl17.png


dmk ©   (31.01.17 13:03[5]

Тормоза получаются, а еще текстуры не наложил :(
http://hostingkartinok.com/show-image.php?id=58f191182f72667ece8fcc0d4fa3ca46


Pavia ©   (31.01.17 18:11[6]

Проверяем по часовой стрелки у нас рисуются рёбра или против. По часовой оставляем против отсекаем.
Перебираем или вернее обходим рёбра треугольника.
Берём первое ребро E1 и второе E2

Е1.dy>0 - ребро идёт в верх.

E1.dy>0 and E2.dy<0 то если E2.x2>E1.x1 то по часовой
E1.dy>0 and E2.dy<0 то если E2.x2<E1.x1 то против часовой
E1.dy>0 and E2.dy>0  то если E2.dx>E2.dy то по часовой
E1.dy>0 and E2.dy>0  то если E2.dx<E2.dy то против часовой

E1.dy<0 and E2.dy>0 то если E2.x2>E1.x1 то против часовой
E1.dy<0 and E2.dy>0 то если E2.x2<E1.x1 то по часовой
E1.dy<0 and E2.dy<0  то если E2.dx<-E2.dy то против часовой
E1.dy<0 and E2.dy<0  то если E2.dx>-E2.dy то по часовой

Или вот там и др алгоритмы отсечения:
http://algolist.manual.ru/graphics/3dfaq/articles/31.php

http://habrahabr.ru/post/248159/


dmk ©   (01.02.17 00:34[7]

Видимо к каждой вигуре индивидуальный подход нужен. Для сферы нормали можно отсечь, а для плоскостных фигур уже по другому.


Pavia ©   (01.02.17 05:49[8]


> Видимо к каждой вигуре индивидуальный подход нужен. Для
> сферы нормали можно отсечь, а для плоскостных фигур уже
> по другому.

Вы вообще статьи читали? Где там про сферу написано? Это универсальные алгоритмы. Хотите чисто для сферы делаете отсечение по z.


dmk ©   (01.02.17 12:08[9]

>Вы вообще статьи читали? Где там про сферу написано? Это универсальные алгоритмы.
Читал. Спасибо. Нужно нормаль высчитать для поверхности. Проблема в том, что у ребра 2 точки, а для вектора нужна третья, а она может быть только на соседней грани. Как просчитать нормаль для грани? 2 точки + соседняя (левая) треугольник - виден, а с правой уже не виден. Получается казус. На границе выкидывается грань, которая на самом деле видна и представляет собой видимую границу фигуры.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо