在某些虚拟现实应用中,当用鼠标拣选物体时,可能不仅仅需要Ogitor中的那种效果,也可能需要表现一些3D的效果,如图1所示:
图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 valueint n = time / (5*1.0/16.0);12: scale = ((n & (n-1)) == 0) * 0.2 + 1.0;13://keep project sizefloat sz = scale * computePixelSizeAtDistance((mpNode->getPosition() - mpCam->getPosition()).length());16: mpNode->setScale(sz, sz, sz);// mpNode->showBoundingBox(true);18: }19:true;21: }