mirror of
https://github.com/GTAmodding/re3.git
synced 2021-02-19 17:49:54 +01:00
shadow fixes
This commit is contained in:
parent
4b614333c6
commit
90689a1717
@ -458,7 +458,7 @@ CShadows::StoreShadowForCar(CAutomobile *pCar)
|
||||
if ( CTimeCycle::GetShadowStrength() != 0 )
|
||||
{
|
||||
CVector CarPos = pCar->GetPosition();
|
||||
float fDistToCamSqr = (CarPos - TheCamera.GetPosition()).MagnitudeSqr();
|
||||
float fDistToCamSqr = (CarPos - TheCamera.GetPosition()).MagnitudeSqr2D();
|
||||
|
||||
if ( CCutsceneMgr::IsRunning() )
|
||||
fDistToCamSqr /= SQR(TheCamera.LODDistMultiplier) * 4.0f;
|
||||
@ -1578,40 +1578,41 @@ CStaticShadow::Free(void)
|
||||
|
||||
void
|
||||
CShadows::CalcPedShadowValues(CVector vecLightDir,
|
||||
float *pfDisplacementX, float *pfDisplacementY,
|
||||
float *pfFrontX, float *pfFrontY,
|
||||
float *pfSideX, float *pfSideY)
|
||||
float *pfSideX, float *pfSideY,
|
||||
float *pfDisplacementX, float *pfDisplacementY)
|
||||
{
|
||||
ASSERT(pfDisplacementX != NULL);
|
||||
ASSERT(pfDisplacementY != NULL);
|
||||
ASSERT(pfFrontX != NULL);
|
||||
ASSERT(pfFrontY != NULL);
|
||||
ASSERT(pfSideX != NULL);
|
||||
ASSERT(pfSideY != NULL);
|
||||
ASSERT(pfFrontX != nil);
|
||||
ASSERT(pfFrontY != nil);
|
||||
ASSERT(pfSideX != nil);
|
||||
ASSERT(pfSideY != nil);
|
||||
ASSERT(pfDisplacementX != nil);
|
||||
ASSERT(pfDisplacementY != nil);
|
||||
|
||||
*pfFrontX = -vecLightDir.x;
|
||||
*pfFrontY = -vecLightDir.y;
|
||||
|
||||
float fDist = Sqrt(*pfFrontY * *pfFrontY + *pfFrontX * *pfFrontX);
|
||||
float fMult = (fDist + 1.0f) / fDist;
|
||||
|
||||
*pfFrontX *= fMult;
|
||||
*pfFrontY *= fMult;
|
||||
|
||||
*pfSideX = -vecLightDir.y / fDist;
|
||||
*pfSideY = vecLightDir.x / fDist;
|
||||
|
||||
*pfDisplacementX = -vecLightDir.x;
|
||||
*pfDisplacementY = -vecLightDir.y;
|
||||
|
||||
float fDist = Sqrt(*pfDisplacementY * *pfDisplacementY + *pfDisplacementX * *pfDisplacementX);
|
||||
float fMult = (fDist + 1.0f) / fDist;
|
||||
|
||||
*pfDisplacementX *= fMult;
|
||||
*pfDisplacementY *= fMult;
|
||||
|
||||
*pfFrontX = -vecLightDir.y / fDist;
|
||||
*pfFrontY = vecLightDir.x / fDist;
|
||||
|
||||
*pfSideX = -vecLightDir.x;
|
||||
*pfSideY = -vecLightDir.y;
|
||||
|
||||
*pfDisplacementX /= 2;
|
||||
*pfDisplacementY /= 2;
|
||||
|
||||
*pfFrontX /= 2;
|
||||
*pfFrontY /= 2;
|
||||
|
||||
*pfSideX /= 2;
|
||||
*pfSideY /= 2;
|
||||
|
||||
*pfDisplacementX /= 2;
|
||||
*pfDisplacementY /= 2;
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
@ -1656,22 +1657,22 @@ CShadows::RenderExtraPlayerShadows(void)
|
||||
vecLight.y *= fInv;
|
||||
vecLight.z *= fInv;
|
||||
|
||||
float fDisplacementX, fDisplacementY, fFrontX, fFrontY, fSideX, fSideY;
|
||||
float fFrontX, fFrontY, fSideX, fSideY, fDisplacementX, fDisplacementY;
|
||||
|
||||
CalcPedShadowValues(vecLight,
|
||||
&fDisplacementX, &fDisplacementY,
|
||||
&fFrontX, &fFrontY,
|
||||
&fSideX, &fSideY);
|
||||
&fSideX, &fSideY,
|
||||
&fDisplacementX, &fDisplacementY);
|
||||
|
||||
CVector shadowPos = FindPlayerCoors();
|
||||
|
||||
shadowPos.x += fSideX;
|
||||
shadowPos.y += fSideY;
|
||||
shadowPos.x += fDisplacementX;
|
||||
shadowPos.y += fDisplacementY;
|
||||
|
||||
|
||||
StoreShadowToBeRendered(SHADOWTYPE_DARK, gpShadowPedTex, &shadowPos,
|
||||
fDisplacementX, fDisplacementY,
|
||||
fFrontX, fFrontY,
|
||||
fSideX, fSideY,
|
||||
nColorStrength, 0, 0, 0,
|
||||
4.0f, false, 1.0f);
|
||||
}
|
||||
@ -1768,7 +1769,7 @@ CShadows::RenderIndicatorShadow(uint32 nID, uint8 ShadowType, RwTexture *pTextur
|
||||
{
|
||||
ASSERT(pPosn != NULL);
|
||||
|
||||
C3dMarkers::PlaceMarkerSet(nID, _TODOCONST(4), *pPosn, Max(fFrontX, -fSideY),
|
||||
C3dMarkers::PlaceMarkerSet(nID, MARKERTYPE_CYLINDER, *pPosn, Max(fFrontX, -fSideY),
|
||||
0, 128, 255, 128,
|
||||
2048, 0.2f, 0);
|
||||
}
|
||||
|
@ -128,21 +128,12 @@ class CPed;
|
||||
class CShadows
|
||||
{
|
||||
public:
|
||||
#if 1
|
||||
static int16 ShadowsStoredToBeRendered;
|
||||
static CStoredShadow asShadowsStored [MAX_STOREDSHADOWS];
|
||||
static CPolyBunch aPolyBunches [MAX_POLYBUNCHES];
|
||||
static CStaticShadow aStaticShadows [MAX_STATICSHADOWS];
|
||||
static CPolyBunch *pEmptyBunchList;
|
||||
static CPermanentShadow aPermanentShadows[MAX_PERMAMENTSHADOWS];
|
||||
#else
|
||||
static int16 &ShadowsStoredToBeRendered;
|
||||
static CStoredShadow (&asShadowsStored) [MAX_STOREDSHADOWS];
|
||||
static CPolyBunch (&aPolyBunches) [MAX_POLYBUNCHES];
|
||||
static CStaticShadow (&aStaticShadows) [MAX_STATICSHADOWS];
|
||||
static CPolyBunch *&pEmptyBunchList;
|
||||
static CPermanentShadow (&aPermanentShadows)[MAX_PERMAMENTSHADOWS];
|
||||
#endif
|
||||
|
||||
static void Init (void);
|
||||
static void Shutdown (void);
|
||||
@ -166,7 +157,7 @@ public:
|
||||
CVector *pPosn, float fFrontX, float fFrontY, float fSideX, float fSideY, int16 nIntensity, uint8 nRed, uint8 nGreen, uint8 nBlue, float fZDistance, float fScale, CPolyBunch **ppPolyBunch);
|
||||
static void UpdateStaticShadows (void);
|
||||
static void UpdatePermanentShadows (void);
|
||||
static void CalcPedShadowValues (CVector vecLightDir, float *pfDisplacementX, float *pfDisplacementY, float *pfFrontX, float *pfFrontY, float *pfSideX, float *pfSideY);
|
||||
static void CalcPedShadowValues (CVector vecLightDir, float *pfFrontX, float *pfFrontY, float *pfSideX, float *pfSideY, float *pfDisplacementX, float *pfDisplacementY);
|
||||
static void RenderExtraPlayerShadows (void);
|
||||
static void TidyUpShadows (void);
|
||||
static void RenderIndicatorShadow (uint32 nID, uint8 ShadowType, RwTexture *pTexture, CVector *pPosn, float fFrontX, float fFrontY, float fSideX, float fSideY, int16 nIntensity);
|
||||
|
Loading…
Reference in New Issue
Block a user