|
我在只有OSG的工程里 视线了一个第一人称漫游 在move响应里移动鼠标 让视点跟着移动 鼠标始终保持在屏幕中心 没有任何问题
现在我有一个OSG+QT的工程 在osgwidget里添加了漫游器 move响应的代码一样的 为什么运行后效果有问题呢? 鼠标上下移动的时候 视点不跟着动 比较诡异。代码如下
case osgGA::GUIEventAdapter::MOVE:
{
//sleep(1.0);
int moveX = ea.getX();
int moveY = ea.getY();
//横向移动视点
float txy;
txy = 0.4 * (-moveX+_mwidth)/_mwidth;
xy -= txy;
osg:uat qw(txy, osg::Vec3d(0,0,1));
_rotation *= qw;
osg::Quat curQuat = getMatrix().getRotate(); //获得当前姿态
float heading, pitch, roll;
QuatToHPRR(curQuat, heading, pitch, roll);//四元数转换成欧拉角
heading = -heading;
if(xy >= osg:I){ //把xy控制在-PI到PI之间 可有可无 测试用
xy -= 2*osg::PI;
}else if(xy <= -osg::PI){
xy += 2*osg::PI;
}
osg::Vec3 e, c, u, front;
viewer->getCamera()->getViewMatrixAsLookAt(e, c, u);
front = c-e;
if(front.x()>0.0 && front.y()<0.0){
heading += osg::PI;
}else if(front.x()<0.0 && front.y()<0.0){
heading -= osg::PI;
}
//鼠标上下移动的处理
osg::Quat at;
at.makeRotate(heading,osg::Vec3(0,0,1));
_rotation*=at;
txy = 0.4*(+moveY-_mheight)/_mheight;
at.makeRotate(txy, osg::Vec3d(1,0,0));
_rotation*=at;
at.makeRotate(-heading,osg::Vec3(0,0,1));
_rotation*=at;
if(isMid){
QCursor::setPos(_mwidth,_mheight);
}
return true;
}
请问为什么在QT控件里 效果就不一样了 求指导 谢谢! |
|