// ----------------------------------------------------------------------------------------------- void GameObject::SetupRenderable(RenderableNode* r, RenderContext* /*context*/) { r->objectId = GetInstanceId(); r->bounds = m_bounds; r->WorldXform = m_world; r->SetFlag( RenderableNode::kShadowCaster, GetCastsShadows() ); r->SetFlag( RenderableNode::kShadowReceiver, GetReceivesShadows() ); LightingState::Inst()->UpdateLightEnvironment( *r ); }
void Locator::BuildRenderables() { m_renderables.clear(); Model* model = NULL; assert(m_resource); model = (Model*)m_resource->GetTarget(); assert(model && model->IsReady()); const NodeDict& nodes = model->Nodes(); for(auto nodeIt = nodes.begin(); nodeIt != nodes.end(); ++nodeIt) { Node* node = nodeIt->second; assert(m_modelTransforms.size() >= node->index); const Matrix& world = m_modelTransforms[node->index]; // transform array holds world matricies already, not local for(auto geoIt = node->geometries.begin(); geoIt != node->geometries.end(); ++geoIt) { Geometry* geo = (*geoIt); Material * mat = geo->material; RenderableNode renderNode; renderNode.mesh = geo->mesh; renderNode.WorldXform = world; renderNode.bounds = geo->mesh->bounds; renderNode.bounds.Transform(renderNode.WorldXform); renderNode.objectId = GetInstanceId(); renderNode.diffuse = mat->diffuse; renderNode.specular = mat->specular.xyz(); renderNode.specPower = mat->power; renderNode.SetFlag( RenderableNode::kShadowCaster, GetCastsShadows() ); renderNode.SetFlag( RenderableNode::kShadowReceiver, GetReceivesShadows() ); LightingState::Inst()->UpdateLightEnvironment(renderNode); for(unsigned int i = TextureType::MIN; i < TextureType::MAX; ++i) { renderNode.textures[i] = geo->material->textures[i]; } m_renderables.push_back(renderNode); } } }