首页 > 代码库 > osg for android 操作器

osg for android 操作器

   很短的文章解决一个实用的问题
   osg for android默认操作器,用起来是不是不能动,一触屏模型就飞了?

   是的,原因是由于在相机操作的时候的一个计算引起的.

   引擎代码段中,会看到许多下面的处理.

    float dx = _ga_t0->getXnormalized()-_ga_t1->getXnormalized();

    float dy = _ga_t0->getYnormalized()-_ga_t1->getYnormalized();

    这个计算本身没有问题,问题就出在android中,getXnormalized()函数中的取值出了问题
   inline float getXnormalized() const { return 2.0f*(getX()-getXmin())/(getXmax()-getXmin())-1.0f; }

  其中getXmax()/getYmax()取到的值是错误的
  所以整个计算都出了问题(具体为什么没取到正确的值,目前没有深入去跟)
  解决方法就很简单了,重写整个函数
  给出getXnormalized()的代码段,Y同理(android中Y需要取反)

 float MyTrackballManipulator::getXnormalized(const osg::ref_ptr<const osgGA::GUIEventAdapter> ea){
if(!ea)
{
return 0;
}
float w = ea->getWindowWidth();
float xOrigin = ea->getWindowX();
return 2.0f*((ea->getX()-xOrigin)/w)-1.0f;
}


至此您的操作器就没有问题了
附截图一张




osg for android 操作器