mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-26 06:45:36 +00:00
Merge pull request #910 from Winterleaf/StaticShapeAlphaLod
Added distance fading to TSStatic objects.
This commit is contained in:
commit
e0436efc21
2 changed files with 82 additions and 0 deletions
|
|
@ -111,6 +111,11 @@ TSStatic::TSStatic()
|
||||||
mMeshCulling = false;
|
mMeshCulling = false;
|
||||||
mUseOriginSort = false;
|
mUseOriginSort = false;
|
||||||
|
|
||||||
|
mUseAlphaFade = false;
|
||||||
|
mAlphaFadeStart = 100.0f;
|
||||||
|
mAlphaFadeEnd = 150.0f;
|
||||||
|
mInvertAlphaFade = false;
|
||||||
|
mAlphaFade = 1.0f;
|
||||||
mPhysicsRep = NULL;
|
mPhysicsRep = NULL;
|
||||||
|
|
||||||
mCollisionType = CollisionMesh;
|
mCollisionType = CollisionMesh;
|
||||||
|
|
@ -192,6 +197,13 @@ void TSStatic::initPersistFields()
|
||||||
|
|
||||||
endGroup("Collision");
|
endGroup("Collision");
|
||||||
|
|
||||||
|
addGroup( "AlphaFade" );
|
||||||
|
addField( "Alpha Fade Enable", TypeBool, Offset(mUseAlphaFade, TSStatic), "Turn on/off Alpha Fade" );
|
||||||
|
addField( "Alpha Fade Start", TypeF32, Offset(mAlphaFadeStart, TSStatic), "Distance of start Alpha Fade" );
|
||||||
|
addField( "Alpha Fade End", TypeF32, Offset(mAlphaFadeEnd, TSStatic), "Distance of end Alpha Fade" );
|
||||||
|
addField( "Alpha Fade Inverse", TypeBool, Offset(mInvertAlphaFade, TSStatic), "Invert Alpha Fade's Start & End Distance" );
|
||||||
|
endGroup( "AlphaFade" );
|
||||||
|
|
||||||
addGroup("Debug");
|
addGroup("Debug");
|
||||||
|
|
||||||
addField( "renderNormals", TypeF32, Offset( mRenderNormalScalar, TSStatic ),
|
addField( "renderNormals", TypeF32, Offset( mRenderNormalScalar, TSStatic ),
|
||||||
|
|
@ -502,6 +514,36 @@ void TSStatic::prepRenderImage( SceneRenderState* state )
|
||||||
if (dist < 0.01f)
|
if (dist < 0.01f)
|
||||||
dist = 0.01f;
|
dist = 0.01f;
|
||||||
|
|
||||||
|
if (mUseAlphaFade)
|
||||||
|
{
|
||||||
|
mAlphaFade = 1.0f;
|
||||||
|
if ((mAlphaFadeStart < mAlphaFadeEnd) && mAlphaFadeStart > 0.1f)
|
||||||
|
{
|
||||||
|
if (mInvertAlphaFade)
|
||||||
|
{
|
||||||
|
if (dist <= mAlphaFadeStart)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (dist < mAlphaFadeEnd)
|
||||||
|
{
|
||||||
|
mAlphaFade = ((dist - mAlphaFadeStart) / (mAlphaFadeEnd - mAlphaFadeStart));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (dist >= mAlphaFadeEnd)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (dist > mAlphaFadeStart)
|
||||||
|
{
|
||||||
|
mAlphaFade -= ((dist - mAlphaFadeStart) / (mAlphaFadeEnd - mAlphaFadeStart));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
F32 invScale = (1.0f/getMax(getMax(mObjScale.x,mObjScale.y),mObjScale.z));
|
F32 invScale = (1.0f/getMax(getMax(mObjScale.x,mObjScale.y),mObjScale.z));
|
||||||
|
|
||||||
if ( mForceDetail == -1 )
|
if ( mForceDetail == -1 )
|
||||||
|
|
@ -545,6 +587,19 @@ void TSStatic::prepRenderImage( SceneRenderState* state )
|
||||||
GFX->setWorldMatrix( mat );
|
GFX->setWorldMatrix( mat );
|
||||||
|
|
||||||
mShapeInstance->animate();
|
mShapeInstance->animate();
|
||||||
|
if(mShapeInstance)
|
||||||
|
{
|
||||||
|
if (mUseAlphaFade)
|
||||||
|
{
|
||||||
|
mShapeInstance->setAlphaAlways(mAlphaFade);
|
||||||
|
S32 s = mShapeInstance->mMeshObjects.size();
|
||||||
|
|
||||||
|
for(S32 x = 0; x < s; x++)
|
||||||
|
{
|
||||||
|
mShapeInstance->mMeshObjects[x].visible = mAlphaFade;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
mShapeInstance->render( rdata );
|
mShapeInstance->render( rdata );
|
||||||
|
|
||||||
if ( mRenderNormalScalar > 0 )
|
if ( mRenderNormalScalar > 0 )
|
||||||
|
|
@ -625,6 +680,13 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream)
|
||||||
|
|
||||||
stream->writeFlag( mPlayAmbient );
|
stream->writeFlag( mPlayAmbient );
|
||||||
|
|
||||||
|
if ( stream->writeFlag(mUseAlphaFade) )
|
||||||
|
{
|
||||||
|
stream->write(mAlphaFadeStart);
|
||||||
|
stream->write(mAlphaFadeEnd);
|
||||||
|
stream->write(mInvertAlphaFade);
|
||||||
|
}
|
||||||
|
|
||||||
if ( mLightPlugin )
|
if ( mLightPlugin )
|
||||||
retMask |= mLightPlugin->packUpdate(this, AdvancedStaticOptionsMask, con, mask, stream);
|
retMask |= mLightPlugin->packUpdate(this, AdvancedStaticOptionsMask, con, mask, stream);
|
||||||
|
|
||||||
|
|
@ -682,6 +744,14 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream)
|
||||||
|
|
||||||
mPlayAmbient = stream->readFlag();
|
mPlayAmbient = stream->readFlag();
|
||||||
|
|
||||||
|
mUseAlphaFade = stream->readFlag();
|
||||||
|
if (mUseAlphaFade)
|
||||||
|
{
|
||||||
|
stream->read(&mAlphaFadeStart);
|
||||||
|
stream->read(&mAlphaFadeEnd);
|
||||||
|
stream->read(&mInvertAlphaFade);
|
||||||
|
}
|
||||||
|
|
||||||
if ( mLightPlugin )
|
if ( mLightPlugin )
|
||||||
{
|
{
|
||||||
mLightPlugin->unpackUpdate(this, con, stream);
|
mLightPlugin->unpackUpdate(this, con, stream);
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,13 @@ class TSStatic : public SceneObject
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void setAlphaFade(bool enable, F32 start, F32 end, bool inverse)
|
||||||
|
{
|
||||||
|
mUseAlphaFade = enable;
|
||||||
|
mAlphaFadeStart = start;
|
||||||
|
mAlphaFadeEnd = end;
|
||||||
|
mInvertAlphaFade = inverse;
|
||||||
|
}
|
||||||
|
|
||||||
/// The different types of mesh data types
|
/// The different types of mesh data types
|
||||||
enum MeshType
|
enum MeshType
|
||||||
|
|
@ -108,6 +115,11 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool mUseAlphaFade;
|
||||||
|
F32 mAlphaFadeStart;
|
||||||
|
F32 mAlphaFadeEnd;
|
||||||
|
F32 mAlphaFade;
|
||||||
|
bool mInvertAlphaFade;
|
||||||
|
|
||||||
bool onAdd();
|
bool onAdd();
|
||||||
void onRemove();
|
void onRemove();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue