Як знайти контурні лінії для алгоритму видалення прихованих ліній Appel


10

Для задоволення я намагаюся зробити телевізійний переглядач для DCPU-16 . Я розумію, як зробити все, окрім того, як приховати лінії, заховані в дротяній рамі. Усі запитання, про які йдеться тут, припускають, що у вас є доступ до OpenGL, на жаль, я не маю доступу до подібного для DCPU-16 (або будь-якого апаратного прискорення).

Я знайшов досить хороший опис алгоритму Appel в Google Books . Однак є одне питання, у мене виникають проблеми з з'ясуванням.

Апель визначає лінію контуру як край, що розділяється передньою та зворотною багатокутником, або неподілений край переднього багатокутника, який не є частиною закритого багатогранника. Край, що розділяється двома передніми багатокутниками, не спричиняє зміни видимості, тому не є контурною лінією. На рис. 8.4, краї AB, EF, PC, GK і CH є контурними лініями, тоді як краї ED, DC і GI не є.

Рис. 8.4

Я розумію правила алгоритму і як він працює, коли ви маєте свої контурні лінії, однак я не розумію, що мені потрібно зробити, щоб визначити, чи є край " спільним передньою та зворотною багатокутником, або необроблений край переднього многокутника, який не є частиною закритого багатогранника "з точки зору кодування. Я можу подивитися на форму, і я можу знати, які лінії є контурними лініями в моїй голові, але я не маю поняття, як передати це "розуміння" в кодований алгоритм.


Оновлення

Я досяг певного прогресу у визначенні контурних ліній. Ці дві лекції я знайшов у класі університету Буффало з комп’ютерної графіки.

введіть тут опис зображення

Розгляньте краї. Вони поділяються на три категорії.

  1. Край, що з'єднує дві невидимі грані, сам по собі є невидимим. Це буде видалено зі списку та проігноровано.
  2. Край, що з'єднує дві потенційно видимі грані, називається «матеріальним краєм» і потребує подальшої обробки.
  3. Край, що з'єднує потенційно видиме обличчя та невидиме обличчя, є особливим випадком "матеріального краю" і його також називають "межею контуру".

Використовуючи вищевказані відомості, я можу наблизитись до того, що можу виписати це як код, але у мене ще довгий шлях.



1
Перевірте цю відповідь на обчислення норми трикутника. Точковий добуток нормального вектора з вектором прямолінійного огляду визначає, чи трикутник спрямований лицьовою стороною.

Відповіді:


3

Щоб утримуватись правило «-обличчя», ви повинні переконатися, що всі обличчя правильно орієнтовані. Наприклад, використовуйте правило праворуч, це означає, що вершини обличчя повинні бути пронумеровані таким чином, щоб позитивне обертання в площині грані відповідало нормальному вказуванню поза поліедра. (Зрозумів?) Або, простіше кажучи, кожне обличчя повинне мати свою зовнішню орієнтацію.

Висячі грані, тобто що не належать до закритого багатогранника, можна розглядати як такі, що мають невизначену орієнтацію.

Тепер обчислення частин ребра, які приховані контурним багатокутником, є основним курсом. Ця проблема дуже близька до проблеми відсікання відрізка рядка полігональним вікном у 2D. Спочатку розгляньте лінію опори відрізка лінії та знайдіть перетини з багатокутником. Використовуючи правило парності, ви можете легко визначити деталі всередині та зовні полігону.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.