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