Hi Matthias,

something like this should to the trick ...
mat is the material from a MaterialGroup oder Geometry node.

ChunkMaterialPtr cmat = ChunkMaterialPtr::dcast(mat);
if(cmat != NullFC)
{
     MaterialChunkPtr matc = cmat->find(MaterialChunk::getClassType());
     if(matc != NullFC)
     {
         beginEditCP(matc);
             matc->setEmission(Color4f(1.0f, 0.0f, 0.0f, 1.0f));
         endEditCP(matc);
     }
}

Andreas

> Hi,
> 
> (sorry for the incomplete first mail)
> 
> I am trying to change the material of some nodes I imported from VRML.
> 
> I found the following post (plus Dirk's answer) in the mailing list
> archives.
> 
> 
>>Dirk Reiners
>>Thu, 27 Oct 2005 17:36:41 -0700
>>
>>
>>On Fri, 2005-09-30 at 18:59 +0200, Daniele Pagliani wrote:
>>
>>>
>>>Hi,
>>>
>>>I need to load a vrml model and add to it a materialchunk. How can do
>>>that? I’m looking for material group nodes, than I try ti get the
>>>material node and than add a chunk to it, but I cannot understand what
>>>methods I have to use. Anybody can help me?
>>
>>This is what I use:
>>
>>
>>class ChunkAdder
>>{
>>  public:
>>
>>    ChunkAdder(StateChunkPtr chunk) : _chunk(chunk)
>>    {}
>>
>>    Action::ResultE enter(NodePtr& node)
>>    {
>>        MaterialGroupPtr mg =
> 
> MaterialGroupPtr::dcast(node->getCore());
> 
>>        if(mg != NullFC)
>>            doAdd(mg->getMaterial());
>>
>>        GeometryPtr geo = GeometryPtr::dcast(node->getCore());
>>        if(geo != NullFC)
>>            doAdd(geo->getMaterial());
>>
>>        return Action::Continue;
>>    }
>>
>>  private:
>>
>>    void doAdd(MaterialPtr m)
>>    {
>>        if(m == NullFC)
>>            return;
>>
>>        ChunkMaterialPtr cm = ChunkMaterialPtr::dcast(m);
>>        if(cm == NullFC)
>>        {
>>            FWARNING(("ChunkAdder::doAdd: Material %p is not a "
>>                      "ChunkMaterial, can't add!\n", m.getCPtr()));
>>            return;
>>        }
>>        beginEditCP(cm);
>>        for(int i = 0; i < cm->getChunks().size(); ++i)
>>            // This is a hack for a weird problem in OpenSG
>>            addRefCP(cm->getChunks()[i]);
>>        cm->addChunk(_chunk);
>>        endEditCP(cm);
>>    }
>>    StateChunkPtr _chunk;
>>};
>>
>>void addChunkToMaterials(NodePtr node, StateChunkPtr chunk)
>>{
>>    ChunkAdder adder(chunk);
>>    traverse(node,
>>             osgTypedMethodFunctor1ObjPtrCPtrRef<Action::ResultE,
>>                                                 ChunkAdder,
>>                                                 NodePtr>(
>>                                                     &adder,
>>
> 
> &ChunkAdder::enter));
> 
>>}
>>
>>
> 
> 
> I wonder if that would still be the way to do it. What I am trying to
> achieve is just changing one parameter of the material, e.g. emission or
> shininess (to highlight objects). So I instantiated the ChunkAdder class
> with the top-node of the imported object and a MaterialChunk, which only
> has Emission set. As a result my object is all white (as opposed to the
> original blue). How can I change only one component?
> 
> 
> My other problem is, that, the change of the material is only visible,
> after the object is translated.
> 
> And:
> 
> The material change does effect all clones of the imported
> vrml-geometries, although the default GraphOp of the ScenefileHandler
> should be NULL.
> 
> 
> Any help is appreciated,
> 
> Matthias
> 
> 
> 
> 
> 
> 
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier.
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Opensg-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/opensg-users


-- 
VREC
Robert-Bosch-Straße 7
D-64293 Darmstadt
Tel. 06151-4921035

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to