void SetAlpha(float alpha){ Vec4 param = mMaterial->GetMaterialParameter(3); mAlpha = param.w = alpha; mMaterial->SetMaterialParameter(3, param); mMaterialParamDest[3].w = alpha; mMaterialParamDest[2].w = alpha; }
// IRenderable void PreRender(const RenderParam& param, RenderParamOut* paramOut){ if (mSelf->HasObjFlag(SceneObjectFlag::Hide)) return; if (mLastPreRendered == gpTimer->GetFrame()) return; mLastPreRendered = gpTimer->GetFrame(); if (mBlendingSkySphere && mBlendingSkySphere->GetAlpha() == 1.0f){ mBlendingSkySphere->PreRender(param, paramOut); return; } if (mInterpolating) { mCurInterpolationTime += gpTimer->GetDeltaTime(); float normTime = mCurInterpolationTime / mInterpolationTime; if (normTime >= 1.0f) { normTime = 1.0f; mInterpolating = false; if (!mUseAlphaBlend) { SceneObjectFactory::GetInstance().UpdateEnvMapInNextFrame(mSelfPtr.lock()); } } for (int i = 0; i < 5; i++) { mMaterial->SetMaterialParameter(i, Lerp(mMaterialParamCur[i], mMaterialParamDest[i], normTime)); if (mMaterialOCC) { mMaterialOCC->SetMaterialParameter(i, Lerp(mMaterialParamCur[i], mMaterialParamDest[i], normTime)); } } } if (mBlendingSkySphere && mBlendingSkySphere->GetAlpha() != 0.f){ mBlendingSkySphere->PreRender(param, paramOut); } }