Для задоволення я намагаюся зробити телевізійний переглядач для DCPU-16 . Я розумію, як зробити все, окрім того, як приховати лінії, заховані в дротяній рамі. Усі запитання, про які йдеться тут, припускають, що у вас є доступ до OpenGL, на жаль, я не маю доступу до подібного для DCPU-16 (або будь-якого апаратного прискорення).
Я знайшов досить хороший опис алгоритму Appel в Google Books . Однак є одне питання, у мене виникають проблеми з з'ясуванням.
Апель визначає лінію контуру як край, що розділяється передньою та зворотною багатокутником, або неподілений край переднього багатокутника, який не є частиною закритого багатогранника. Край, що розділяється двома передніми багатокутниками, не спричиняє зміни видимості, тому не є контурною лінією. На рис. 8.4, краї AB, EF, PC, GK і CH є контурними лініями, тоді як краї ED, DC і GI не є.
Я розумію правила алгоритму і як він працює, коли ви маєте свої контурні лінії, однак я не розумію, що мені потрібно зробити, щоб визначити, чи є край " спільним передньою та зворотною багатокутником, або необроблений край переднього многокутника, який не є частиною закритого багатогранника "з точки зору кодування. Я можу подивитися на форму, і я можу знати, які лінії є контурними лініями в моїй голові, але я не маю поняття, як передати це "розуміння" в кодований алгоритм.
Оновлення
Я досяг певного прогресу у визначенні контурних ліній. Ці дві лекції я знайшов у класі університету Буффало з комп’ютерної графіки.
Розгляньте краї. Вони поділяються на три категорії.
- Край, що з'єднує дві невидимі грані, сам по собі є невидимим. Це буде видалено зі списку та проігноровано.
- Край, що з'єднує дві потенційно видимі грані, називається «матеріальним краєм» і потребує подальшої обробки.
- Край, що з'єднує потенційно видиме обличчя та невидиме обличчя, є особливим випадком "матеріального краю" і його також називають "межею контуру".
Використовуючи вищевказані відомості, я можу наблизитись до того, що можу виписати це як код, але у мене ще довгий шлях.