Vector3D tmp ( p - pos );
return Vector3D ( tmp & rightDir, tmp & upDir, tmp & viewDir );
}
// map vector from camera space to
// world space Vector3D mapToWorld ( const Vector3D& p ) const {
return pos + p.x * rightDir + p.y * upDir + + p.z * viewDir;
}
// map vector to screen space Vector3D mapToScreen ( const Vector3D& p ) const {
Vector3D scr ( transf * ( p - pos ) ) ;
scr /= scr.z; //do perspective transform
return scr;
}
bool isMirrored () const {
return mirrored;
}
float getFov () const {
return fov;
}
intgetWidth () const
{ ' return width;
}

А. В. Бореское. Графика трехмерной компьютерной игры

intgetHeight. () const {
return height;
}
void setEulerAngles ( float theYaw, float thePitch,
float theRoll ); void setViewSize ( int theWidth, int theHeight,
float theFov ); void setAspect ( float newAspect );
void setFov ( float newFovAngle );
void mirror ( const Plane& );
void transform ( const Transform3D& );
void buildHomogeneousMatrix ( float matrix [16] ) const;
static MetaClass classlnstance;
private:
void computeMatrix (); // compute vectors,
// transform matrix and // build viewing frustrum
} ;

Методы inViewingFrustrum служат для проверки попадания объекта в область видимости камеры (хотя бы частично).

чугунная печь бахта.

Метод mapToScreen позволяет определить экранные координаты проекции данной точки при использовании камеры.

Метод порталов Рассмотрим теперь подробнее реализацию метода порталов. Базовым объектом в нем будет комната с находящимися внутри нее гранями. Комнаты состоят из выпуклых многоугольников и связаны между собой при помощи порталов.

Поскольку мы собираемся активно использовать графический ускоритель, то можно отказаться от требования обязательной выпуклости комнат, возникающего в классическом методе порталов - аппаратно-реализованный метод г-буфера все равно правильно обработает все грани внутри каждой комнаты. При этом пропадает необходимость в сильном разбиении исходной сцены для получения выпуклых комнат. Так, комнату, показанную на рис. 7.3, а, можно рассматривать как обычную комнату, в то время как классический метод порталов требует ее разбиения на выпуклые части, как это показано на рис. 7.3, б.


⇐ Предыдущая| |Следующая ⇒