我要发帖 回复

正式会员

19

主题

71

积分

0

专家分

:

私信
发表时间 : 2008-12-16 20:30:59 | 浏览 : 964    评论 : 0
vega prime版里,obuil贴出了用vp 的一个picker的类来实现二维坐标转化为三维坐标, 使用的是点选射线法,用碰撞检测来实现的,但是在vega中该怎么用代码来实现一样的效果呢,感觉vp中有的函数在vega中找不到,例如:channel->getVrChannel()->getOffsetMatrixInverse,这个语句用vega的什么语句来代替呢?有做过类似的问题的吗,谢谢指教!
     这个是vp中的代码
                   mx=mx*2-1;
                my=my*2-1;
                vuVec3<float> mouse(mx, my, -1);
                vuVec3<float> vec;
                vuMatrix<float> projInv;
                projInv.invert(channel->getVrChannel()->getProjectionMatrix());
                projInv.transformPoint(&mouse);
                channel->getVrChannel()->getOffsetMatrixInverse(
                        ).transformPoint(&mouse);
                channel->getVrChannel()->getViewMatrix().transformPoint(&mouse);
                x = viewMat[3][0];
                y = viewMat[3][1];
                z = viewMat[3][2];
                vec[0] = mouse[0] - x;
                vec[1] = mouse[1] - y;
                vec[2] = mouse[2] - z;
                h = vuRad2Deg(-vuArcTan(vec[0], vec[1]));
                p = vuRad2Deg(vuArcTan(vec[2],
                        vuSqrt(vuSq(vec[0]) + vuSq(vec[1]))));
                range = 2 * f;
        }
        m_isector->setTranslate(x, y, z);
        m_isector->setRotate(h, p, 0.0);
        m_isector->setSegmentRange(range);
        vsNode *node = NULL;
        m_isector->update();
        if (m_isector->getHit())
        {         switch(m_mode)
                {
                     case MODE_OBJECT:
                     node = (vsNode*)(m_isector->getHitObject());
                                break;....}}//by getHit
         return node;
}
void vpPicker::getPickedPos(vuVec3d&pos)
{
        m_isector->getHitPoint(&pos);
}

最近VR访客

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

GMT+8, 2020-10-24 07:16 PM

返回顶部