void Renderer::Draw ( const SceneNode* node ) { // Set the lights for this node. for ( int i = 0; i < node->LightCount (); i++ ) { ApplyLighting ( node->GetLight ( i ) ); } // Execute pre-drawing effects setup. for ( int i = 0; i < node->EffectCount (); i++ ) { SetupEffect ( node->GetEffect ( i ) ); } // Draw any mesh associated with this node. if ( node->IsDerived ( Mesh::GetRTTI () ) ) { Mesh* mesh = (Mesh*) node; Draw ( mesh ); } // Draw this node's children (if the child is a SceneNode). for ( int i = 0; i < node->ChildCount (); i++ ) { if ( node->GetChild ( i )->IsDerived ( SceneNode::GetRTTI () ) ) { SceneNode* child = (SceneNode*) node->GetChild ( i ); Draw ( child ); } } }
// Initialize scene bool CEffectViewerScene::Init () { if (m_bInited) return true; glewInit(); m_pRenderer = GetRenderer(); m_pRenderer->SetViewport(m_ResX, m_ResY, 4.0f, 4500.0f, 0.67f); m_pResourceMgr = GetResourceMgr(); m_pSg = GetSceneGraph(); m_pCamera = m_pRenderer->GetCamera(); m_pActorMgr = GetActorManager(); UpdateCamera(); OGVec3 vLightDir = OGVec3(0,1,0); OGVec4 vLightColor = OGVec4(1,1,1,1); IOGLight* pMainLight = m_pRenderer->GetLightMgr()->CreateLight(); pMainLight->type = OG_LIGHT_DIRECTIONAL; pMainLight->vPosition = vLightDir; pMainLight->fIntensity = 100.0f; pMainLight->vAmbientColor = OGVec4(vLightColor.x, vLightColor.y, vLightColor.z, 1.0f); pMainLight->vDiffuseColor = OGVec4(vLightColor.x, vLightColor.y, vLightColor.z, 1.0f); pMainLight->vSpecularColor = OGVec4(vLightColor.x, vLightColor.y, vLightColor.z, 1.0f); glDisable(GL_CULL_FACE); glEnable(GL_NORMALIZE); if (m_pResourceMgr->Load(OG_RESPOOL_GAME) == false) { return false; } if (GetActorParamsMgr()->Init() == false) { return false; } const std::map<std::string, EffectItem>& effects = GetEffectsManager()->GetEffectsList(); std::map<std::string, EffectItem>::const_iterator iter = effects.begin(); for (; iter != effects.end(); ++iter) { CommonToolEvent<ResLoadEventData> cmd(EVENTID_RESLOAD); cmd.SetEventCustomData(ResLoadEventData(wxT(iter->first.c_str()), wxT("Effects"), wxT(""))); GetEventHandlersTable()->FireEvent(EVENTID_RESLOAD, &cmd); } SetupEffect(NULL); m_bInited = true; return true; }
/* ============== sdRainPrecipitation::sdRainPrecipitation ============== */ sdRainPrecipitation::sdRainPrecipitation( sdPrecipitationParameters const &_parms ) : parms( _parms ) { renderEntityHandle = -1; memset( &renderEntity, 0, sizeof( renderEntity ) ); renderEntity.hModel = parms.model; renderEntity.numInsts = 9; renderEntity.insts = new sdInstInfo[ renderEntity.numInsts ]; renderEntity.axis.Identity(); renderEntity.origin.Zero(); SetupEffect(); }
/* ============== sdSnowPrecipitation::sdSnowPrecipitation ============== */ sdSnowPrecipitation::sdSnowPrecipitation( sdPrecipitationParameters const &_parms ) : parms(_parms) { renderEntity_t *re = GetRenderEntity(); renderEntityHandle = -1; memset( re, 0, sizeof( renderEntity ) ); re->hModel = parms.model; re->axis.Identity(); re->origin.Zero(); re->numInsts = MAX_GROUPS; re->insts = new sdInstInfo[ re->numInsts ]; idBounds modelbb = re->hModel->Bounds(); idVec3 extents = (modelbb.GetMaxs() - modelbb.GetMins()) * 0.5f; idPlayer *p = gameLocal.GetLocalViewPlayer(); idVec3 const &v = p->GetViewPos(); for (int i=0; i<MAX_GROUPS; i++) { groups[i].time = -1.f; } SetupEffect(); }
CEffectViewerScene::~CEffectViewerScene() { SetupEffect(NULL); }