190 lines
5.5 KiB
Plaintext
190 lines
5.5 KiB
Plaintext
#ifndef _ENGINE_PUREVIEWSYSTEM_HPP_
|
|
#define _ENGINE_PUREVIEWSYSTEM_HPP_
|
|
#ifndef _COMMON_WINDOWS_HPP_
|
|
#include <common/windows.hpp>
|
|
#endif
|
|
#ifndef _COMMON_MATH_HPP_
|
|
#include <common/math.hpp>
|
|
#endif
|
|
#ifndef _ENGINE_POINT3D_HPP_
|
|
#include <engine/point3d.hpp>
|
|
#endif
|
|
|
|
class PureViewSystem;
|
|
class Polygon3D;
|
|
class Vector3D;
|
|
class Vector2D;
|
|
|
|
extern "C"
|
|
{
|
|
void initView(PureViewSystem FAR *lpViewSystem);
|
|
void mapCoordinates(Point3D *lpPoint3D,Point *lpPoint,DWORD useCartesianSystem);
|
|
void mapVectorCoordinates(Point3D *lpPoint3D,Point *lpPoint,DWORD useCartesianSystem);
|
|
void mapPolygonCoordinates(Polygon3D *pPolygon3D);
|
|
}
|
|
|
|
// do not make changes to this class that will alter its size
|
|
|
|
class PureViewSystem
|
|
{
|
|
public:
|
|
enum MapMode{ScreenSystem=0,CartesianSystem=1};
|
|
enum {Precision=16384};
|
|
PureViewSystem(void);
|
|
PureViewSystem(const PureViewSystem &somePureViewSystem);
|
|
PureViewSystem(float cameraTwistDegrees,int viewPlaneDistance,Point3D cameraPoint,Point3D focusPoint);
|
|
~PureViewSystem();
|
|
PureViewSystem &operator=(const PureViewSystem &somePureViewSystem);
|
|
WORD operator==(const PureViewSystem &somePureViewSystem)const;
|
|
float cameraTwistDegrees(void)const; // rotation about axis established by camera and focus points
|
|
void cameraTwistDegrees(float cameraTwistDegrees);
|
|
DWORD viewPlaneDistance(void); // distance from view point to view plane
|
|
void viewPlaneDistance(DWORD viewPlaneDistance);
|
|
Point3D cameraPoint(void)const; // view reference point (origin of coordinate system)
|
|
void cameraPoint(Point3D point3D);
|
|
Point3D focusPoint(void)const; // direction is which camera is pointing
|
|
void focusPoint(Point3D point3D);
|
|
protected:
|
|
void translatePoint(const Vector3D &vector3D,Vector2D &vector2D,MapMode mapMode=CartesianSystem);
|
|
void translatePoint(Polygon3D &polygon,MapMode mapMode=CartesianSystem);
|
|
void translatePoint(Point &dimensionPoint,Point &screenPoint,const Point3D &initialPoint,MapMode mapMode=CartesianSystem);
|
|
void mapCoordinates(Point3D &firstPoint3D,Point &firstPoint);
|
|
void viewPortWidth(WORD viewPortWidth);
|
|
void viewPortHeight(WORD viewPortHeight);
|
|
private:
|
|
enum {DefaultCameraTwistDegrees=120};
|
|
enum {DefaultViewPlaneDistance=50};
|
|
enum {DefaultFocusx=0,DefaultFocusy=0,DefaultFocusz=1};
|
|
enum {DefaultCamerax=75,DefaultCameray=75,DefaultCameraz=75};
|
|
LONG mCameraTwistRadians;
|
|
LONG mCosCameraTwistRadians;
|
|
LONG mSinCameraTwistRadians;
|
|
LONG mCosCameraTwistRadiansSinCameraTwistRadians;
|
|
DWORD mViewPlaneDistance;
|
|
WORD mViewPortWidth;
|
|
WORD mViewPortHeight;
|
|
Point3D mCameraPoint;
|
|
Point3D mFocusPoint;
|
|
};
|
|
|
|
inline
|
|
PureViewSystem::PureViewSystem(void)
|
|
: mViewPlaneDistance(DefaultViewPlaneDistance), mViewPortWidth(0), mViewPortHeight(0),
|
|
mCameraPoint(Point3D(DefaultCamerax,DefaultCameray,DefaultCameraz)),
|
|
mFocusPoint(Point3D(DefaultFocusx,DefaultFocusy,DefaultFocusz))
|
|
{
|
|
cameraTwistDegrees(DefaultCameraTwistDegrees);
|
|
}
|
|
|
|
inline
|
|
PureViewSystem::PureViewSystem(float cameraTwistDegrees,int viewPlaneDistance,Point3D cameraPoint,Point3D focusPoint)
|
|
{
|
|
PureViewSystem::cameraTwistDegrees(cameraTwistDegrees);
|
|
PureViewSystem::viewPlaneDistance(viewPlaneDistance);
|
|
PureViewSystem::cameraPoint(cameraPoint);
|
|
PureViewSystem::focusPoint(focusPoint);
|
|
}
|
|
|
|
inline
|
|
PureViewSystem::~PureViewSystem()
|
|
{
|
|
}
|
|
|
|
inline
|
|
PureViewSystem::PureViewSystem(const PureViewSystem &somePureViewSystem)
|
|
{
|
|
*this=somePureViewSystem;
|
|
}
|
|
|
|
inline
|
|
PureViewSystem &PureViewSystem::operator=(const PureViewSystem &somePureViewSystem)
|
|
{
|
|
mCameraTwistRadians=somePureViewSystem.mCameraTwistRadians;
|
|
mCosCameraTwistRadians=somePureViewSystem.mCosCameraTwistRadians;
|
|
mSinCameraTwistRadians=somePureViewSystem.mSinCameraTwistRadians;
|
|
mCosCameraTwistRadiansSinCameraTwistRadians=somePureViewSystem.mCosCameraTwistRadiansSinCameraTwistRadians;
|
|
mViewPlaneDistance=somePureViewSystem.mViewPlaneDistance;
|
|
mViewPortWidth=somePureViewSystem.mViewPortWidth;
|
|
mViewPortHeight=somePureViewSystem.mViewPortHeight;
|
|
mCameraPoint=somePureViewSystem.mCameraPoint;
|
|
mFocusPoint=somePureViewSystem.mFocusPoint;
|
|
return *this;
|
|
}
|
|
|
|
inline
|
|
WORD PureViewSystem::operator==(const PureViewSystem &somePureViewSystem)const
|
|
{
|
|
return (mCameraTwistRadians==somePureViewSystem.mCameraTwistRadians&&
|
|
mViewPlaneDistance==somePureViewSystem.mViewPlaneDistance&&
|
|
mCameraPoint==somePureViewSystem.mCameraPoint&&
|
|
mFocusPoint==somePureViewSystem.mFocusPoint);
|
|
}
|
|
|
|
inline
|
|
float PureViewSystem::cameraTwistDegrees(void)const
|
|
{
|
|
float cameraTwistDegrees((float)mCameraTwistRadians/(float)Precision);
|
|
return Math::degrees(cameraTwistDegrees);
|
|
}
|
|
|
|
inline
|
|
DWORD PureViewSystem::viewPlaneDistance(void)
|
|
{
|
|
return mViewPlaneDistance;
|
|
}
|
|
|
|
inline
|
|
void PureViewSystem::viewPlaneDistance(DWORD viewPlaneDistance)
|
|
{
|
|
mViewPlaneDistance=viewPlaneDistance;
|
|
}
|
|
|
|
inline
|
|
Point3D PureViewSystem::cameraPoint(void)const
|
|
{
|
|
return mCameraPoint;
|
|
}
|
|
|
|
inline
|
|
void PureViewSystem::cameraPoint(Point3D point3D)
|
|
{
|
|
mCameraPoint=point3D;
|
|
}
|
|
|
|
inline
|
|
Point3D PureViewSystem::focusPoint(void)const
|
|
{
|
|
return mFocusPoint;
|
|
}
|
|
|
|
inline
|
|
void PureViewSystem::focusPoint(Point3D point3D)
|
|
{
|
|
mFocusPoint=point3D;
|
|
}
|
|
|
|
inline
|
|
void PureViewSystem::viewPortWidth(WORD viewPortWidth)
|
|
{
|
|
mViewPortWidth=viewPortWidth;
|
|
}
|
|
|
|
inline
|
|
void PureViewSystem::viewPortHeight(WORD viewPortHeight)
|
|
{
|
|
mViewPortHeight=viewPortHeight;
|
|
}
|
|
|
|
inline
|
|
void PureViewSystem::mapCoordinates(Point3D &firstPoint3D,Point &firstPoint)
|
|
{
|
|
Point3D point3D(firstPoint3D);
|
|
Point point(firstPoint);
|
|
|
|
initView((PureViewSystem*)this);
|
|
::mapCoordinates(&point3D,&point,TRUE);
|
|
firstPoint3D=point3D;
|
|
firstPoint=point;
|
|
}
|
|
#endif
|