<div dir="ltr"><br><br><div class="gmail_quote">2008/9/26 Ulrich Hertlein <span dir="ltr"><<a href="mailto:u.hertlein@sandbox.de" target="_blank">u.hertlein@sandbox.de</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

Hi Vincent,<br>
<div><br>
Vincent Bourdier wrote:<br>
> If if do a nodevisitior, I've the problem that the operator() takes a<br>
> nodevisitor in parameter and so I can't obtain the cull state with that.<br>
> (method isCulled() not aviable from a node visitor)<br>
<br>
</div>The way I understood Robert, the fact that your operator() is called means the node in<br>
question is *not* culled so you could simple set your _isCulled=true.  And don't forget to<br>
call traverse().<br>
<div></div></blockquote><div><br>Ok, this is a simple and good way to have the result, but not sufficient : cull = true when operator() is called, but if the operator is not called, cull still = true and will never be false... <br>
<br>Any idea to obtain the culled state when I want ?<br>(hoping it's the last question...)<br><br>Thanks a lot.<br><br>Regards,<br>Vincent.<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div><br>
> Next, if I do a osg::drawable::Cullvisitor, I see how so implement the<br>
> cull() method, but It is a const method, so I can't add my own code in it to<br>
> memorize the cull state before looking at it.<br>
<br>
</div>The Drawable::CullCallback serves a different purpose.<br>
It can be used to actively cull Drawables.<br>
<br>
Cheers,<br>
<font color="#888888">/ulrich<br>
</font><div><div></div><div><br>
>> Vincent Bourdier wrote:<br>
>>> _mainChild->getDrawable(0)->setCullCallback(new tileVisibleCallback());<br>
>>><br>
>>> ***<br>
>>> tileVisibleCallback::tileVisibleCallback(){<br>
>>>     _cull = false;<br>
>>> };<br>
>>><br>
>>> void tileVisibleCallback::operator()(osg::Node* node,<br>
>> osgUtil::CullVisitor*<br>
>>> nv){<br>
>>>     _cull = nv->isCulled(*node);<br>
>>>     osg::notify(osg::NOTICE)<<"Cull "<<_cull<<"\n";<br>
>>><br>
>>> };<br>
>>><br>
>>> bool tileVisibleCallback::isCulled(){<br>
>>>     return _cull;<br>
>>> };<br>
>> You're mixing up osg::Drawable::CullCallback and osg::NodeCallback and<br>
>> consequently<br>
>> osg::Node::setCullCallback and osg::Drawable::setCullCallback.<br>
>><br>
>> osg::Drawable::CullCallback has a virtual cull() function that tells if the<br>
>> Drawable<br>
>> *should* be culled by returning true or false.<br>
>><br>
>> osg::NodeCallback has a virtual operator() that does what you want.<br>
>><br>
>> You need to derive your callback from osg::NodeCallback, implement<br>
>> operator() (as you<br>
>> already do), and call:<br>
>>        _mainChild->setCullCallback(...)<br>
>> instead of<br>
>>        _mainChild->getDrawable(0)->setCullCallback(...)<br>
>><br>
>> Hope this helps,<br>
>> /ulrich<br>
>><br>
>>> 2008/9/25 Vincent Bourdier <<a href="mailto:vincent.bourdier@gmail.com" target="_blank">vincent.bourdier@gmail.com</a>><br>
>>>> class tileVisibleCallback : public osg::Drawable::CullCallback{<br>
>>>> public:<br>
>>>>     tileVisibleCallback();<br>
>>>>     virtual void operator()(osg::Node* node, osgUtil::CullVisitor* nv);<br>
>>>>     bool isCulled();<br>
>>>><br>
>>>> private:<br>
>>>>     bool _cull;<br>
>>>><br>
>>>> };<br>
>>>><br>
>>>> Does it sound good for you ?<br>
>>>> (the mix between Cullcallback and osgUtil looks strange for me...<br>
>> but...)<br>
<br>
_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
</div></div></blockquote></div><br></div>