查看: 2040|回复: 7

有人遇到过Projection Matrix not applied 吗?

[复制链接]

该用户从未签到

发表于 2009-3-17 16:27:13 | 显示全部楼层 |阅读模式
今天自己写了一个manipulator 超级简单.
实现了 setNode getNode 然后 调用MatrixManipulator的computeHomePosition 得到eye,center,up 后
用Matrix的getLookAt(eye,center,up)... 得到一个矩阵 然后 每次getMatrix就返回这个矩阵.

将Manipulator设置上后 数据不显示 调用computeHomePosition也不显示.
debug 输出的信息是:_clamp ProjectionMatrix not applied, invalid depth range, znear = 3.40282e+038  zfar = -3.40282e+038

大概意思好像是投影矩阵有问题,所以没有完成投影操作。可是我设置的Camera的Manipulator啊。和projectionMatrix有关系吗?
代码用系统自带的Manipulator是可以的 例如TrackballManipulator是可以工作的.

该用户从未签到

发表于 2009-3-17 16:29:49 | 显示全部楼层
远/近平面的计算有问题,从输出看很明显是没有计算znear和zfar(两个数值分别是DBL_MAX和-DBL_MAX)。不知您还改动了别的什么没有?比如是否在代码中禁止osg自动计算远近平面?

该用户从未签到

 楼主| 发表于 2009-3-17 16:49:41 | 显示全部楼层
还是贴代码来的快:
在我的Manipulator构造函数:

this->setAutoComputeHomePosition(true);
        this->computeHomePosition();
        getHomePosition(_curEye, _curCenter, _curUp);

在getMatrix里面:
_curMatrix.makeLookAt(_curEye, _curCenter, _curUp);
return _curMatrix;

在getInverseMatrix:

matrix::inverse(getMatrix());


下面是我override的函数:

virtual Matrixd getMatrix() const;
        virtual void setByMatrix(const Matrixd& mat);
        virtual void setByInverseMatrix(const Matrixd& mat);
        virtual Matrixd getInverseMatrix() const;
        virtual void setNode(Node* node);
        virtual const Node* getNode() const;
        virtual Node* getNode();
        virtual bool handle(const GUIEventAdapter& ea, GUIActionAdapter& us);


然后就是调用了:
new QManipulator();
然后
setCameraManipulator(..);

该用户从未签到

 楼主| 发表于 2009-3-17 16:51:32 | 显示全部楼层
在handle里面有响应home的按键  debug可以看到代码已经执行了 计算出来了homePosition 的 其实就是三个vec,和实际的模型对照看 数据应该是正确的.

该用户从未签到

 楼主| 发表于 2009-3-17 16:52:56 | 显示全部楼层
禁止自动计算远近平面的函数在什么地方? 我enable一下看看

该用户从未签到

发表于 2009-3-17 16:58:32 | 显示全部楼层
自动计算远近平面默认是开启的,如果您没有禁止过,那么就不用管它了。
如果您的工程不涉密的话,建议您将整个工程作为附件上传,以方便大家与您一起讨论和解决问题,我个人无法从目前您给出的信息得出什么结论。

该用户从未签到

 楼主| 发表于 2009-3-17 17:07:03 | 显示全部楼层
project:
QGIS.zip (53.1 KB, 下载次数: 149)

该用户从未签到

 楼主| 发表于 2009-3-19 11:33:29 | 显示全部楼层
找到原因了 是Camera的初始位置设置的有问题 导致的。
我写的漫游功能需要花很长的时间才能让数据进入Camera的视野 ...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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