Самоучитель по 3dsmax 7

         

Кстати, ни один из примеров к FAQ'у потерей субпиксельной точности не страдает, так как для...


Кстати, ни один из примеров к FAQ'у потерей субпиксельной точности не страдает, так как для каждой строки sx_start и sx_end заново вычисляются по точной формуле.

Точная формула для расчета sx_start выглядит как

sx_start = A.sx + dx_start * (current_sy - A.sy),

и для самой первой линии мы тоже должны ее честно применить, а не просто положить sx_start = A.sx. Получаем, что sx_start = A.sx + dx_start * (ceil(A.sy) - A.sy); sx_end = A.sx + dx_end * (ceil(A.sy) - A.sy);

Ту же самую операцию надо сделать и со всем остальными переменными, которые мы будем интерполировать по ребрам (например u, v, интенсивность для Гуро); и то же самое надо сделать при переходе с ребра на ребро. // ... u_start += du_start * (ceil(start_y) - start_y); u_end += du_end * (ceil(start_y) - start_y); // ...

Ну и, разумеется, рисовать начинать надо с той строки, которую мы использовали в формулах. То есть, ceil(start_y).

Вот и все. На скорость работы это не влияет вообще, а грани сразу перестают мелко и противно дрожать при перемещении, особенно сильно это заметно при маленьких поворотах (в доли градуса).

Содержание раздела