查看: 2130|回复: 2

怎么使用外部计算的投影和远近面

[复制链接]

该用户从未签到

发表于 2009-1-8 22:23:33 | 显示全部楼层 |阅读模式
情况是这样的
由于程序需要,不使用OSG自带计算的投影和远近面
由自己编写代码计算投影矩阵、near、far

我继承ClampProjectionMatrixCallback,写了struct,给camera设置了callback,使用我自己继承的ClampProjectionMatrixCallback来计算投影,远近面
这样对吗?

但是有一个问题,我程序里所有使用projection下挂的节点都显示不了或显示不正常(比如屏幕上的文字,logo图片等等,还有一些能显示但明显被裁掉了一些)

后来我设置 DO_NOT_COMPUTE_NEAR_FAR,屏幕上的字,logo能显示了,其他没设置之前能显示的却不能显示了,因为,我跟了一下ClampProjectionMatrixCallback下的clampProjectionMatrixImplementation函数不进去了

后来我使用了一种 设置DO_NOT_COMPUTE_NEAR_FAR,然后在node的callback里每次都camera->setProjectMatrix(自己编写计算的投影矩阵),倒是能显示,但很多显示不正常,真郁闷!

我估计我还是使用的不太对,对OSG的一些设置,使用还是不了解。。。。

有谁知道的,告诉一下这种情况下怎么设置搭配,怎么使用,需要重写什么?裁减模式该怎么选?


在此谢谢了。。。。。。

该用户从未签到

发表于 2009-1-8 23:29:44 | 显示全部楼层
ClampProjectionMatrixCallback应该是写给CullVisitor的,赋给Camera的话恐怕不会有作用。
CullVisitor的获取方法如下:
1、使用Camera::getRenderer()可以获取摄像机对应的渲染器对象;
2、使用Renderer::getSceneView()可以获取渲染器对应的场景视图,注意多线程渲染模式下有两个SceneView,ID值分别是0和1;
3、使用SceneView::getCullVisitor()可以获取场景视图当前的CullVisitor。
4、这些工作必须在仿真循环开始之后执行,否则得不到场景视图的。

然后您可以再试一下,不过这种做法真的又麻烦又危险。我想您后来的做法倒是比较正确的。设置DO_NOT_COMPUTE_NEAR_FAR,然后自己设置Camera的投影矩阵。但是要注意您的场景漫游器(例如TrackballManipulator)可能会自动影响摄像机的位置和姿态。建议继承MatrixManipulator编写自己的漫游器,记录位置的变化并计算相应的投影矩阵取值。

该用户从未签到

发表于 2009-1-12 08:58:11 | 显示全部楼层
"后来我使用了一种 设置DO_NOT_COMPUTE_NEAR_FAR,然后在node的callback里每次都camera->setProjectMatrix(自己编写计算的投影矩阵),倒是能显示,但很多显示不正常,真郁闷!"

您说的“很多显示不正常“具体指的是什么?

我也是自己编写代码计算投影矩阵的,用的就是您后来的办法,并没有觉得有什么问题啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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