12#ifndef TT_INCLUDE_FRUSTUMCLASS_H
13#define TT_INCLUDE_FRUSTUMCLASS_H
19 void Init(
const Matrix3D & camera,
20 const Vector2 & vpmin,
21 const Vector2 & vpmax,
26 CameraTransform = camera;
27 if ((znear > 0.0f) && (zfar > 0.0f))
32 Corners[0].Set(vpmin.X, vpmax.Y, 1.0);
33 Corners[4] = Corners[0];
36 Corners[1].Set(vpmax.X, vpmax.Y, 1.0);
37 Corners[5] = Corners[1];
40 Corners[2].Set(vpmin.X, vpmin.Y, 1.0);
41 Corners[6] = Corners[2];
44 Corners[3].Set(vpmax.X, vpmin.Y, 1.0);
45 Corners[7] = Corners[3];
48 for (i = 0; i < 8; i++)
50 Matrix3D::Transform_Vector(CameraTransform, Corners[i], &(Corners[i]));
52 PlaneClass frustum_planes[6];
53 Planes[0].Set(Corners[0], Corners[3], Corners[1]);
54 Planes[1].Set(Corners[0], Corners[5], Corners[4]);
55 Planes[2].Set(Corners[0], Corners[6], Corners[2]);
56 Planes[3].Set(Corners[2], Corners[7], Corners[3]);
57 Planes[4].Set(Corners[1], Corners[7], Corners[5]);
58 Planes[5].Set(Corners[4], Corners[7], Corners[6]);
59 BoundMin = BoundMax = Corners[0];
62 if (Corners[i].X < BoundMin.X) BoundMin.X = Corners[i].X;
63 if (Corners[i].X > BoundMax.X) BoundMax.X = Corners[i].X;
64 if (Corners[i].Y < BoundMin.Y) BoundMin.Y = Corners[i].Y;
65 if (Corners[i].Y > BoundMax.Y) BoundMax.Y = Corners[i].Y;
66 if (Corners[i].Z < BoundMin.Z) BoundMin.Z = Corners[i].Z;
67 if (Corners[i].Z > BoundMax.Z) BoundMax.Z = Corners[i].Z;
70 const Vector3 & Get_Bound_Min(
void)
const {
return BoundMin; }
71 const Vector3 & Get_Bound_Max(
void)
const {
return BoundMax; }
72 Matrix3D CameraTransform;