mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-14 21:37:52 -07:00
VideoSoftware: Implement fog range adjustment, fixing issue 6147.
This commit is contained in:
parent
d4fadf4b6f
commit
ae146e8bc7
@ -686,6 +686,8 @@ union FogRangeKElement
|
|||||||
u32 LO : 12;
|
u32 LO : 12;
|
||||||
u32 regid : 8;
|
u32 regid : 8;
|
||||||
};
|
};
|
||||||
|
// TODO: Which scaling coefficient should we use here? This is just a guess!
|
||||||
|
float GetValue(int i) { return (i ? HI : LO) / 32.f; }
|
||||||
u32 HEX;
|
u32 HEX;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -748,10 +748,15 @@ void Tev::Draw()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// stuff to do!
|
if(bpmem.fogRange.Base.Enabled)
|
||||||
// here, where we'll have to add/handle x range adjustment (if related BP register it's enabled)
|
{
|
||||||
// x_adjust = sqrt((x-center)^2 + k^2)/k
|
// TODO: Check if this is correct (especially the magic values)
|
||||||
// ze *= x_adjust
|
float offset = Position[0] - bpmem.fogRange.Base.Center + 324.f;
|
||||||
|
int index = 9 - abs(Position[0] - bpmem.fogRange.Base.Center + 324) / (162/5);
|
||||||
|
float k = bpmem.fogRange.K[index/2].GetValue(index%2);
|
||||||
|
float x_adjust = sqrt(offset*offset/162.f/162.f + k*k)/k;
|
||||||
|
ze *= x_adjust;
|
||||||
|
}
|
||||||
|
|
||||||
ze -= bpmem.fog.c_proj_fsel.GetC();
|
ze -= bpmem.fog.c_proj_fsel.GetC();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user