查看: 2454|回复: 6

请版主帮忙!!

[复制链接]

该用户从未签到

发表于 2009-6-18 22:08:34 | 显示全部楼层 |阅读模式
  1. #include <osg/Shape>
  2. #include <osgViewer/Viewer>
  3. #include <osg/Geode>
  4. #include <osg/Node>
  5. #include <osg/Geometry>
  6. #include <osg/ShapeDrawable>
  7. #include <osgDB/ReadFile>
  8. #include <osg/Object>
  9. #include <osg/StateAttribute>
  10. #include <osg/CullFace>
  11. #include <osg/Texture>
  12. #include <osgDB/Registry>
  13. #include <osgText/Text>
  14. #include <osg/CameraNode>
  15. #include <osg/Matrix>
  16. #include <osgText/Font>
  17. #include <osg/Depth>
  18. #include <sstream>
  19. void main()
  20. {
  21.         osg::Camera *camera=new osg::CameraNode;
  22.         camera->setClearColor(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
  23.         camera->setProjectionMatrix(osg::Matrix::ortho2D(0,1280,0,1024));
  24.         camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
  25.         camera->setViewMatrix(osg::Matrix::identity());
  26.         camera->setClearMask(GL_DEPTH_BUFFER_BIT);
  27.         camera->setRenderOrder(osg::CameraNode::POST_RENDER);

  28.        
  29.         osg::ref_ptr<osg::Geode> geode=new osg::Geode ;
  30.         osg::ref_ptr<osg::TessellationHints> hits=new osg::TessellationHints;
  31.         hits->setDetailRatio(5.0f);
  32.         osg::ref_ptr<osg::ShapeDrawable> box=new osg::ShapeDrawable(new osg::Box(osg::Vec3(1.0f,1.0f,1.0f),1.0f),hits);
  33.         osg::ref_ptr<osg::ShapeDrawable> sphere=new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(3.0f,3.0f,3.0f),1.0f),hits);
  34.         osg::Vec4f color(1.0f,1.0f,0.0f,1.0f);
  35.         box->setColor(color);
  36.         sphere->setColor(color);
  37.         osg::StateSet *state=box->getOrCreateStateSet();
  38.         //osg::CullFace *cf=new osg::CullFace(osg::CullFace::BACK);
  39.         //state->setAttributeAndModes(cf);
  40.         state->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
  41.         osg::StateSet *ss=sphere->getOrCreateStateSet();
  42.         ss->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
  43.         geode->addDrawable(box);
  44.         geode->addDrawable(sphere);
  45.     camera->addChild(geode);
  46.        
  47.         //osg::ref_ptr<osgText::Font> font=osgText::readFontFile("fonts/times.ttf");
  48.         std::string font("fonts/Vera.ttf");
  49.         osg::ref_ptr<osgText::Text> text=new osgText::Text;
  50.         geode->addDrawable(text);
  51.         text->setFont(font);
  52.         text->setText("This is a simple example");
  53.         text->setText("Hello");
  54.         text->setPosition(osg::Vec3(150.0f,800.0f,0.0f));
  55.         text->setAxisAlignment(osgText::Text::SCREEN);
  56.         text->setAlignment(osgText::Text::CENTER_TOP);
  57.         text->setCharacterSize(30.0f);
  58.         text->setCharacterSizeMode(osgText::Text::SCREEN_COORDS);
  59.         text->setFontResolution(128,128);
  60.         text->setColor(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
  61.         text->setDataVariance(osg::Object::DYNAMIC);       

  62.         /*
  63.         osg::StateSet *st=geode->getOrCreateStateSet();
  64.         st->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF);
  65.         st->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
  66.         camera->addChild(st);
  67.         */       


  68.        
  69.         camera->addChild(geode);
  70.         osg::Group *root=new osg::Group();
  71.         //root->addChild(camera);
  72.         root->addChild(camera);
  73. //        bool osgDB::writeNodeFile(root,"start.osg");
  74.         osgViewer::Viewer viewer;
  75.         //viewer.getCamera()->setClearColor(osg::Vec4(0.0f,0.0f,1.0f,1.0f));
  76.         viewer.setSceneData(root);
  77.         viewer.realize();
  78.         viewer.run();
  79. }
复制代码
现在的情况是编译没问题,运行只有一个背景。。。
请版主帮忙指出问题,怎么改,不要让我直接换成HUD的方式,主要是想通过纠错学习,谢谢!!

该用户从未签到

 楼主| 发表于 2009-6-18 22:14:00 | 显示全部楼层
增加说明:
程序的功能是:画出一个正方体和一个球体,想在一个地方加些文字,参考的HUD的方法,但是没有照搬,用自己的理解编的,因为是初学,看了很长时间没发现问题,所以上来麻烦斑竹了!!

该用户从未签到

发表于 2009-6-18 22:38:50 | 显示全部楼层
仔细检查一下您的摄像机的投影矩阵和观察矩阵,我没有仔细看,不过您似乎没有对它们作正确的设置

该用户从未签到

发表于 2009-6-18 23:12:01 | 显示全部楼层
模型的HUD显示需要设置合适的正交矩阵~~~~~

该用户从未签到

 楼主| 发表于 2009-6-19 09:17:05 | 显示全部楼层
谢谢版主热心回复,我再看看~~~~

该用户从未签到

 楼主| 发表于 2009-6-19 11:00:57 | 显示全部楼层
字终于弄出来了!!!
在这里想总结一下问题:
1.程序运行后只有背景,什么东西也没有
正像版主说的,正交投影矩阵设置的问题。具体来说是绘制的图形坐标没有与设置的正交矩阵配合好。后来改了图形坐标,终于有图形了。
2.出来了图形,但还是没有文字,而且本来绘制的三维图形变成了二维的
这是因为我把图形和文字都设置在一个2D的正交矩阵摄像机下,所以图形显示出来就二维的,而且不能拖动,这是因为把图形也设置成了HUD的形式。
3.至于文字没出来
这个问题最不是问题,文字的大小设置的不合理,太小了,后来放大了10多倍终于出来了。。。
最后,再次感谢版主的热心回复。

该用户从未签到

发表于 2009-6-19 12:20:37 | 显示全部楼层
不用客气~~~~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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