Подскажите как можно наиболее быстро растеризовать поверхность, заданную B-сплайнами, чтобы не нарушалась ее целостность (не было пропусков пикселей внутри поверхности). Ели делать это лобовым методом, то есть просчётом по формуле с маленьким шагом, то получается слишком медленно и нерационально (так как некоторые точки прорисовываются многократно)?
Стандартный подход разбивать поверхности на треугольники приемлемо малого размера и считать только их вершины, а заливку треугольников интерполировать по цвету вершин. Если это делать через ДХ или ОГЛ то отрисовку треугольников аппаратный ускоритель видеокарты подхватит.
Может кто нить знает как тогда подобрать оптимальные шаги по параметрам (u,v) (u,v принадлежат [0,1]), что бы не было разрывов?
Aloner Ты хочешь быстро или точно? Вытикает это из того, что прямая должна разбиваться ровна на длину L в пикселях. Если взять пол окружности то pi*L/2=1.57*L . Ясно что может быть и больше. Просто в одной статье применялось 2. Я лично брал бы по больше 3 или даже 4, чтобы покрыть как можно больше случаев. Но за частую это излишне и хватает 2. Если хочешь делать точно, то делай по правилам через рекурсивное разбиение.
Pavia С В-сплайнами не игрался, только с кривой Безье (частный случай В-сплайна). И у неё расстояние между получаемыми точками зависит и от шага параметра и от кривизны участка кривой. Т.е. в сегменте окружности фиксированный шаг параметра даст равномерное расположение точек на кривой, а в общем случае при фиксированном шаге будет "где густо, где пусто". Aloner Я тогда остановился на варианте с интерполяцией через ломаную, получилось вполне прилично, так что по прежнему советую триангуляцию. Хотя мимоходом видел упоминания алгоритмов сгущения узлов на В-сплайнах, якобы позволяющих сопоставить узлы пикселам, но в чём они заключаются и позволяют ли в общем случае добиться равномерности сгущаемых узлов не нашёл. add: Ещё можно попробовать шагать достаточно мелким шагом, чтобы кривизна менялась незначительно, считать полученное расстояние между точками и если оно меньше пиксела, увеличивать шаг, а если больше то уменьшать шаг во столько раз, сколько пикселов в нём поместилось, с поправкой на кривизу, или мельчить этот шаг методом деления пополам до размеров пикселя.
Ух, сколько написали пока меня не было ) Спасибо всем! Подумал тут на досуге, решил что все таки триангуляцию буду применять и перейду к NURBS,то есть добавлю веса для узлов B-сплайна. Кстати, может кто в курсе как найти пересечение прямой и NURBS?
ИМХО точек пересечения прямой и NURBS может быть несколько сотентысяч . если считать каждую точку NURBS вручную, то можно проверять пересечение каждого NURBS-отрезка прямой. P.S. поправил.