/*-------------------------- set rendering target data C.Wang 0522, 2006 ---------------------------*/ void FuCShadowModify::SetRenderTarget(int w, float *bgColor) { FnScene scene; FnWorld gw; FnViewport vp; char shadowName[256]; scene.Object(mHost); gw.Object(scene.GetWorld()); gw.DeleteMaterial(mRenderTarget); gw.DeleteViewport(mViewport); // create the viewport with the associated size mViewport = gw.CreateViewport(0, 0, w, w); // create the render target material mRenderTarget = gw.CreateMaterial(NULL, NULL, NULL, 1.0f, NULL); // generate a unique shadow texture name sprintf(shadowName, "shadow%d", mRenderTarget); FnMaterial mat; mat.Object(mRenderTarget); mat.AddRenderTargetTexture(0, 0, shadowName, TEXTURE_32, mViewport); mat.SetTextureAddressMode(0, CLAMP_TEXTURE); // set render target vp.Object(mViewport); vp.SetRenderTarget(mRenderTarget, 0, 0, 0); vp.SetBackgroundColor(bgColor[0], bgColor[1], bgColor[2]); }
/*------------------------------------ destructor of classic shadow object C.Wang 0522, 2006 -------------------------------------*/ FuCShadowModify::~FuCShadowModify() { // delete the associated camera FnScene scene; FnWorld gw; scene.Object(mHost); gw.Object(scene.GetWorld()); gw.DeleteViewport(mViewport); mViewport = FAILED_ID; gw.DeleteMaterial(mShadowMat); mShadowMat = FAILED_MATERIAL_ID; gw.DeleteMaterial(mRenderTarget); mRenderTarget = FAILED_MATERIAL_ID; scene.DeleteCamera( m_lightCam.Object() ); m_lightCam.Object( FAILED_ID ); scene.DeleteObject(mSeed); mSeed = FAILED_ID; }
/*------------------------------- create the material for shadow C.Wang 0522, 2006 --------------------------------*/ void FuCShadowModify::CreateShadowMaterial(float *color) { FnWorld gw; FnScene scene; scene.Object(mHost); gw.Object(scene.GetWorld()); if (mShadowMat != FAILED_MATERIAL_ID) { gw.DeleteMaterial(mShadowMat); } // create the material float blackColor[3]; blackColor[0] = blackColor[1] = blackColor[2] = 0.0f; mShadowMat = gw.CreateMaterial(blackColor, blackColor, blackColor, 1.0f, color); }