Где я могу получить алгоритм для отображения заполненных треугольников? Edit3: Я не могу использовать OpenGL для его рендеринга. Для этого мне нужен алгоритм с пикселями.
Моя цель состоит в том, чтобы сделать правильный многоугольник из треугольников, поэтому, если я использую этот алгоритм заполнения треугольника, ребра из каждого треугольника не будут перекрываться (или создавать промежутки между ними), потому что тогда это приведет к ошибкам рендеринга, если я используйте, например, XOR для рендеринга пикселей.
Следовательно, качество рендеринга должно соответствовать рендерингу OpenGL, поэтому я должен был бы определить, например, круг с N-вершинами, и он будет выглядеть как круг с любым размером правильно; поэтому он не использует только целые координаты для рендеринга, как это делают некоторые алгоритмы заполнения треугольника.
Мне понадобилась бы возможность управлять заполнением треугольника: я мог бы добавить свою собственную логику о том, как будет отображаться каждый из отдельных пикселей. Поэтому мне нужен чистый код за рендерингом, чтобы иметь полный контроль над ним. Он должен быть достаточно эффективным, чтобы рисовать десятки тысяч треугольников, не дожидаясь больше секунды. (Я не уверен, насколько быстро это может быть в лучшем случае, но я надеюсь, что он не займет больше 10 секунд).
Предпочтительным языком будет С++, но я могу преобразовать другие языки в мои потребности.
Если для этого нет свободных алгоритмов, где я могу научиться самостоятельно строить и насколько это было бы на самом деле? (me = math noob).
Я добавил тег OpenGL, так как это как-то связано с ним.
Edit2: Я попробовал этот алгоритм здесь: http://joshbeam.com/articles/triangle_rasterization/ Но он, кажется, немного сломан, здесь представляет собой круг с 64 треугольниками, выполненными с ним:
Но если вы увеличите масштаб, вы увидите ошибки:
Объяснение: 2 пикселя перекрываются с другими цветами треугольника, чего не должно быть! (или прозрачность или эффекты XOR и т.д. приведет к плохой рендеринга).
Похоже, что ошибки более заметны на небольших кругах. Это неприемлемо, если я хочу иметь эффект XOR для пикселей.
Что я могу сделать, чтобы исправить это, чтобы он полностью заполнил его без перекрывающихся пикселей или пробелов?
Edit4: Я заметил, что рендеринг очень маленьких кругов не очень хорош. Я понял, что это потому, что координаты действительно были преобразованы в целые числа. Как я могу рассматривать координаты как поплавки и сделать так, чтобы круг был точно и точно таким же, как в OpenGL? Вот пример того, насколько плохи маленькие круги:
Обратите внимание, насколько совершенен рендеринг OpenGL! Это то, чего я хочу достичь, без использования OpenGL. ПРИМЕЧАНИЕ: Я просто не хочу отображать идеальный круг, но любую форму многоугольника.