|
@@ -16,20 +16,22 @@
|
|
|
|
|
|
static plane_t frustum[TOTAL_PLANES];
|
|
|
|
|
|
-void initFrustumPlanes(double fov, double aspectRation, double zNear, double zFar)
|
|
|
+void initFrustumPlanes(double fov, double aspectRatio, double zNear, double zFar)
|
|
|
{
|
|
|
- double radFOV = (fov * M_PI) / 180.;
|
|
|
+ double radFOV_Y = (fov * M_PI) / 180.;
|
|
|
+ double radFOV_X = atan(tan(radFOV_Y/2)* aspectRatio) * 2;
|
|
|
+
|
|
|
frustum[LEFT_PLANE].point = vec3(0, 0, 0);
|
|
|
- frustum[LEFT_PLANE].normal = vec3( cos(radFOV / 2.0) , 0, sin(radFOV / 2.0));
|
|
|
+ frustum[LEFT_PLANE].normal = vec3( cos(radFOV_X / 2.0) , 0, sin(radFOV_X / 2.0));
|
|
|
|
|
|
frustum[RIGHT_PLANE].point = vec3(0, 0, 0);
|
|
|
- frustum[RIGHT_PLANE].normal = vec3( -cos(radFOV / 2.0), 0, sin(radFOV / 2.0));
|
|
|
+ frustum[RIGHT_PLANE].normal = vec3( -cos(radFOV_X / 2.0), 0, sin(radFOV_X / 2.0));
|
|
|
|
|
|
frustum[TOP_PLANE].point = vec3(0, 0, 0);
|
|
|
- frustum[TOP_PLANE].normal = vec3(0, -cos(radFOV / 2.0), sin(radFOV / 2.0));
|
|
|
+ frustum[TOP_PLANE].normal = vec3(0, -cos(radFOV_Y / 2.0), sin(radFOV_Y / 2.0));
|
|
|
|
|
|
frustum[BOTTOM_PLANE].point = vec3(0, 0, 0);
|
|
|
- frustum[BOTTOM_PLANE].normal = vec3(0, cos(radFOV / 2.0), sin(radFOV / 2.0));
|
|
|
+ frustum[BOTTOM_PLANE].normal = vec3(0, cos(radFOV_Y / 2.0), sin(radFOV_Y / 2.0));
|
|
|
|
|
|
frustum[NEAR_PLANE].point = vec3(0, 0, zNear);
|
|
|
frustum[NEAR_PLANE].normal = vec3(0, 0, 1);
|