mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 05:07:43 +00:00
Various rendering fixes
This commit is contained in:
@@ -63,27 +63,17 @@ void CGraphics::SetAmbientColor(const zeus::CColor& col) {
|
||||
|
||||
void CGraphics::SetFog(ERglFogMode mode, float startz, float endz, const zeus::CColor& color) {
|
||||
g_Fog.m_mode = mode > ERglFogMode::PerspRevExp2 ? ERglFogMode(int(mode) - 8) : mode;
|
||||
switch (g_Fog.m_mode) {
|
||||
case ERglFogMode::None: {
|
||||
g_Fog.m_start = 4096.f;
|
||||
g_Fog.m_rangeScale = 0.f;
|
||||
break;
|
||||
}
|
||||
case ERglFogMode::PerspRevExp:
|
||||
case ERglFogMode::PerspRevExp2: {
|
||||
float userRange = endz - startz;
|
||||
g_Fog.m_color = color;
|
||||
g_Fog.m_start = endz;
|
||||
g_Fog.m_rangeScale = 1.f / userRange;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
float userRange = endz - startz;
|
||||
g_Fog.m_color = color;
|
||||
g_Fog.m_start = startz;
|
||||
g_Fog.m_rangeScale = 1.f / userRange;
|
||||
break;
|
||||
}
|
||||
g_Fog.m_color = color;
|
||||
if (CGraphics::g_Proj.x18_far == CGraphics::g_Proj.x14_near || endz == startz) {
|
||||
g_Fog.m_A = 0.f;
|
||||
g_Fog.m_B = 0.5f;
|
||||
g_Fog.m_C = 0.f;
|
||||
} else {
|
||||
float depthrange = CGraphics::g_Proj.x18_far - CGraphics::g_Proj.x14_near;
|
||||
float fogrange = endz - startz;
|
||||
g_Fog.m_A = (CGraphics::g_Proj.x18_far * CGraphics::g_Proj.x14_near) / (depthrange * fogrange);
|
||||
g_Fog.m_B = CGraphics::g_Proj.x18_far / depthrange;
|
||||
g_Fog.m_C = startz / fogrange;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user