首页 > 代码库 > osg for android 操作器
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 操作器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。