Алгоритм рендеринга идеального заполненного треугольника?

Где я могу получить алгоритм для рендеринга закрашенных треугольников? Редактировать3:Я не могу использовать OpenGL для его рендеринга. Для этого мне нужен алгоритм на -пикселей.

Моя цель состоит в том, чтобы визуализировать правильный многоугольник из треугольников, поэтому, если я использую этот алгоритм заполнения треугольников, края каждого треугольника не будут перекрываться (или создавать промежутки между ними ), потому что тогда это приведет к ошибкам рендеринга, если Я использую, например, XOR для рендеринга пикселей.

Следовательно, качество рендеринга должно соответствовать рендерингу OpenGL, поэтому я должен иметь возможность определить -, например, -круг с N -вершинами, и он будет правильно отображаться как круг любого размера; поэтому он не использует только целочисленные координаты для рендеринга, как это делают некоторые алгоритмы заполнения треугольников.

Мне понадобится возможность самостоятельно контролировать заполнение треугольника :. Я мог бы добавить свою собственную логику того, как будет отображаться каждый из отдельных пикселей. Поэтому мне нужен голый код рендеринга, чтобы иметь полный контроль над ним. Это должно быть достаточно эффективно, чтобы рисовать десятки тысяч треугольников, возможно, не ожидая больше секунды. (Я не уверен, насколько быстро это может быть в лучшем случае, но я надеюсь, что это займет не более 10 секунд ).

Предпочтительным языком будет C++, но я могу преобразовать другие языки в соответствии со своими потребностями.

Если для этого нет бесплатных алгоритмов, где я могу научиться создавать их самостоятельно, и насколько это будет сложно на самом деле? (я=нуб-математик ).

Я добавил тег OpenGL, так как это как-то связано с ним.

Редактировать2:Я попробовал алгоритм здесь:http://joshbeam.com/articles/triangle_rasterization/Но он кажется немного сломанным, вот круг с 64 треугольниками, отрендеренными с ним: enter image description here

Но если увеличить, то видны ошибки: enter image description here

Объяснение :2 пикселя перекрываются с другими цветами треугольника, чего быть не должно! (или эффекты прозрачности или XOR и т. д. приведут к плохому рендерингу ).

Кажется, что ошибки более заметны на меньших кругах. Это неприемлемо, если я хочу иметь эффект XOR для пикселей.

Что я могу сделать, чтобы исправить это, чтобы он идеально заполнил его без перекрывающихся пикселей или пробелов?

Редактировать4:Я заметил, что рендеринг очень маленьких кругов не очень хорош. Я понял, что это произошло потому, что координаты действительно были преобразованы в целые числа. Как я могу обрабатывать координаты как числа с плавающей запятой и сделать так, чтобы круг точно и идеально отображался, как в OpenGL? Вот пример того, как плохо выглядят маленькие круги:

enter image description here

Обратите внимание, насколько совершенен рендеринг OpenGL! ЭТО то, чего я хочу добиться, не используя OpenGL. ПРИМЕЧАНИЕ:Я не просто хочу сделать идеальный круг, а любую форму многоугольника.

12
задан Rookie 27 July 2012 в 20:44
поделиться