endf
6.2 View Cone
Это коническая область , видимая в определенном
направлении :
(C = камера , P
= плоскость проекции . Камера - глаз наблюдателя , плоскость проекции -
фактически экран компьютера . Если полигон не внутри конуса , мы игнорируем
его . Полигон может оказаться частично в поле видимости , тогда нужно
прорисовывать только его часть .
Pseudo:
- if
- (
- and
- SOME vertex.x at the range 0..MAX_X
- and
- SOME vertex.y at the range 0..MAX_Y
- )
- draw.
6.2.1 3D clipping
Используем полигон с n вершинами :
- ; проверка z
- every_z_out=true
- every_z_in=true
- for a=0 -> vertices_in_poly-1
- if (not every_z_out) and (not every_z_in)
- perform 2d transformations
- ...
- if every_z_in
- draw_using_graphical_clipping.
Главная идея
- клиппинг можно осуществить , используя параметрическое уравнение линии
(((x0,y0,z0) = vertex 1 etc):
- x = x0 + t*(x1-x0)
- y = y0 + t*(y1-y0)
- z = z0 + t*(z1-z0)
Z-clip: определим z=0.5 :
- z0 + t*(z1-z0) = 0.5
- t = (0.5-z0) / (z1-z0)
Подставляя x и y:
- x = x0 + (x1-x0)*(0.5-z0)/(z0-z1)
- y = y0 + (y1-y0)*(0.5-z0)/(z0-z1)
- z = 1
Получили новые координаты вершины.
6.3 Portals
Порталы требуют , чтобы сцена состояла из комнат . Каждая комната
имеет не только собственные полигоны , но также и те , которые видимы через
двери(portals) и находятся в других комнатах .
Если мы хотим ограничить видимость через дверь , мы должны сделать ее
просто backface .