idTech4.Renderer.idRenderSystem.SetupViewFrustum C# (CSharp) Method

SetupViewFrustum() private method

private SetupViewFrustum ( ) : void
return void
		private void SetupViewFrustum()
		{
			float xs, xc;
			float ang = MathHelper.ToRadians(_viewDefinition.RenderView.FovX) * 0.5f;

			idMath.SinCos(ang, out xs, out xc);

			Vector3 tmp = xs * new Vector3(_viewDefinition.RenderView.ViewAxis.M11, _viewDefinition.RenderView.ViewAxis.M12, _viewDefinition.RenderView.ViewAxis.M13)
							+ xc * new Vector3(_viewDefinition.RenderView.ViewAxis.M21, _viewDefinition.RenderView.ViewAxis.M22, _viewDefinition.RenderView.ViewAxis.M23);

			Vector3 tmp2 = xs * new Vector3(_viewDefinition.RenderView.ViewAxis.M11, _viewDefinition.RenderView.ViewAxis.M12, _viewDefinition.RenderView.ViewAxis.M13)
							- xc * new Vector3(_viewDefinition.RenderView.ViewAxis.M21, _viewDefinition.RenderView.ViewAxis.M22, _viewDefinition.RenderView.ViewAxis.M23);

			_viewDefinition.Frustum[0] = new Plane(tmp.X, tmp.Y, tmp.Z, 0);
			_viewDefinition.Frustum[1] = new Plane(tmp2.X, tmp2.Y, tmp2.Z, 0);

			ang = MathHelper.ToRadians(_viewDefinition.RenderView.FovY) * 0.5f;

			idMath.SinCos(ang, out xs, out xc);

			tmp = xs * new Vector3(_viewDefinition.RenderView.ViewAxis.M11, _viewDefinition.RenderView.ViewAxis.M12, _viewDefinition.RenderView.ViewAxis.M13)
							+ xc * new Vector3(_viewDefinition.RenderView.ViewAxis.M21, _viewDefinition.RenderView.ViewAxis.M22, _viewDefinition.RenderView.ViewAxis.M23);

			tmp2 = xs * new Vector3(_viewDefinition.RenderView.ViewAxis.M11, _viewDefinition.RenderView.ViewAxis.M12, _viewDefinition.RenderView.ViewAxis.M13)
							- xc * new Vector3(_viewDefinition.RenderView.ViewAxis.M21, _viewDefinition.RenderView.ViewAxis.M22, _viewDefinition.RenderView.ViewAxis.M23);

			_viewDefinition.Frustum[2] = new Plane(tmp.X, tmp.Y, tmp.Z, 0);
			_viewDefinition.Frustum[3] = new Plane(tmp2.X, tmp2.Y, tmp2.Z, 0);

			// plane four is the front clipping plane
			tmp = new Vector3(_viewDefinition.RenderView.ViewAxis.M11, _viewDefinition.RenderView.ViewAxis.M12, _viewDefinition.RenderView.ViewAxis.M13);

			_viewDefinition.Frustum[4] = new Plane(tmp.X, tmp.Y, tmp.Z, 0);

			for(int i = 0; i < 5; i++)
			{
				tmp = -_viewDefinition.Frustum[i].Normal;
				tmp.Z = -(_viewDefinition.RenderView.ViewOrigin * _viewDefinition.Frustum[i].Normal).Length();

				// flip direction so positive side faces out (FIXME: globally unify this)
				_viewDefinition.Frustum[i] = new Plane(tmp.X, tmp.Y, tmp.Z, 0);
			}

			// eventually, plane five will be the rear clipping plane for fog

			float dNear = idE.CvarSystem.GetFloat("r_znear");

			if(_viewDefinition.RenderView.CramZNear == true)
			{
				dNear *= 0.25f;
			}

			float dFar = idE.MaxWorldSize;
			float dLeft = dFar * idMath.Tan(MathHelper.ToRadians(_viewDefinition.RenderView.FovX * 0.5f));
			float dUp = dFar * idMath.Tan(MathHelper.ToRadians(_viewDefinition.RenderView.FovY * 0.5f));

			_viewDefinition.ViewFrustum = new idFrustum();
			_viewDefinition.ViewFrustum.Origin = _viewDefinition.RenderView.ViewOrigin;
			_viewDefinition.ViewFrustum.Axis = _viewDefinition.RenderView.ViewAxis;
			_viewDefinition.ViewFrustum.SetSize(dNear, dFar, dLeft, dUp);
		}