本人想通过设置camera的位置,实现对模型的旋转操作,最终达到相机在坐标轴的6个不同方向观察模型(Top,bottom,left,right,front,back)。我在此处是将相机在y轴负半轴旋转到Z轴正半轴,以观察模型的Top。下面使用如题的两种方法旋转相机,或许是参数值计算的不对,最后trackBall的中心与boudingSphere的中心完全不同。本文有待更新。
1.首先,获取加载模型的camera视点信息。使用viewer->getCamera->getViewMatrixAsLookAt(eye,centre,up),三个参数的意义分别是:
- eye相机的位置(也可以说是观察者的位置);
- centre加载在viewer中的模型位置(也可以说是观察到的点位置);
- up是垂直于相机视线向上的方向向量(通俗说观察者头顶的方向),此例中加载模型后,up的向量值为(0,0,1)可以看到up.z()=1,垂直于相机视线向上,也就是说相机是从Y轴的负半轴向Y轴的正半轴观察。
2.其次,得到加载模型的中心点位置如下:
- 获取中心osg::BoundingSphere bs = root->getBound();
- 计算模型的中心点坐标osg::Vec3 bsCenter = bs.center