最近一直在研究如何用OpenInventor来实现对场景的放大缩小,自己的一些想法,最终都被否定,原因主要是我对SoCamera的一些域了解不是很深入。下面的代码是我看了OIV的源码后才搞定的,嘿嘿,虽然理解的不是很好,但是起码功能搞定了,很开心!
SoCamera* myCamera = myViewer->getCamera();
float focalDistance = myCamera->focalDistance.getValue();
float newFocalDist = focalDistance / percent;
// finally reposition the camera
SbMatrix mx = myCamera->orientation.getValue();
SbVec3f forward(-mx[2][0], -mx[2][1], -mx[2][2]);
myCamera->position = myCamera->position.getValue() + (focalDistance - newFocalDist) * forward;
myCamera->focalDistance = newFocalDist;
下面对代码里做简单解释,myViewer_是一个SoXtViewer或者SoQtViewer,percent是放大缩小的比率,调整percent的大小可以干什么就不用我说了吧。这里我把percent设置为1.2,那么除percent就是进行放大,乘以percent就是进行缩小。
http://hi.baidu.com/hnulilei/blog/item/2720aa3600e08cd7a3cc2be0.html