Деякий час тому я запитав, як визначити, коли обличчя перекривається іншим. Порада полягала у використанні Z-буфера.
Однак я не можу використовувати Z-буфер у своєму поточному проекті, і тому я хотів би використовувати алгоритм Painter. Я не маю жодної гадки про те, коли поверхня позаду чи перед іншою, хоча. Я спробував численні методи, але всі вони провалюються у кращих випадках, або вони не вдається навіть у загальних випадках.
Це перелік методів сортування, які я намагався поки що:
- Відстань до середини кожної особи
- Середня відстань до кожної вершини кожної грані
- Середнє z значення кожної вершини
- Знайдіть значення z вершин кожного обличчя та намалюйте їх першими
- Найменше z значення вершин кожної грані та намалюйте останні
Проблема полягає в тому, що обличчя може бути на більшій відстані, але все-таки далі. Всі ці методи здаються ненадійними.
Редагувати: Наприклад, на наступному зображенні поверхня з синьою точкою як середньою точкою намальована поверхнею, а червона точка як середина, тому що синя точка розташована ближче. Однак це тому, що поверхня червоної точки більша, а середина - далі. Поверхня з червоною точкою повинна бути пофарбована над синьою, оскільки вона ближче , тоді як відстань середньої точки говорить про протилежне.
Що саме використовується в алгоритмі Painter для визначення порядку, в якому повинні бути намальовані об'єкти?