Для задания области видимости мы будем использовать объект view-Frustrum.

Пользователю предоставляется возможность перемещать камеру в пространстве, изменять ее ориентацию и другие параметры. Рассмотрим описание этого класса.

Ы

jclass Camera : public Object À
public :
Vector3D pos; // camera position
Vector3D viewDir; // viewing direction (normalized) Vector3D upDir; //up direction (normalized)
Vector3D rightDir; // right direction (normalized) Matrix3D transf; // camera transform (from world
// to camera space) float fov; // field of view angle
float zNear; // near clipping z-value
float zFar; // far clipping z-value
int width; // view width
int height; // view height
float aspect; // aspect ratio of camera
bool mirrored; // whether the camera is mirrored
Frustrum viewFrustrum; // vewiwing frustrum
Camera ( const char * theName, const Vector3D& p,
float yaw, float pitch, float roll,
float aFov = 60, float nearZ = O.lf,
float farZ = 2000 );
Camera ( const Cameras camera ); Camera ();
const Vector3D& getPos () const {
return pos;
}
void setPos ( const Vector3D& newPos )
{

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

computeMatrix (); // since clipping planes must
//be rebuild
const Vector3D& getViewDir () const return viewDir;
const Vector3D& getRightDir () const return rightDir;
const Vector3D& getUpDir () const return upDir;
float getZNear () const return zNear;
float getZFar () const return zFar;
float getAspect () const return aspect;
const Frustrum& getViewFrustrum () const return viewFrustrum;
bool inViewingFrustrum ( const Vector3D& v ) const return viewFrustrum. contains ( v ),-

Пишем портальный рендерер (часть I)

bool inViewingFrustrum ( const BoundingBox& box ) const {
return viewFrustrum.contains ( box );
}
// map vector from world space to camera space Vector3D mapFromWorld ( const Vector3D& p ) const {

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