我要发帖 回复

中级会员

15

主题

121

积分

0

专家分

水面上的小草

:

私信
发表时间 : 2007-10-13 09:33:44 | 浏览 : 2449    评论 : 17
我在obuil兄提供的piker类中加入了
public:
                void  setStrategyHighLight();
                vrRenderStrategyHighLight*  getStrategyHighLight();

void vpPicker::setStrategyHighLight()
{
                m_highlightStrategy= new vrRenderStrategyHighLight();                ///////
        m_highlightStrategy->setColor (1.0,1.0,0.0,1.0);                        //color
        m_highlightStrategy->ref();
}

vrRenderStrategyHighLight*  vpPicker::getStrategyHighLight()
{
        return (m_highlightStrategy) ;

}

在程序里设置:
m_picker->setStrategyHighLight();
当pick后:
        if(m_object)
        {   
                       
            m_picker->setRenderStrategy(m_object,m_picker->getStrategyHighLight());  //设置高亮       

        }
成功高亮选中的物体,但是在pick下一个object时,虽然也能高亮,但是不能取消上次选中object的高亮,这样每选中一个object就会被高亮.
但是怎样才能取消以前选中的object高亮,只保留最后一次选中的object高亮呢?

最近VR访客

obuil 评论于2007-10-13 21:17:00
使用这个函数就行:
setRender(vsNode *node,BOOL bRender);

例如:
setRender(m_object,TRUE);

取消高亮:
setRender(m_object,FALSE);
kevin0442 评论于2007-10-16 08:39:49
多谢obuil兄指点.
setRender(vsNode *node,BOOL bRender);
在每次高亮新object前先设置上次object的setRender(object,FALSE);
这样就不会出现多个object被高亮了
obuil 评论于2007-10-16 22:59:40
这个比较灵活  你可以自己设计处理
kevin0442 评论于2007-10-19 16:47:46
object高亮后是用线条显示的,如下图.
感觉不好,有没有办法不用线条显示,而是采用对object另外设置颜色?

vrRenderStrategyHighLight 只有下面5个方法.
    int setLineWidth(float width);
    float getLineWidth() const { return(m_lineWidth); }
    int setColor(float r, float g, float b, float a);
    void getColor(float *r, float *g, float *b, float *a) const;
    virtual void draw(vrDrawContext *context, const vrDrawFunc::Data &data);

怎样能做到对object另外设置颜色?期待指点.
pick.JPG
amutieer2006 评论于2007-10-20 09:25:34
怎木有看不见了啊?
obuil 评论于2007-10-20 11:36:17
对 目前模式是线条的,更改m_highlightStrategy属性即可
kevin0442 评论于2007-10-20 19:55:19
m_highlightStrategy只有下面2个更改属性的方法:   (定义在vrRenderStrategy.h中)
int setLineWidth(float width);                //设置线条宽度
int setColor(float r, float g, float b, float a);   //设置颜色
没有设置模式的方法.
obuil兄能具体说说怎么设置m_highlightStrategy的模式吗?
kevin0442 评论于2007-10-22 16:40:59
问题还没解决,期待obuil兄指点.
obuil 评论于2007-10-23 22:47:44
在vpPicker。cpp中
m_isector = new vpIsectorLOS();
        m_boundsStrategy = new vrRenderStrategyBounds();
        m_boundsStrategy->setRenderGeometryEnable(true);
        m_boundsStrategy->setLineWidth (1);
        m_boundsStrategy->setColor (1.0,1.0,0.0,1.0);
        m_boundsStrategy->setWireframeEnable(true);

setWireframeEnable改为false
kevin0442 评论于2007-10-24 08:50:15
谢谢obuil兄.
下面是一点个人使用m_boundsStrategy 和m_highlightStrategy的体会.
在obuil兄写的vpPicker类中,是根据m_boundsStrategy设置高亮的.
        m_boundsStrategy = new vrRenderStrategyBounds();
        m_boundsStrategy->setRenderGeometryEnable(true);      //
        m_boundsStrategy->setLineWidth (1);
        m_boundsStrategy->setColor (1.0,1.0,1.0,0.0);
        m_boundsStrategy->setWireframeEnable(true);           //
        m_boundsStrategy->ref();
vpPicker类中默认设置m_boundsStrategy->setWireframeEnable(true);   
对选中的object应用该策略,高亮后绘制object的包围盒的边框线.   
效果如下:

[ 本帖最后由 kevin0442 于 2007-10-24 09:12 AM 编辑 ]
setWireframeEnable(true).JPG
kevin0442 评论于2007-10-24 09:00:12
在vpPicker类中设置m_boundsStrategy->setWireframeEnable(false);
  
对选中的object应用该策略,高亮后绘制object的整个包围盒.
但是有2个object不能被高亮.
假如同时设置 m_boundsStrategy->setRenderGeometryEnable(false),这2个object就能被高亮.
感觉m_boundsStrategy设置高亮还是不很完美,或许是我自己不会用,呵呵
高亮后重绘整个物体的包围盒,和物体本身形状差距较大.
比如我是高亮一个球体,结果高亮后是长方体的包围盒.
效果如下:

[ 本帖最后由 kevin0442 于 2007-10-24 09:14 AM 编辑 ]
setWireframeEnable(false).JPG
kevin0442 评论于2007-10-24 09:05:52
m_highlightStrategy的体会.
在obuil兄写的vpPicker类中,添加了
vrRenderStrategyHighLight*   m_highlightStrategy;
设置
m_highlightStrategy= new vrRenderStrategyHighLight();               
m_highlightStrategy->setLineWidth(1.0);                                               
m_highlightStrategy->setColor (1.0,1.0,1.0,0.0);       
m_highlightStrategy只能设置线条模式.
对选中的object应用该策略,效果如下:
StrategyHighLight.JPG
kevin0442 评论于2007-10-24 09:09:18
以上是一点个人的体会,欢迎朋友们指正,也欢迎大家把自己高亮相关的心得写出来,方便有需要的朋友查阅.
administrator专家组 评论于2007-10-26 14:03:17
很好的实践嘛
lbbbbl01410401 评论于2008-6-13 09:56:50
LZ做得不错
ruancong 评论于2008-11-7 16:59:18
顶一下 希望尽快能下载所需的东西啊
ruancong 评论于2008-12-10 10:39:09
正在尝试做这个,谢谢LZ...

手机版|VR开发网 统计 津ICP备18009691号
网安备12019202000257

GMT+8, 2021-10-29 04:07 AM

返回顶部