|
各位好,我目前遇到一个很奇怪的问题,就是将一个camera加到场景的根节点下,然后在这个camera下加了几个模型,然后我想单击这些模型让它做一些操作,但是当我单击的时候,取不到这些模型,事件是有触发的,我camera的设置如下:
-
- mHudCamera->setViewMatrix(osg::Matrix::identity());
- mHudCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
- mHudCamera->setViewport(0, 0, mWidth, mHeight);
- mHudCamera->setProjectionMatrixAsOrtho2D(0, mWidth, 0, mHeight);
- mHudCamera->setClearMask(GL_DEPTH_BUFFER_BIT);
- mHudCamera->setRenderOrder(osg::Camera::POST_RENDER);
- mHudCamera->setGraphicsContext(mGc);
- mHudCamera->setViewMatrixAsLookAt(osg::Vec3(0.0, -10.0, 0.0), osg::Vec3(0.0, 0.0, 0.0), osg::Vec3(0.0, 0.0, 1.0));
复制代码
在事件里面是这么写的:
-
- osg::Node* scene = viewer->getSceneData();
- osg::Node* node = 0;
- if(!scene)
- return;
- float x = ea.getX();
- float y = ea.getY();
- osgUtil::LineSegmentIntersector* picker;
- picker = new osgUtil::LineSegmentIntersector(osgUtil::Intersector::WINDOW, x, y);
- /*创建线段访问器**/
- osgUtil::IntersectionVisitor iv(picker);
- mArt->mHudCamera->accept(iv);
- /*有交点**/
- if(picker->containsIntersections())
- {
- /*取得第一个交点**/
- osgUtil::LineSegmentIntersector::Intersection intersection = picker->getFirstIntersection();
- osg::NodePath& nodepath = intersection.nodePath;
- node = nodepath[nodepath.size()-1];
- std::string name = node->getName();
- /*退出按钮**/
- if(node->getName() == "Exit")
- {
- mArt->mousePush("Exit");
- }
- 。。。。。。。。。。
- }
- /*没有交点**/
- else
- {
- }
- }
复制代码
我在MFC和控制台下测试的都是一样的。在主摄像机下的节点是能取到的,不知道是不是我哪边设置由问题嘛?
就是我单击上面的按钮都没有反应。。。。?? |
|