查看: 1054|回复: 7

osg2.9.12 文字bug

[复制链接]

该用户从未签到

发表于 2011-7-7 14:10:40 | 显示全部楼层 |阅读模式
最近换了2.9.12发现一个bug,如下,当叶节点中加入两个text->setAxisAlignment( osgText::Text::SCREEN );此类型的文字时,将不显示文字,
而将第二个文字改为text->setAxisAlignment( osgText::Text::XZ_PLANE );之后便能够正常显示。
将osg改为2.8.2版就没有这个bug。


  1. {
  2.         osg::ref_ptr<osgText::Text> text = new osgText::Text;
  3.         text->setFont( font.get() );
  4.         text->setColor( white );
  5.         text->setCharacterSize( .15f );
  6.         text->setPosition( osg::Vec3( 1.f, 0.f, 1.f ) );
  7.         text->setAxisAlignment( osgText::Text::SCREEN );
  8.         text->setText( "Top-right" );
  9.         geode1->addDrawable( text.get() );
  10. }
  11. {
  12.   osg::ref_ptr<osgText::Text> text = new osgText::Text;
  13.   text->setFont( font.get() );
  14.   text->setColor( white );
  15.   text->setCharacterSize( .4f );
  16.   text->setPosition( osg::Vec3( 1.f, 0.f, 1.f ) );
  17.   text->setAxisAlignment( osgText::Text::SCREEN );
  18.   //text->setAxisAlignment( osgText::Text::XZ_PLANE );
  19.   text->setText( "Top-right" );
  20.   geode1->addDrawable( text.get() );
  21.   }
  22. root->addChild(geode1.get());
复制代码

该用户从未签到

 楼主| 发表于 2011-7-7 14:11:34 | 显示全部楼层
谁装了osg3.0了 没事的话 测试一下 想换3.0

该用户从未签到

发表于 2011-7-8 08:15:04 | 显示全部楼层
能否给出您全部的源代码以供测试?

该用户从未签到

 楼主| 发表于 2011-7-8 15:25:27 | 显示全部楼层
  1. #include <osg/ref_ptr>
  2. #include <osg/Notify>
  3. #include <osg/Geode>
  4. #include <osg/Geometry>
  5. #include <osg/Group>

  6. #include <osgText/Font>
  7. #include <osgText/Text>

  8. #include <osgDB/Registry>
  9. #include <osgDB/WriteFile>

  10. #include <iostream>

  11. using std::endl;

  12. osg::ref_ptr<osg::Group> createSceneGraph()
  13. {
  14. // Create the root (and only) node.
  15. osg::ref_ptr<osg::Group> root = new osg::Group();

  16. osg::ref_ptr<osgText::Font> font = osgText::readFontFile( "fonts/arial.ttf" );
  17. osg::Vec4 white( 1.f, 1.f, 1.f, 1.f );

  18. osg::ref_ptr<osg::Geode> geode1 = new osg::Geode();
  19. {
  20. osg::ref_ptr<osgText::Text> text = new osgText::Text;
  21. text->setFont( font.get() );
  22. text->setColor( white );
  23. text->setCharacterSize( .15f );
  24. text->setPosition( osg::Vec3( 1.f, 0.f, 1.f ) );
  25. text->setAxisAlignment( osgText::Text::SCREEN );
  26. text->setText( "Top-right" );
  27. geode1->addDrawable( text.get() );
  28. }
  29. {
  30. osg::ref_ptr<osgText::Text> text = new osgText::Text;
  31. text->setFont( font.get() );
  32. text->setColor( white );
  33. text->setCharacterSize( .4f );
  34. text->setPosition( osg::Vec3( 1.f, 0.f, 1.f ) );
  35. text->setAxisAlignment( osgText::Text::SCREEN );
  36. //text->setAxisAlignment( osgText::Text::XZ_PLANE );
  37. text->setText( "Top-right" );
  38. geode1->addDrawable( text.get() );

  39. }
  40. root->addChild(geode1.get());
  41. {
  42. osg::ref_ptr<osgText::Text> text = new osgText::Text;
  43. text->setFont( font.get() );
  44. text->setFontResolution( 128, 128 );
  45. text->setColor( white );
  46. text->setCharacterSize( .4f );
  47. text->setPosition( osg::Vec3( 0.f, 0.f, -1.04f ) );
  48. text->setAxisAlignment( osgText::Text::XZ_PLANE );
  49. text->setAlignment( osgText::Text::CENTER_TOP );
  50. text->setText( "Hello OSG World" );
  51. osg::ref_ptr<osg::Geode> geode = new osg::Geode;
  52. geode->addDrawable( text.get() );
  53. root->addChild(geode.get());
  54. }

  55. return root.get();
  56. }


  57. int
  58. main( int argc, char** argv )
  59. {
  60. osg::ref_ptr<osg::Group> root = createSceneGraph();
  61. if (!root.valid())
  62. {
  63. osg::notify(osg::FATAL) << "Failed in createSceneGraph()." << endl;
  64. return 1;
  65. }

  66. std::string out( "Text.osg" );
  67. if ( !(osgDB::writeNodeFile( *(root.get()), out )) )
  68. {
  69. osg::notify(osg::FATAL) << "Failed in osgDB::writeNodeFile()." << endl;
  70. return 1;
  71. }

  72. osg::notify(osg::ALWAYS) << "Successfully wrote "" << out << "". Execute "osgviewer " << out << "" to view." << endl;
  73. }
复制代码

该用户从未签到

 楼主| 发表于 2011-7-8 15:27:49 | 显示全部楼层
代码如上  分别在osg2.9.12下发现的问题
osg2.8.2下正常

该用户从未签到

 楼主| 发表于 2011-7-8 15:28:05 | 显示全部楼层
代码如上  分别在osg2.9.12下发现的问题
osg2.8.2下正常

该用户从未签到

发表于 2011-7-8 15:55:27 | 显示全部楼层
SCREEN的文字对象是没有包围体的,因此如果两个对象都是SCREEN类型的话,场景不存在包围体信息,也就无法计算文字对齐屏幕的方式了,给任意text加一个setInitialBound就可以正常显示了。

实际工程中我想也不可能出现这种情况。

该用户从未签到

 楼主| 发表于 2011-7-8 17:05:49 | 显示全部楼层
回复 7# array


    谢谢array的解答,以上两个screen没有包围体,但是下面那个XZ_PLANE的文字存在包围体吧,
所以场景中还是有包围体的啊,而且同样的代码用osg2.8.2编译就正常
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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