MCPcopy Create free account
hub / github.com/Illation/ETEngine / Update

Method Update

Engine/source/EtRendering/GraphicsTypes/Frustum.cpp:53–113  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

51}
52
53void Frustum::Update(Viewport const* const viewport)
54{
55 //calculate generalized relative width and aspect ratio
56 float normHalfWidth = tan(math::radians(m_FOV));
57 float aspectRatio = viewport->GetAspectRatio();
58
59 //calculate width and height for near and far plane
60 float nearHW = normHalfWidth*m_NearPlane;
61 float nearHH = nearHW / aspectRatio;
62 float farHW = normHalfWidth*m_FarPlane;// *0.5f;
63 float farHH = farHW / aspectRatio;
64
65 //calculate near and far plane centers
66 auto nCenter = m_Position + m_Forward*m_NearPlane;
67 auto fCenter = m_Position + m_Forward*m_FarPlane *0.5f;
68
69 //construct corners of the near plane in the culled objects world space
70 m_Corners.na = nCenter + m_Up*nearHH - m_Right*nearHW;
71 m_Corners.nb = nCenter + m_Up*nearHH + m_Right*nearHW;
72 m_Corners.nc = nCenter - m_Up*nearHH - m_Right*nearHW;
73 m_Corners.nd = nCenter - m_Up*nearHH + m_Right*nearHW;
74 //construct corners of the far plane
75 m_Corners.fa = fCenter + m_Up*farHH - m_Right*farHW;
76 m_Corners.fb = fCenter + m_Up*farHH + m_Right*farHW;
77 m_Corners.fc = fCenter - m_Up*farHH - m_Right*farHW;
78 m_Corners.fd = fCenter - m_Up*farHH + m_Right*farHW;
79
80 //float yFac = tanf( math::radians(m_FOV) / 2 );
81 //float xFac = yFac*Config::GetInstance()->GetWindow().AspectRatio;
82 //vec3 nCenter = m_Position + m_Forward*m_NearPlane;
83 //vec3 fCenter = m_Position + m_Forward*m_FarPlane;
84 //vec3 nearHW = m_Right*m_FarPlane*xFac;
85 //vec3 nearHH = m_Up*m_FarPlane*yFac;
86 //vec3 farHW = m_Right*m_FarPlane*xFac;
87 //vec3 farHH = m_Up*m_FarPlane*yFac;
88
89 ////construct corners of the near plane in the culled objects world space
90 //m_Corners.na = nCenter + nearHH - nearHW;
91 //m_Corners.nb = nCenter + nearHH + nearHW;
92 //m_Corners.nc = nCenter - nearHH - nearHW;
93 //m_Corners.nd = nCenter - nearHH + nearHW;
94 ////construct corners of the far plane
95 //m_Corners.fa = fCenter + farHH - farHW;
96 //m_Corners.fb = fCenter + farHH + farHW;
97 //m_Corners.fc = fCenter - farHH - farHW;
98 //m_Corners.fd = fCenter - farHH + farHW;
99 m_Corners.Transform(m_CullInverse);
100
101 m_PositionObject = (m_CullInverse*vec4(m_Position, 0)).xyz;
102 m_RadInvFOV = 1 / math::radians(m_FOV);
103
104 //construct planes
105 m_Planes.clear();
106 //winding in an outside perspective so the cross product creates normals pointing inward
107 m_Planes.push_back(math::Plane(m_Corners.na, m_Corners.nb, m_Corners.nc));//Near
108 m_Planes.push_back(math::Plane(m_Corners.fb, m_Corners.fa, m_Corners.fd));//Far
109 m_Planes.push_back(math::Plane(m_Corners.fa, m_Corners.na, m_Corners.fc));//Left
110 m_Planes.push_back(math::Plane(m_Corners.nb, m_Corners.fb, m_Corners.nd));//Right

Callers 2

OnRenderMethod · 0.45
RecalculateDerivedMethod · 0.45

Calls 4

radiansFunction · 0.85
PlaneClass · 0.85
GetAspectRatioMethod · 0.80
TransformMethod · 0.80

Tested by

no test coverage detected