Есть лучший способ сделать это? - PullRequest
2 голосов
/ 20 августа 2010

Я рисую 2D, вогнутые, иногда многоконтурные, иногда самопересекающиеся многоугольники с OpenGL. Вот образец: alt text

Прямо сейчас я беру точки, которые при подключении приведут к контуру многоугольника. Затем я помещаю их в GLUT, где появляются треугольники. Затем я создаю текстурные координаты и текстуру многоугольника.

Абсолютным самым медленным компонентом является тесселяция / триангуляция. Учитывая, что мне просто нужно нарисовать их, как вы видите, каковы более быстрые альтернативы триангуляции? Могу ли я найти алгоритм рисования, который бы правильно установил пиксель?

Спасибо

1 Ответ

1 голос
/ 20 августа 2010

Сначала более простая проблема: предположим, вы просто хотели использовать один цвет. Вы можете начать со списка контуров, а затем сканировать все окно по строке и столбцу: всякий раз, когда вы пересекаете границу, вы увеличиваете или уменьшаете (в зависимости от смысла пересечения) счетчик how_many_outlines_am_I_inside. Когда он равен нулю, закрасьте пиксель белым, иначе закрасьте его зеленым (и я полагаю, черный для самой границы). Это будет правильно обрабатывать самопересекающиеся кривые.

Теперь для оттенков. Судя по вашему примеру, затенение является равномерным по вертикали, но изменяется по горизонтали, масштабируется по всей ширине контура. Поэтому вместо простого счетчика вам понадобится стек (я рекомендую stl :: list) контуров, чтобы вы могли отслеживать, какой контур (из тех, что вы внутри) является верхним, чтобы вы могли вычислить какую долю расстояния вы преодолели от х мин до х макс . Наконец, для полупрозрачности (как со звездой, частично видимой через прямоугольник): вам придется самостоятельно выбирать правила, я не могу вывести их из глазного яблока, но стек должен облегчить реализацию.

Хотите помочь с кодом C ++?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...