查看: 1208|回复: 1

用PolytopeIntersector选择Quad有时无法选中

[复制链接]

该用户从未签到

发表于 2013-7-16 08:55:03 | 显示全部楼层 |阅读模式
本帖最后由 267270476 于 2013-7-16 08:56 编辑

quad生成:
  1. osg::ref_ptr<osg::Geometry> OsgGeometryBuilder::getQuadGeometry(
  2.     const osg::ref_ptr<osg::Vec3Array>& aVertexArray)
  3. {
  4.     osg::ref_ptr<osg::Geometry> aVertexQuad = new osg::Geometry();
  5.     aVertexQuad->setVertexArray(aVertexArray.get());
  6.     osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array(1);
  7.     (*normals)[0].set(0, 0, -1);
  8.     aVertexQuad->setNormalArray(normals.get());
  9.     aVertexQuad->setNormalBinding(osg::Geometry::BIND_OVERALL);
  10.     aVertexQuad->addPrimitiveSet(new osg::DrawArrays(osg::DrawArrays::QUADS, 0, aVertexArray->size()));
  11.     return aVertexQuad;
  12. }
复制代码
  1. osg::ref_ptr<osg::Group> OsgGeometryBuilder::CreateQuadOsgGeometryFromCenter(
  2.     const new_geometry::Vertex3d& aCenter,
  3.     const double& aWidth)
  4. {
  5.     osg::ref_ptr<osg::Geode> geode = new osg::Geode;

  6.     std::vector<new_geometry::Vertex3d> vertice3Ds = getQuadVertices(aCenter, aWidth);
  7.     float deltaX = 0;
  8.     float deltaY = 0;
  9.     osg::ref_ptr<osg::Vec3Array> vertexArray = getOptimizedVec3Array(
  10.             &vertice3Ds,
  11.             deltaX,
  12.             deltaY);
  13.     osg::ref_ptr<osg::Geometry> vertexQuad = getQuadGeometry(vertexArray);
  14.     geode->addDrawable(vertexQuad);
  15.     osg::ref_ptr<osg::MatrixTransform> transformer = new osg::MatrixTransform;
  16.     transformer->addChild(geode);
  17.     transformer->setMatrix(osg::Matrix::translate(deltaX, deltaY, 0));
  18.     osg::ref_ptr<osg::Group> group = new osg::Group;
  19.     group->addChild(transformer);
  20.     return group;
  21. }
复制代码
Intersector生成:
  1. osg::ref_ptr<osgUtil::PolytopeIntersector> OsgIntersectorEventHandler::getPolytopeIntersector(
  2.     const osgGA::GUIEventAdapter& aEventAdapter,
  3.     const double& aWidth,
  4.     const double& aHeight)
  5. {
  6.     double centerX = aEventAdapter.getXnormalized();
  7.     double centerY = aEventAdapter.getYnormalized();
  8.     osg::ref_ptr<osgUtil::PolytopeIntersector> picker(
  9.         new osgUtil::PolytopeIntersector(
  10.                 osgUtil::Intersector::PROJECTION,
  11.                 centerX - aWidth,
  12.                 centerY - aHeight,
  13.                 centerX + aWidth,
  14.                 centerY + aHeight)
  15.     );
  16.     return picker;
  17. }
复制代码
Quad的边长为0.04,求交器的长宽都为0.02.
跪求大神们帮忙!

该用户从未签到

发表于 2013-7-16 10:25:49 | 显示全部楼层
凭目前的信息我无法猜测什么,您可以多测试一下别的情形
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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