我正在尝试osg::Camera
为另一个视口的相机配置轴指示器的行为(在大多数 CAD 应用程序中,在每个 3D 视口中都有一个代表每个世界空间轴的小模型)。
我通过拉动视口相机的视图矩阵来做到这一点:
// fCam is the 'owning' viewport's camera i.e. the followed camera.
Matrixd newMatrix = fCam->getViewMatrix();
然后我反转它,得到相机的变换矩阵,得到相机的逆视图向量:
newMatrix.invert( newMatrix );
Vec3d eye, focus, up;
newMatrix.getLookAt( eye, focus, up );
eye = focus - eye;
eye.normalize();
我使用视图向量将相机定位在距原点(轴模型所在的位置)固定距离处,然后再次反转矩阵以获得生成的相机视图矩阵:
newMatrix.setTrans( eye * 4.0f );
newMatrix.invert( newMatrix );
viewCam->setViewMatrix( newMatrix );
这应该具有将轴指示器相机设置为遵循“拥有”视口的相机方向的效果,但使其与原点保持固定距离,并且原点始终位于视口的死点。
但它不起作用。方向看起来正确,但位置似乎没有改变,导致轴模型移出屏幕。我为此使用 OpenSceneGraph,并且没有附加到View
. 所以我不明白为什么相机没有像我预期的那样移动 - 有什么建议吗?