Триангуляция - он очевидный ответ, но трудно написать твердый триангулятор. Если у вас нет двухмесячного времени впустую, даже не пытайтесь.
Существует пара кодов, которые могут вам помочь:
Библиотека GPC. Очень прост в использовании, но вам может не понравиться его лицензия:
http://www.cs.man.ac.uk/~toby/alan/software/gpc.html
Существует также треугольник:
http://www.cs.cmu.edu/~quake/triangle.html
И ФИСТ:
http://www.cosy.sbg.ac.at/~held/projects/triang/triang.html
Другой (и мой предпочтительный) вариант - использовать тесселятор GLU. Вы можете просто загрузить и использовать библиотеку GLU из программ DirectX. Ему не нужен контекст OpenGL, чтобы использовать его, и он предварительно установлен на всех компьютерах с Windows. Если вам нужен источник, вы можете снять код триангуляции с эталонной реализации SGI. Я сделал это один раз, и это заняло у меня всего пару часов.
Пока что по триангуляции. Есть и другой способ: вы можете использовать трафаретные трюки.
Общий алгоритм выглядит следующим образом:
Отключить запись цвета и глубины. Включите запись трафарета и настройте буфер трафарета, чтобы он инвертировал текущее значение трафарета. Достаточно одного кусочка трафарета. О, ваш трафаретный буфер также должен быть очищен.
Выберите случайную точку на экране. Любой подойдет. Назовите этот пункт своим Якорем.
Для каждого ребра вашего многоугольника построите треугольник из двух вершин, которые строят ребро и ваш якорь. Нарисуйте этот треугольник.
После того, как вы нарисовали все эти треугольники, выключите запись трафарета, включите тестирование трафарета и цветную запись и нарисуйте полноэкранный четырехугольник в выбранном цвете. Это заполнит только пиксели внутри вашего выпуклого многоугольника.
Хорошей идеей будет поместить якорь в середину многоугольника и просто нарисовать прямоугольник размером с границу вашего многоугольника. Это немного экономит.
Кстати - техника трафарета работает и для самопересекающихся полигонов.
Надеюсь, это поможет,
Nils