Я пытаюсь отобразить объект в openGL (3.3) в стиле wire-frame, но только его острые края (т. Е. Если смежные граничные нормали имеют определенный угол дельта) и его контур/силуэт/граница. Моя структура данных представляет собой треугольную сетку с сохраненными треугольниками и ее вершинами. Я изучил "Hardware Determined Edge Features" by Morgan McGuire and John F. Hughes и "Hardware Generated Object Silhouettes" by Michal Valient оба подсчитали края/лицевые нормали/силуэты онлайн, поэтому они оба должны реализовать некоторое «обходное решение», чтобы иметь возможность использовать GPU для определения края.Извлеките острые края из треугольной сетки и ее контур и визуализируйте его с помощью openGL
Я подумал, что лучше всего определить, когда острые края находятся в автономном режиме, и как-то сохранить эту информацию для последующего рендеринга и определить контур/силуэт/границу объекта в зависимости от точки зрения.
Во время моего поиска я наткнулся на CGAL, полуребра, OpenMesh, но не имел опыта использования ни одного из них.
Мои вопросы:
Как определить острые края? Или пройти через сетку, создать список смежности и проверить все ребра? (кросс-продукт, чтобы получить лицевые нормали и точечный продукт, чтобы получить угол между ними)
Как сохранить это в хорошем смысле, чтобы впоследствии можно было легко его визуализировать? Создать вырожденные треугольники для тусклых краев? Слишком много информации теряется таким образом? Использовать формат, который хранит строки и нарисовать их? Как их сделать?
Как определить контур/силуэт онлайн?
Это своего рода широкий вопрос, но я надеюсь, что кто-то может вести меня в одном направлении или, возможно, даже сделал это раньше с одной из упомянутых библиотек (CGAL, OpenMesh).
Благодарим за отзыв. Насколько я понимаю, острые края остаются острыми краями, независимо от того, что такое «точка зрения» (если отбрасывание задней поверхности используется для опущения обратных частей). Нет? Будет ли хороший способ создать структуру полузадачи, чтобы легко рассчитать смежные граничные грани, а затем сохранить линии, которые являются острыми краями, например. obj-файл и рендеринг через GL_LINES? Только для силуэта необходима «точка зрения», как описано, например, [Здесь] (http://ogldev.atspace.co.uk/www/tutorial39/tutorial39.html). Верный? – Michael
Возможно, посмотрите на эту статью http://e-collection.library.ethz.ch/eserv/eth:4390/eth-4390-01.pdf (обнаружение края сетки), чтобы найти острые края. Тем не менее, вы все равно должны будете работать, чтобы обнаружить контурные линии. Что касается вашего замечания об отбраковке задней поверхности, это выполняется с использованием обмотки треугольника, и это зависит от вывода шейдеров вершин/геометров/тэсов (https://www.opengl.org/wiki/Face_Culling).Это косвенно зависит от точки зрения. – Zouch