23 #include "precompiled.h"
58 float f = 1.0f/tanf(
m_FOV/2);
72 float f = 1.0f/tanf(
m_FOV/2);
150 float x = dist*aspect*tanf(
m_FOV*0.5f);
151 float y = dist*tanf(
m_FOV*0.5f);
174 for (
int i = 0; i < 4; i++)
178 float dx = (float)px / (
float)
g_Renderer.GetWidth();
179 float dz = 1 - (float)py / (
float)
g_Renderer.GetHeight();
183 CVector3D pt = wPts[0] + (vdx * dx) + (vdz * dz);
198 x = screenspace.
X / screenspace.
W;
199 y = screenspace.
Y / screenspace.
W;
208 CVector3D origin, dir, delta, terrainPoint, waterPoint;
213 bool gotTerrain = tracer.RayIntersect(origin, dir, x, z, terrainPoint);
277 CVector3D origin, dir, delta, currentTarget;
282 return currentTarget;
296 CVector3D origin, dir, delta, terrainPoint, waterPoint;
301 bool gotTerrain = tracer.RayIntersect(origin, dir, x, z, terrainPoint);
373 #warning TODO: implement camera frustum for GLES
380 for(
int i = 0; i < 4; i++)
388 glVertex3fv(&nearPoints[0].
X);
389 glVertex3fv(&nearPoints[1].X);
390 glVertex3fv(&nearPoints[2].X);
391 glVertex3fv(&nearPoints[3].X);
396 glVertex3fv(&farPoints[0].X);
397 glVertex3fv(&farPoints[1].X);
398 glVertex3fv(&farPoints[2].X);
399 glVertex3fv(&farPoints[3].X);
403 glBegin(GL_QUAD_STRIP);
404 glVertex3fv(&nearPoints[0].X);
405 glVertex3fv(&farPoints[0].X);
406 glVertex3fv(&nearPoints[1].X);
407 glVertex3fv(&farPoints[1].X);
408 glVertex3fv(&nearPoints[2].X);
409 glVertex3fv(&farPoints[2].X);
410 glVertex3fv(&nearPoints[3].X);
411 glVertex3fv(&farPoints[3].X);
412 glVertex3fv(&nearPoints[0].X);
413 glVertex3fv(&farPoints[0].X);
418 for(
int i = 0; i < intermediates; ++i)
420 float t = (i+1.0)/(intermediates+1.0);
422 for(
int j = 0; j < 4; ++j)
423 intermediatePoints[j] = nearPoints[j]*t + farPoints[j]*(1.0-t);
426 glVertex3fv(&intermediatePoints[0].X);
427 glVertex3fv(&intermediatePoints[1].X);
428 glVertex3fv(&intermediatePoints[2].X);
429 glVertex3fv(&intermediatePoints[3].X);
const ssize_t TERRAIN_TILE_SIZE
metres [world space units] per tile in x and z
bool FindRayIntersection(const CVector3D &start, const CVector3D &direction, CVector3D *intsect)
CVector3D Cross(const CVector3D &vector) const
ssize_t GetVerticesPerSide() const
CVector3D Transform(const CVector3D &vector) const
CVector3D GetWorldCoordinates(int px, int py, bool aboveWater=false) const
void LookAlong(CVector3D camera, CVector3D focus, CVector3D up)
void Set(const CVector3D &p1, const CVector3D &p2, const CVector3D &p3)
CTerrain * GetTerrain()
Get the pointer to the terrain object.
void LookAt(const CVector3D &camera, const CVector3D &orientation, const CVector3D &up)
void AddPlane(const CPlane &plane)
void GetCameraPlanePoints(float dist, CVector3D pts[4]) const
CGame * g_Game
Globally accessible pointer to the CGame object.
void GetScreenCoordinates(const CVector3D &world, float &x, float &y) const
void ClipFrustum(const CPlane &clipPlane)
void SetViewPort(const SViewPort &viewport)
CPlane m_aPlanes[MAX_NUM_FRUSTUM_PLANES]
void UpdateFrustum(const CBoundingBoxAligned &scissor=CBoundingBoxAligned(CVector3D(-1.0f,-1.0f,-1.0f), CVector3D(1.0f, 1.0f, 1.0f)))
void BuildCameraRay(int px, int py, CVector3D &origin, CVector3D &dir) const
void GetInverse(CMatrix3D &dst) const
void SetNumPlanes(size_t num)
static float LengthSquared(const SVec3 v)
CWorld * GetWorld()
Get the pointer to the game world object.
void Render(int intermediates=0) const
Render: Renders the camera's frustum in world space.
CVector3D GetTranslation() const
CVector3D GetFocus() const
void SetProjectionTile(int tiles, int tile_x, int tile_y)
T clamp(T value, T min, T max)
void SetProjection(float nearp, float farp, float fov)