示例#1
0
 // -----------------------------------------------------------------------------------------------
 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 );
 }
示例#2
0
    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);
            }
        }
    }