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

         

Например, для стандартной камеры в этом случае плоскости запишутся так:


Например, для стандартной камеры в этом случае плоскости запишутся так:

n = (0, 0, 1), o = (0, 0, -dist + smallvalue)
n = (0, -dist, ySize/2), o = (0, 0, -dist)
n = (0, dist, ySize/2), o = (0, 0, -dist)
n = (-dist, 0, xSize/2), o = (0, 0, -dist)
n = ( dist, 0, xSize/2), o = (0, 0, -dist)

При такой форме задания плоскости критерий принадлежности произвольной точки p нужному нам полупространству выглядит очень просто:

(p - o) * n >= 0.

Не менее просто выглядит и процедура поиска пересечения отрезка от точки p1 до точки p2 с плоскостью. Для любой точки p внутри отрезка имеем

p = p1 + k * (p2 - p1), 0 но так как p лежит в плоскости, p * n = 0; отсюда имеем

(p1 * n) + (k * (p2 - p1) * n) = 0,
k = -((p2 - p1) * n) / (p1 * n) = (p1 * n - p2 * n) / (p1 * n) = 1 - (p2 * n) / (p1 * n).

и моментально находим точку пересечения. Все 3D-отсечение, таким образом, сводится к последовательному применению одной универсальной процедуры отсечения плоскостью. Кроме того, видно, что можно посчитать матрицу перевода стандартной камеры в произвольную, применить ее к выписанным точкам o и нормалям n для плоскостей, задающих "стандартную" область зрения (к нормалям, естественно, надо применить только "поворотную" часть матрицы) и получить, таким образом, уравнения плоскостей уже для *любой* камеры.



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