mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-14 16:14:38 +00:00
Merge pull request #721 from Azaezel/CubemapCleanup
deprecated functionality. T3D handles this in the reflector class.
This commit is contained in:
commit
561e26ea07
2 changed files with 16 additions and 160 deletions
|
|
@ -39,14 +39,6 @@ IMPLEMENT_CONOBJECT( CubemapData );
|
||||||
CubemapData::CubemapData()
|
CubemapData::CubemapData()
|
||||||
{
|
{
|
||||||
mCubemap = NULL;
|
mCubemap = NULL;
|
||||||
mDynamic = false;
|
|
||||||
mDynamicSize = 512;
|
|
||||||
mDynamicNearDist = 0.1f;
|
|
||||||
mDynamicFarDist = 100.0f;
|
|
||||||
mDynamicObjectTypeMask = 0;
|
|
||||||
#ifdef INIT_HACK
|
|
||||||
mInit = false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CubemapData::~CubemapData()
|
CubemapData::~CubemapData()
|
||||||
|
|
@ -84,22 +76,6 @@ void CubemapData::initPersistFields()
|
||||||
" - cubeFace[3] is +Z\n"
|
" - cubeFace[3] is +Z\n"
|
||||||
" - cubeFace[4] is -Y\n"
|
" - cubeFace[4] is -Y\n"
|
||||||
" - cubeFace[5] is +Y\n" );
|
" - cubeFace[5] is +Y\n" );
|
||||||
|
|
||||||
addField("dynamic", TypeBool, Offset(mDynamic, CubemapData),
|
|
||||||
"Set to true if this is a dynamic cubemap. The default is false." );
|
|
||||||
|
|
||||||
addField("dynamicSize", TypeS32, Offset(mDynamicSize, CubemapData),
|
|
||||||
"The size of each dynamic cubemap face in pixels." );
|
|
||||||
|
|
||||||
addField("dynamicNearDist", TypeF32, Offset(mDynamicNearDist, CubemapData),
|
|
||||||
"The near clip distance used when rendering to the dynamic cubemap." );
|
|
||||||
|
|
||||||
addField("dynamicFarDist", TypeF32, Offset(mDynamicFarDist, CubemapData),
|
|
||||||
"The far clip distance used when rendering to the dynamic cubemap." );
|
|
||||||
|
|
||||||
addField("dynamicObjectTypeMask", TypeS32, Offset(mDynamicObjectTypeMask, CubemapData),
|
|
||||||
"The typemask used to filter the objects rendered to the dynamic cubemap." );
|
|
||||||
|
|
||||||
Parent::initPersistFields();
|
Parent::initPersistFields();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -118,136 +94,27 @@ void CubemapData::createMap()
|
||||||
{
|
{
|
||||||
if( !mCubemap )
|
if( !mCubemap )
|
||||||
{
|
{
|
||||||
if( mDynamic )
|
bool initSuccess = true;
|
||||||
{
|
|
||||||
mCubemap = GFX->createCubemap();
|
|
||||||
mCubemap->initDynamic( mDynamicSize );
|
|
||||||
mDepthBuff = GFXTexHandle( mDynamicSize, mDynamicSize, GFXFormatD24S8,
|
|
||||||
&GFXDefaultZTargetProfile, avar("%s() - mDepthBuff (line %d)", __FUNCTION__, __LINE__));
|
|
||||||
mRenderTarget = GFX->allocRenderToTextureTarget();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bool initSuccess = true;
|
|
||||||
|
|
||||||
for( U32 i=0; i<6; i++ )
|
for( U32 i=0; i<6; i++ )
|
||||||
{
|
{
|
||||||
if( !mCubeFaceFile[i].isEmpty() )
|
if( !mCubeFaceFile[i].isEmpty() )
|
||||||
{
|
{
|
||||||
if(!mCubeFace[i].set(mCubeFaceFile[i], &GFXDefaultStaticDiffuseProfile, avar("%s() - mCubeFace[%d] (line %d)", __FUNCTION__, i, __LINE__) ))
|
if(!mCubeFace[i].set(mCubeFaceFile[i], &GFXDefaultStaticDiffuseProfile, avar("%s() - mCubeFace[%d] (line %d)", __FUNCTION__, i, __LINE__) ))
|
||||||
{
|
{
|
||||||
Con::errorf("CubemapData::createMap - Failed to load texture '%s'", mCubeFaceFile[i].c_str());
|
Con::errorf("CubemapData::createMap - Failed to load texture '%s'", mCubeFaceFile[i].c_str());
|
||||||
initSuccess = false;
|
initSuccess = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if( initSuccess )
|
||||||
if( initSuccess )
|
{
|
||||||
{
|
mCubemap = GFX->createCubemap();
|
||||||
mCubemap = GFX->createCubemap();
|
mCubemap->initStatic( mCubeFace );
|
||||||
mCubemap->initStatic( mCubeFace );
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CubemapData::updateDynamic(SceneManager* sm, const Point3F& pos)
|
|
||||||
{
|
|
||||||
AssertFatal(mDynamic, "This is not a dynamic cubemap!");
|
|
||||||
|
|
||||||
GFXDEBUGEVENT_SCOPE( CubemapData_updateDynamic, ColorI::WHITE );
|
|
||||||
|
|
||||||
#ifdef INIT_HACK
|
|
||||||
if( mInit ) return;
|
|
||||||
mInit = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GFX->pushActiveRenderTarget();
|
|
||||||
mRenderTarget->attachTexture(GFXTextureTarget::DepthStencil, mDepthBuff );
|
|
||||||
|
|
||||||
// store current matrices
|
|
||||||
GFXTransformSaver saver;
|
|
||||||
F32 oldVisibleDist = sm->getVisibleDistance();
|
|
||||||
|
|
||||||
// set projection to 90 degrees vertical and horizontal
|
|
||||||
{
|
|
||||||
F32 left, right, top, bottom;
|
|
||||||
MathUtils::makeFrustum( &left, &right, &top, &bottom, M_HALFPI_F, 1.0f, mDynamicNearDist );
|
|
||||||
GFX->setFrustum( left, right, bottom, top, mDynamicNearDist, mDynamicFarDist );
|
|
||||||
}
|
|
||||||
sm->setVisibleDistance(mDynamicFarDist);
|
|
||||||
|
|
||||||
// We don't use a special clipping projection, but still need to initialize
|
|
||||||
// this for objects like SkyBox which will use it during a reflect pass.
|
|
||||||
gClientSceneGraph->setNonClipProjection( (MatrixF&) GFX->getProjectionMatrix() );
|
|
||||||
|
|
||||||
// Loop through the six faces of the cube map.
|
|
||||||
for(U32 i=0; i<6; i++)
|
|
||||||
{
|
|
||||||
// Standard view that will be overridden below.
|
|
||||||
VectorF vLookatPt(0.0f, 0.0f, 0.0f), vUpVec(0.0f, 0.0f, 0.0f), vRight(0.0f, 0.0f, 0.0f);
|
|
||||||
|
|
||||||
switch( i )
|
|
||||||
{
|
|
||||||
case 0 : // D3DCUBEMAP_FACE_POSITIVE_X:
|
|
||||||
vLookatPt = VectorF( 1.0f, 0.0f, 0.0f );
|
|
||||||
vUpVec = VectorF( 0.0f, 1.0f, 0.0f );
|
|
||||||
break;
|
|
||||||
case 1 : // D3DCUBEMAP_FACE_NEGATIVE_X:
|
|
||||||
vLookatPt = VectorF( -1.0f, 0.0f, 0.0f );
|
|
||||||
vUpVec = VectorF( 0.0f, 1.0f, 0.0f );
|
|
||||||
break;
|
|
||||||
case 2 : // D3DCUBEMAP_FACE_POSITIVE_Y:
|
|
||||||
vLookatPt = VectorF( 0.0f, 1.0f, 0.0f );
|
|
||||||
vUpVec = VectorF( 0.0f, 0.0f,-1.0f );
|
|
||||||
break;
|
|
||||||
case 3 : // D3DCUBEMAP_FACE_NEGATIVE_Y:
|
|
||||||
vLookatPt = VectorF( 0.0f, -1.0f, 0.0f );
|
|
||||||
vUpVec = VectorF( 0.0f, 0.0f, 1.0f );
|
|
||||||
break;
|
|
||||||
case 4 : // D3DCUBEMAP_FACE_POSITIVE_Z:
|
|
||||||
vLookatPt = VectorF( 0.0f, 0.0f, 1.0f );
|
|
||||||
vUpVec = VectorF( 0.0f, 1.0f, 0.0f );
|
|
||||||
break;
|
|
||||||
case 5: // D3DCUBEMAP_FACE_NEGATIVE_Z:
|
|
||||||
vLookatPt = VectorF( 0.0f, 0.0f, -1.0f );
|
|
||||||
vUpVec = VectorF( 0.0f, 1.0f, 0.0f );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// create camera matrix
|
|
||||||
VectorF cross = mCross( vUpVec, vLookatPt );
|
|
||||||
cross.normalizeSafe();
|
|
||||||
|
|
||||||
MatrixF matView(true);
|
|
||||||
matView.setColumn( 0, cross );
|
|
||||||
matView.setColumn( 1, vLookatPt );
|
|
||||||
matView.setColumn( 2, vUpVec );
|
|
||||||
matView.setPosition( pos );
|
|
||||||
matView.inverse();
|
|
||||||
|
|
||||||
GFX->pushWorldMatrix();
|
|
||||||
GFX->setWorldMatrix(matView);
|
|
||||||
|
|
||||||
mRenderTarget->attachTexture( GFXTextureTarget::Color0, mCubemap, i );
|
|
||||||
GFX->setActiveRenderTarget( mRenderTarget );
|
|
||||||
GFX->clear( GFXClearStencil | GFXClearTarget | GFXClearZBuffer, ColorI( 64, 64, 64 ), 1.f, 0 );
|
|
||||||
|
|
||||||
// render scene
|
|
||||||
sm->renderScene( SPT_Reflect, mDynamicObjectTypeMask );
|
|
||||||
|
|
||||||
// Resolve render target for each face
|
|
||||||
mRenderTarget->resolve();
|
|
||||||
GFX->popWorldMatrix();
|
|
||||||
}
|
|
||||||
|
|
||||||
// restore render surface and depth buffer
|
|
||||||
GFX->popActiveRenderTarget();
|
|
||||||
|
|
||||||
mRenderTarget->attachTexture(GFXTextureTarget::Color0, NULL);
|
|
||||||
sm->setVisibleDistance(oldVisibleDist);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CubemapData::updateFaces()
|
void CubemapData::updateFaces()
|
||||||
{
|
{
|
||||||
bool initSuccess = true;
|
bool initSuccess = true;
|
||||||
|
|
|
||||||
|
|
@ -60,17 +60,9 @@ public:
|
||||||
// Force creation of cubemap
|
// Force creation of cubemap
|
||||||
void createMap();
|
void createMap();
|
||||||
|
|
||||||
// Update a dynamic cubemap @ pos
|
// Update a static cubemap @ pos
|
||||||
void updateDynamic(SceneManager* sm, const Point3F& pos);
|
|
||||||
void updateFaces();
|
void updateFaces();
|
||||||
|
|
||||||
// Dynamic cube map support
|
|
||||||
bool mDynamic;
|
|
||||||
U32 mDynamicSize;
|
|
||||||
F32 mDynamicNearDist;
|
|
||||||
F32 mDynamicFarDist;
|
|
||||||
U32 mDynamicObjectTypeMask;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
FileName mCubeFaceFile[6];
|
FileName mCubeFaceFile[6];
|
||||||
|
|
@ -78,9 +70,6 @@ protected:
|
||||||
|
|
||||||
GFXTexHandle mDepthBuff;
|
GFXTexHandle mDepthBuff;
|
||||||
GFXTextureTargetRef mRenderTarget;
|
GFXTextureTargetRef mRenderTarget;
|
||||||
#ifdef INIT_HACK
|
|
||||||
bool mInit;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CUBEMAPDATA
|
#endif // CUBEMAPDATA
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue