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

         

В этом случае нам надо пропустить первые (-start_x) пикселов, так что сдвигаем все интерполируемые...


В этом случае нам надо пропустить первые (-start_x) пикселов, так что сдвигаем все интерполируемые по отрезку величины на (-start_x) пикселов и делаем start_x равным нулю. Например, для аффинного текстурирования надо сдвинуть u и v: u += (-start_x) * du; v += (-start_x) * dv; start_x = 0;

  • (end_x >= XSIZE). Здесь совсем просто. Так как интерполируем мы, начиная с начала отрезка, достаточно просто сделать end_x = XSIZE - 1.

    Таким образом, все отсечение делается несколькими строками кода: // ... if (current_sy >= YSIZE) return; if ((current_sy < 0) || (start_x >= XSIZE) || (end_x = XSIZE) end_x = XSIZE - 1; // ...

    Самое приятное заключается в том, что два умножения, которые получаются в случае (start_x < 0), можно легко совместить с теми двумя, что нужны для субтексельной точности (см.п.7.2). А несколько сравнений и присваивание на одну линию делаются достаточно быстро. Получаем отсечение, практически не замедляющее скорость работы.

    3.6.2. Алгоритм Сазерленда-Ходжмана

    Этот алгоритм (Sutherland-Hodgman algorithm) предназначен, на самом деле, для отсечения произвольного полигона (даже не обязательно выпуклого, хотя использовать невыпуклые полигоны довольно, на мой взгляд, нерационально) в полуплоскость, или, для 3D случая, в полупространство; другими словами, отсечения полигона прямой или плоскостью.



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