查看: 1844|回复: 8

怎么判断点在视锥体内??求高手解答

[复制链接]

该用户从未签到

发表于 2013-6-19 16:44:16 | 显示全部楼层 |阅读模式
想判断空间一点是否在视锥体内,网上说找到六个面的一般方程,然后将点代入方程,再和0比大小。之后看了
http://bbs.osgchina.org/forum.ph ... =%CA%D3%D7%B6%CC%E5这个帖子,没看懂,有谁可以详细说下怎么求视锥体六面方程吗??我的投影矩阵是ProjectionMatrixAsPerspective

该用户从未签到

发表于 2013-6-19 22:13:59 | 显示全部楼层
一个很简单的办法是用osg:: CullStack这个类直接来进行计算,只要给它传入正确的modelview和projection matrix即可,用isCulled系列方法来做判断。或者您也可以直接把它的实现代码抄来己用

该用户从未签到

 楼主| 发表于 2013-6-20 13:13:28 | 显示全部楼层
array 发表于 2013-6-19 22:13
一个很简单的办法是用osg:: CullStack这个类直接来进行计算,只要给它传入正确的modelview和projection mat ...

谢谢array,我去试试

该用户从未签到

 楼主| 发表于 2013-6-20 14:37:05 | 显示全部楼层
array 发表于 2013-6-19 22:13
一个很简单的办法是用osg:: CullStack这个类直接来进行计算,只要给它传入正确的modelview和projection mat ...
  1. std::vector<osg::Vec3> sunVector;
  2.                 sunVector.push_back(m_SunPos);
  3.                 osg::CullStack* cullStack = new osg::CullStack;
  4.                 osg::RefMatrix* refMatrix = new osg::RefMatrix(m_Viewer->getCamera()->getProjectionMatrix());
  5.                 cullStack->pushProjectionMatrix(refMatrix);
  6.                 cullStack->pushViewport(m_Viewer->getCamera()->getViewport());
  7.                 std::cout<<cullStack->isCulled(sunVector)<<std::endl;
复制代码
这样是不是不对?isCullled总是true。您说的modelview怎么获得呢?

该用户从未签到

发表于 2013-6-20 20:28:26 | 显示全部楼层
   你是在运行时CullVisitor里调用的这个函数吗? 调用的时机是否正确?

该用户从未签到

 楼主| 发表于 2013-6-21 13:55:34 | 显示全部楼层
CWorld 发表于 2013-6-20 20:28
你是在运行时CullVisitor里调用的这个函数吗? 调用的时机是否正确?

不是,我是在MatrixTransform节点回调里用的。请问CullVisitor怎么用??谢谢

该用户从未签到

发表于 2013-6-21 15:32:10 | 显示全部楼层
看一看CullVisitor 的继承关系 就知道怎么使用了

该用户从未签到

 楼主| 发表于 2013-6-24 10:04:27 | 显示全部楼层
liuzhiyu123 发表于 2013-6-21 15:32
看一看CullVisitor 的继承关系 就知道怎么使用了

恩,好的,谢谢

该用户从未签到

发表于 2013-6-24 18:25:46 | 显示全部楼层
没有看到您在任何地方调用了pushModelViewMatrix
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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