Sebastian Knödel schrieb:
> Thanks a lot Dominik, it works perfect. :-)
>   

Glad to be of service.

> It would be nice to have an example as part of the OpenSG tutorials that 
> shows a standard shader (phong, cook-torrance) with the tie fighter.
> Is there any interest?
>   

I think there's always interest in having more tutorials.

Yours,
Dominik

>
> Dominik Rau wrote:
>   
>> Hi again.
>>
>> As I have a look at it again (quite old code...): It might be a good 
>> idea to use a set instead of a vector to avoid multiple occurences of 
>> the same material (->shared cores), but I'm working on something 
>> completely different at this very moment (C#/.NET, *sigh*), so you're on 
>> your own here.
>>
>> Yours,
>> Dominik
>>
>> Dominik Rau schrieb:
>>   
>>     
>>> Hi Sebastian.
>>>
>>> Sebastian Knödel schrieb:
>>>     
>>>       
>>>> (...)
>>>> Is there a simple possibility or do I have to traverse all the 
>>>> subnodes and check them for theire Materials to add my Shader??
>>>>   
>>>>       
>>>>         
>>> I think the latter. But to save some of your time, you can just use 
>>> these two methods (I use them static in a OSGTools class)
>>>
>>> OSG::ChunkMaterialPtr OSGTools::getChunkMaterial(OSG::NodePtr node){
>>>    OSG::NodeCorePtr pCore = node->getCore();
>>>    OSG::ChunkMaterialPtr cm=OSG::NullFC;
>>>    if ( pCore != OSG::NullFC &&
>>>        
>>> pCore->getType().isDerivedFrom(OSG::MaterialGroup::getClassType()) ){
>>>        OSG::MaterialGroupPtr g=OSG::MaterialGroupPtr::dcast(pCore);
>>>        cm=OSG::ChunkMaterialPtr::dcast(g->getMaterial());
>>>    }
>>>    else if ( pCore != OSG::NullFC &&
>>>        pCore->getType().isDerivedFrom(OSG::Geometry::getClassType()) ){
>>>        OSG::GeometryPtr g=OSG::GeometryPtr::dcast(pCore);
>>>        cm=OSG::ChunkMaterialPtr::dcast(g->getMaterial());
>>>    }
>>>    return cm;
>>> }
>>>
>>> void  OSGTools::getAllMaterials(OSG::NodePtr 
>>> node,std::vector<OSG::ChunkMaterialPtr> &mats){
>>>  OSG::ChunkMaterialPtr cm=getChunkMaterial(node);
>>>  if(cm!=OSG::NullFC){
>>>    mats.push_back(cm);
>>>  }
>>>  for (int i=0; i<node->getNChildren(); i++)
>>>        getAllMaterials(node->getChild(i),mats);
>>> }
>>>
>>> Just call getAllMaterials with an empty vector<OSG::ChunkMaterialPtr> 
>>> on any node and you should get what you need.
>>>
>>> HTH,
>>> Dominik
>>>
>>>
>>>     
>>>       
>>>> Actually I'm a bit lost. I thought it wouldn't be that difficult.
>>>>
>>>> I hope somebody has an idea.
>>>>
>>>> Thanks
>>>>
>>>> Carsten Neumann wrote:
>>>>  
>>>>       
>>>>         
>>>>>     Hello Sebastian,
>>>>>
>>>>> Sebastian Knödel wrote:
>>>>>      
>>>>>         
>>>>>           
>>>>>> Thanks for the fast reply.
>>>>>> But this doesn't work.
>>>>>> The materialgroup contains no material at that point.
>>>>>> So if I use mg->getMaterial() I receive always a NullFC.
>>>>>> But I unerstand the problem.
>>>>>> Somehow I have to add the shaderchunk to the OSGMaterial that holds 
>>>>>> the original materialdata.
>>>>>>           
>>>>>>           
>>>>>>             
>>>>> exactly.
>>>>>
>>>>>      
>>>>>         
>>>>>           
>>>>>> But how can I access the Material of any loaded geometry and add my 
>>>>>> shader chunk???
>>>>>>           
>>>>>>           
>>>>>>             
>>>>> that depends a bit on what type of file your model is stored in. 
>>>>> AFAIK the vrml loader uses material groups, but other loaders 
>>>>> probably add the material directly to the geometry, i.e. you can get 
>>>>> it by:
>>>>>
>>>>> GeometryPtr geo = Geometry::dcast(model->getCore());
>>>>> MaterialPtr mat = geo->getMaterial();
>>>>>
>>>>>      
>>>>>         
>>>>>           
>>>>>> I tried something like
>>>>>>
>>>>>> if(model->getCore()->getType().isDerivedFrom( 
>>>>>> ChunkMaterial::getClassType())){
>>>>>>     mat = model->getCore();
>>>>>>           
>>>>>>           
>>>>>>             
>>>>>      mat = ChunkMaterial::dcast(model->getCore());
>>>>>
>>>>>      
>>>>>         
>>>>>           
>>>>>>     mat->addChunk(shaderchunk);
>>>>>> }
>>>>>>
>>>>>> any comment?
>>>>>>           
>>>>>>           
>>>>>>             
>>>>> Material and hence ChunkMaterial is not derived from NodeCore, so 
>>>>> the above test is always false.
>>>>>
>>>>>     Hope it helps,
>>>>>         Carsten
>>>>>
>>>>>      
>>>>>         
>>>>>           
>>>>>> thanks
>>>>>>
>>>>>> Andreas Zieringer wrote:
>>>>>>          
>>>>>>           
>>>>>>             
>>>>>>> Hi Sebastian,
>>>>>>>
>>>>>>> you are replacing the original material with your own shader 
>>>>>>> material.
>>>>>>>
>>>>>>> replace this line:
>>>>>>>
>>>>>>> mg->setMaterial(createSimpleShaderMaterial());
>>>>>>>
>>>>>>> with something like this:
>>>>>>>
>>>>>>> ChunkMaterialPtr mat = ChunkMaterialPtr::dcast(mg->getMaterial());
>>>>>>>
>>>>>>> if(mat != NullFC)
>>>>>>> {
>>>>>>>      beginEditCP(mat);
>>>>>>>          mat->addChunk(_shl);
>>>>>>>      endEditCP(mat);
>>>>>>> }
>>>>>>>
>>>>>>> Andreas
>>>>>>>
>>>>>>>                
>>>>>>>             
>>>>>>>               
>>>>>>>> Hi there,
>>>>>>>>
>>>>>>>> I'm using different glsl shader (phong, etc.) to create different 
>>>>>>>> visualizations of my models in my scene.
>>>>>>>> In my shaders I would like to use the original material 
>>>>>>>> properties resp. textures that belong to the model and were 
>>>>>>>> loaded with the geometry from file.
>>>>>>>>
>>>>>>>> When I load the tie fighter model I would like to use the 
>>>>>>>> original material colors in my shader.
>>>>>>>> I tried to do so by using the built-in gl_FrontColor.diffuse in 
>>>>>>>> the Vertex Shader and pass it through to the Fragment Shader.
>>>>>>>> But the gl_FrontColor (diffuse/ambient/specular) is all the time 
>>>>>>>> (0.0,0.0,0.0,0.0)/black, meaning that its not available.
>>>>>>>> It seems that the OpenGL material isn't anymore valid for any 
>>>>>>>> reason when I use a shader.
>>>>>>>>
>>>>>>>> Afterwards I tried to use the textures of the model in my shader. 
>>>>>>>> In Performer the corresponding texture of the currently rendered 
>>>>>>>> geometry was bind to texture unit 0. Thus it was easy to use the 
>>>>>>>> textures in the shader. It seams that OpenSG binds the textures 
>>>>>>>> to different textures units. Because when I used texture unit 0 
>>>>>>>> in my shader, the wrong textures were visualized with wrong parts 
>>>>>>>> of my model.
>>>>>>>> So my question is how to acces the textures in my shader, which 
>>>>>>>> were loaded with the model? Because I don't know the exact 
>>>>>>>> texture units OpenSG binds them to.
>>>>>>>>
>>>>>>>> Perhaps I don't set up the shader corrctly and the OpenGL State 
>>>>>>>> isn't anymore available.
>>>>>>>>
>>>>>>>> I attached an example to show the problem.
>>>>>>>>
>>>>>>>> thanks for any comment.
>>>>>>>>
>>>>>>>> Sebastian Knödel
>>>>>>>>                       
>>>>>>>>               
>>>>>>>>                 
>>>>>>>                 
>>>>>>>             
>>>>>>>               
>>>>>> -------------------------------------------------------------------------
>>>>>>  
>>>>>>
>>>>>> This SF.net email is sponsored by: Splunk Inc.
>>>>>> Still grepping through log files to find problems?  Stop.
>>>>>> Now Search log events and configuration files using AJAX and a 
>>>>>> browser.
>>>>>> Download your FREE copy of Splunk now >>  http://get.splunk.com/
>>>>>> _______________________________________________
>>>>>> Opensg-users mailing list
>>>>>> [email protected]
>>>>>> https://lists.sourceforge.net/lists/listinfo/opensg-users
>>>>>>
>>>>>>           
>>>>>>           
>>>>>>             
>>>>> ------------------------------------------------------------------------- 
>>>>>
>>>>> This SF.net email is sponsored by: Splunk Inc.
>>>>> Still grepping through log files to find problems?  Stop.
>>>>> Now Search log events and configuration files using AJAX and a browser.
>>>>> Download your FREE copy of Splunk now >>  http://get.splunk.com/
>>>>> _______________________________________________
>>>>> Opensg-users mailing list
>>>>> [email protected]
>>>>> https://lists.sourceforge.net/lists/listinfo/opensg-users
>>>>>       
>>>>>         
>>>>>           
>>>> ------------------------------------------------------------------------- 
>>>>
>>>> This SF.net email is sponsored by: Splunk Inc.
>>>> Still grepping through log files to find problems?  Stop.
>>>> Now Search log events and configuration files using AJAX and a browser.
>>>> Download your FREE copy of Splunk now >>  http://get.splunk.com/
>>>> _______________________________________________
>>>> Opensg-users mailing list
>>>> [email protected]
>>>> https://lists.sourceforge.net/lists/listinfo/opensg-users
>>>>
>>>>
>>>>   
>>>>       
>>>>         
>>>     
>>>       
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by: Splunk Inc.
>> Still grepping through log files to find problems?  Stop.
>> Now Search log events and configuration files using AJAX and a browser.
>> Download your FREE copy of Splunk now >>  http://get.splunk.com/
>> _______________________________________________
>> Opensg-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/opensg-users
>>   
>>     
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc.
> Still grepping through log files to find problems?  Stop.
> Now Search log events and configuration files using AJAX and a browser.
> Download your FREE copy of Splunk now >>  http://get.splunk.com/
> _______________________________________________
> Opensg-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/opensg-users
>
>
>   


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to