是的,原因是由于在相机操作的时候的一个计算引起的.
引擎代码段中,会看到许多下面的处理.
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;
}
至此您的操作器就没有问题了
附截图一张
原文地址:http://blog.csdn.net/gis_wudi/article/details/41723245