在某些虚拟现实应用中,当用鼠标拣选物体时,可能不仅仅需要Ogitor中的那种效果,也可能需要表现一些3D的效果,如图1所示:Ogre中动态三维鼠标的实现

图1 3D鼠标拣选示意图

要实现此功能,原来其实很简单,只需要一个实体不断的变换大小,当鼠标拣选到相应的物体时,三维鼠标的模型移动到相应的位置就可以。这样就能达到三维鼠标的效果。鼠标的三维效果可以通过Max创建一个简单的模型或者手动创建一个Mesh,然后再每一帧中处理模型的大小。模型的大小可以根据当前拣选的物体的坐标与视点之间的距离的大小来设定。

示例代码如下:

更新代码:

const FrameEvent& evt)
   2: {
if (mpNode && mpCam)
   4:     {
   5:         Real scale;
static Real time = 0;
   7:         time += evt.timeSinceLastFrame;
if (time > 2) time = 0;
   9:  
//5 frame update, 16.0 experience value
int n = time / (5*1.0/16.0);
  12:         scale = ((n & (n-1)) == 0) * 0.2 + 1.0;
  13:  
//keep project size
float sz = scale * computePixelSizeAtDistance((mpNode->getPosition() - mpCam->getPosition()).length());
  16:         mpNode->setScale(sz, sz, sz);
//        mpNode->showBoundingBox(true);
  18:     }
  19:  
true;
  21: }

相关文章:

  • 2021-05-16
  • 2022-12-23
  • 2021-12-27
  • 2021-06-27
  • 2022-12-23
  • 2021-07-16
  • 2022-02-22
  • 2022-01-07
猜你喜欢
  • 2022-12-23
  • 2021-09-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案