查看: 1076|回复: 2

请教关于显示全图和AutoCubeAxis的实现

[复制链接]

该用户从未签到

发表于 2011-11-11 17:49:04 | 显示全部楼层 |阅读模式
本帖最后由 feixue 于 2011-11-11 17:50 编辑

请教高手两个问题:
1. 参照以前的帖子(全图显示怎么计算?),我通过下面的代码实现,没有任何效果,如果改变fovy的大小,会有效果,想请教这个变量与场景包围盒有什么关系,如何计算。

我的程序结构:Viewer.realize到MFC的窗口上,Viewer的相机中是KeySwitchMatrixManipulator,之中放了一个TrackballManipulator,相机的初始化使用了setProjectionMatrixAsPerspective()。下面的代码是在一个自定义的NodeVisitor中,场景中只有一个半径为0.5的Sphere。

void apply(Camera& node)
{
    double fovy, aspectRatio, zNear, zFar;
    node.getProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, zFar);
    osg::BoundingSphere bs;// = m_root->getBound();
    bs.set(osg::Vec3(), 0.8f);
    double distance = bs.radius() * 2.0f;
    zNear = distance - bs.radius();
    zFar = distance + bs.radius();
    node.setProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, zFar);
}

2. OSG有现成的AutoCubeAxis对象吗?如果没有,哪位大牛给个实现思路。下面是OpenInventor自带的AutoCubeAxis截图。

autocubeaxis1

autocubeaxis1

autocubeaxis2

autocubeaxis2

该用户从未签到

发表于 2011-11-14 09:21:49 | 显示全部楼层
1、我不知道您要干什么,如果要改变整个场景的投影矩阵,我想您至少应该直接修改viewer.getCamera()而非NodeVisitor中的相机
2、要实现这样的对象没有什么难度,直接用Geometry绘制就可以了

该用户从未签到

 楼主| 发表于 2011-11-14 09:55:07 | 显示全部楼层
呵呵,终于出现了。
1. 我是要实现在任何时候,只要点击“显示全图”按钮,都能以当前视角显示出完整的场景。我是修改的viewer.getCamera(),NodeVisitor的参数就是相机。现在我改用实现setByMatrix函数的方式了,这个好像也是你推荐的方式吧。
2. 其实我想问的是,怎样实现:面向观察点的一面或多面的坐标轴自动隐藏,从我上传的图片可以对比出来,以不同的视角看,会有不同的坐标轴平面显示或隐藏。
先谢谢啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表