查看: 2574|回复: 6

问一个关于setComputeNearFarMode的问题?

[复制链接]

该用户从未签到

发表于 2009-5-13 20:37:03 | 显示全部楼层 |阅读模式
  1. #include <osgViewer/Viewer>

  2. #include <osg/Node>
  3. #include <osg/Geode>
  4. #include <osg/Group>
  5. #include <osg/CoordinateSystemNode>
  6. #include <osg/ShapeDrawable>

  7. #include <osgDB/ReadFile>

  8. #include <osgGA/TrackballManipulator>

  9. #include <iostream>

  10. osg::ref_ptr<osg::Node> createEarth()
  11. {
  12.         osg::ref_ptr<osg::ShapeDrawable> sd = new osg::ShapeDrawable(
  13.                 new osg::Sphere(osg::Vec3(0.0,0.0,0.0),osg::WGS_84_RADIUS_POLAR));
  14.         
  15.         osg::ref_ptr<osg::Geode> geode = new osg::Geode;
  16.         geode->addDrawable(sd.get());

  17.         std::string filename("Images/land_shallow_topo_2048.jpg");
  18.         geode->getOrCreateStateSet()->setTextureAttributeAndModes(0,
  19.                 new osg::Texture2D(osgDB::readImageFile(filename)));
  20.         osg::ref_ptr<osg::CoordinateSystemNode> csn = new osg::CoordinateSystemNode;
  21.         csn->setEllipsolidModel(new osg::EllipsolidModel);
  22.         csn->addChild(geode.get());
  23.         return csn;
  24. }

  25. int main()
  26. {
  27.         osgViewer::Viewer viewer;

  28.         osg::ref_ptr<osg::Group> root = new osg::Group;
  29.         root->addChild(createEarth().get());

  30.         osgGA::TrackballManipulator *Tman = new osgGA::TrackballManipulator;
  31.         viewer.addCameraManipulator(Tman);

  32.         viewer.setSceneGraph(root.get());
  33.         viewer.getCamera()->setClearColor(osg::Vec4(0.0,0.0,0.0,1.0));

  34.         //如果没有以下两句,程序执行正常
  35.          //如果有以下两句,为什么只绘制了部分图形
  36.         viewer.getCamera()->setComputeNearFarMode(osg::Camera:DO_NOT_COMPUTE_NEAR_FAR);
  37.         viewer.getCamera()->setProjectionMatrixAsPerspective(45.0,1.0,0.01,osg::WGS_84_RADIUS_POLAR*100);

  38.         return viewer.run();
  39. }
复制代码

该用户从未签到

发表于 2009-5-13 20:42:01 | 显示全部楼层
也许是您自行设置的远近平面有问题。毕竟您已经要求DO_NOT_COMPUTE_NEAR_FAR,因此OSG不会再自动计算远近平面了

该用户从未签到

 楼主| 发表于 2009-5-13 20:46:18 | 显示全部楼层
能帮我看看具体是什么问题吗?
因为地球半球是osg::WGS_84_RADIUS_POLAR
所以我将近剪切面设置为0.01 远剪切面设置为osg::WGS_84_RADIUS_POLAR*100
哪么在很靠近地球的情况下,整个地球都应该是可见的,但是为什么一块一块的呢?而且明显显示的内容不是由远近剪切面剪切的

该用户从未签到

发表于 2009-5-14 04:27:20 | 显示全部楼层
这个应该只是剪切面的参数设置问题~~~~~~~

该用户从未签到

 楼主| 发表于 2009-5-17 19:19:34 | 显示全部楼层
这个问题依旧存在,剪切面的设置应该是没有问题的
好像是在绘制的过程中出的问题,否则球体也不会显示为一块一块的。
老大能不能帮我仔细看看啊?先谢谢啦
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-5-17 19:21:35 | 显示全部楼层
    建议贴张图上来,球体一般都设置的有LOD,没准是因为在生成时那块本身就没有纹理,白一片,正常一片

    该用户从未签到

     楼主| 发表于 2009-5-17 20:47:45 | 显示全部楼层
    没有设置LOD啊
    看代码中的createEarth
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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