Changeset 11250 for OpenSceneGraph/trunk/examples/osgfont/osgfont.cpp
- Timestamp:
- 03/18/10 18:10:48 (3 years ago)
- Files:
-
- 1 modified
-
OpenSceneGraph/trunk/examples/osgfont/osgfont.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/examples/osgfont/osgfont.cpp
r9705 r11250 6 6 #include <osgViewer/Viewer> 7 7 #include <osgViewer/ViewerEventHandlers> 8 #include <osgGA/StateSetManipulator> 8 9 9 10 void textInfo(osgText::Text* text) 10 11 { 11 const osgText::Text::TextureGlyphQuadMap& tgqm = text->getTextureGlyphQuadMap();12 const osgText::Text::TextureGlyphQuadMap& tgqm = text->getTextureGlyphQuadMap(); 12 13 13 const osgText::Text::TextureGlyphQuadMap::const_iterator tgqmi = tgqm.begin();14 const osgText::Text::TextureGlyphQuadMap::const_iterator tgqmi = tgqm.begin(); 14 15 15 const osgText::Text::GlyphQuads& gq = tgqmi->second;16 const osgText::Text::GlyphQuads& gq = tgqmi->second; 16 17 17 osgText::String& s = text->getText();18 osgText::String& s = text->getText(); 18 19 19 for(unsigned int i = 0; i < s.size(); i++)20 {21 osg::Vec2 ul = gq.getCoords()[0 + (i * 4)]; // upperLeft22 osg::Vec2 ll = gq.getCoords()[1 + (i * 4)]; // lowerLeft23 osg::Vec2 lr = gq.getCoords()[2 + (i * 4)]; // lowerRight24 osg::Vec2 ur = gq.getCoords()[3 + (i * 4)]; // upperRight20 for(unsigned int i = 0; i < s.size(); i++) 21 { 22 osg::Vec2 ul = gq.getCoords()[0 + (i * 4)]; // upperLeft 23 osg::Vec2 ll = gq.getCoords()[1 + (i * 4)]; // lowerLeft 24 osg::Vec2 lr = gq.getCoords()[2 + (i * 4)]; // lowerRight 25 osg::Vec2 ur = gq.getCoords()[3 + (i * 4)]; // upperRight 25 26 26 /*27 osg::Vec3 ul = gq.getTransformedCoords(0)[0 + (i * 4)];28 osg::Vec3 ll = gq.getTransformedCoords(0)[1 + (i * 4)];29 osg::Vec3 lr = gq.getTransformedCoords(0)[2 + (i * 4)];30 osg::Vec3 ur = gq.getTransformedCoords(0)[3 + (i * 4)];31 */27 /* 28 osg::Vec3 ul = gq.getTransformedCoords(0)[0 + (i * 4)]; 29 osg::Vec3 ll = gq.getTransformedCoords(0)[1 + (i * 4)]; 30 osg::Vec3 lr = gq.getTransformedCoords(0)[2 + (i * 4)]; 31 osg::Vec3 ur = gq.getTransformedCoords(0)[3 + (i * 4)]; 32 */ 32 33 33 osg::notify(osg::NOTICE)34 << "'" << static_cast<char>(s[i]) << "':"35 << " width(" << lr.x() - ll.x() << ")"36 << " height(" << ul.y() - ll.y() << ")" << std::endl << "\t"37 << "ul(" << ul << "), "38 << "ll(" << ll << "), "39 << "lr(" << lr << "), "40 << "ur(" << ur << ")"41 << std::endl42 ;43 }34 osg::notify(osg::NOTICE) 35 << "'" << static_cast<char>(s[i]) << "':" 36 << " width(" << lr.x() - ll.x() << ")" 37 << " height(" << ul.y() - ll.y() << ")" << std::endl << "\t" 38 << "ul(" << ul << "), " 39 << "ll(" << ll << "), " 40 << "lr(" << lr << "), " 41 << "ur(" << ur << ")" 42 << std::endl 43 ; 44 } 44 45 } 45 46 46 47 osg::Camera* createOrthoCamera(double width, double height) 47 48 { 48 osg::Camera* camera = new osg::Camera();49 osg::Camera* camera = new osg::Camera(); 49 50 50 camera->getOrCreateStateSet()->setMode(51 GL_LIGHTING,52 osg::StateAttribute::PROTECTED | osg::StateAttribute::OFF53 );51 camera->getOrCreateStateSet()->setMode( 52 GL_LIGHTING, 53 osg::StateAttribute::PROTECTED | osg::StateAttribute::OFF 54 ); 54 55 55 osg::Matrix m = osg::Matrix::ortho2D(0.0f, width, 0.0f, height);56 osg::Matrix m = osg::Matrix::ortho2D(0.0f, width, 0.0f, height); 56 57 57 camera->setProjectionMatrix(m);58 camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);59 camera->setViewMatrix(osg::Matrix::identity());60 camera->setClearMask(GL_DEPTH_BUFFER_BIT);61 camera->setRenderOrder(osg::Camera::POST_RENDER);58 camera->setProjectionMatrix(m); 59 camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF); 60 camera->setViewMatrix(osg::Matrix::identity()); 61 camera->setClearMask(GL_DEPTH_BUFFER_BIT); 62 camera->setRenderOrder(osg::Camera::POST_RENDER); 62 63 63 return camera;64 return camera; 64 65 } 65 66 66 67 osgText::Text* createLabel(const std::string& l, const char* f, unsigned int size) 67 68 { 68 static osg::Vec3 pos(10.0f, 10.0f, 0.0f);69 static osg::Vec3 pos(10.0f, 10.0f, 0.0f); 69 70 70 osgText::Text* label = new osgText::Text();71 osgText::Font* font = osgText::readFontFile(f);71 osgText::Text* label = new osgText::Text(); 72 osgText::Font* font = osgText::readFontFile(f); 72 73 73 label->setFont(font);74 label->setCharacterSize(size);75 label->setFontResolution(size, size);76 label->setColor(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f));77 label->setPosition(pos);78 label->setAlignment(osgText::Text::LEFT_BOTTOM);74 label->setFont(font); 75 label->setCharacterSize(size); 76 label->setFontResolution(size, size); 77 label->setColor(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f)); 78 label->setPosition(pos); 79 label->setAlignment(osgText::Text::LEFT_BOTTOM); 79 80 80 // It seems to be important we do this last to get best results?81 label->setText(l);81 // It seems to be important we do this last to get best results? 82 label->setText(l); 82 83 83 textInfo(label);84 textInfo(label); 84 85 85 pos.y() += size + 10.0f;86 pos.y() += size + 10.0f; 86 87 87 return label;88 return label; 88 89 } 89 90 … … 92 93 int main(int argc, char** argv) 93 94 { 94 osgViewer::Viewer viewer;95 osg::ArgumentParser args(&argc, argv);95 osgViewer::Viewer viewer; 96 osg::ArgumentParser args(&argc, argv); 96 97 97 // Make sure we have the minimum args...98 if(argc <= 2)99 {100 osg::notify(osg::FATAL) << "usage: " << args[0] << " fontfile size1 [size2 ...]" << std::endl;98 // Make sure we have the minimum args... 99 if(argc <= 2) 100 { 101 osg::notify(osg::FATAL) << "usage: " << args[0] << " fontfile size1 [size2 ...]" << std::endl; 101 102 102 return 1;103 }103 return 1; 104 } 104 105 105 viewer.addEventHandler(new osgViewer::StatsHandler());106 viewer.addEventHandler(new osgViewer::WindowSizeHandler());107 106 108 osg::Group* group = new osg::Group(); 109 osg::Camera* camera = createOrthoCamera(1280.0f, 1024.0f); 107 viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); 108 viewer.addEventHandler(new osgViewer::StatsHandler()); 109 viewer.addEventHandler(new osgViewer::WindowSizeHandler()); 110 110 111 // Create the list of desired sizes. 112 Sizes sizes;111 osg::Group* group = new osg::Group(); 112 osg::Camera* camera = createOrthoCamera(1280.0f, 1024.0f); 113 113 114 for(int i = 2; i < argc; i++) 115 { 116 if(!args.isNumber(i)) continue; 114 // Create the list of desired sizes. 115 Sizes sizes; 117 116 118 sizes.push_back(std::atoi(args[i])); 119 } 117 for(int i = 2; i < argc; i++) 118 { 119 if(!args.isNumber(i)) continue; 120 120 121 osg::Geode* geode = new osg::Geode(); 121 sizes.push_back(std::atoi(args[i])); 122 } 122 123 123 // Add all of our osgText drawables. 124 for(Sizes::const_iterator i = sizes.begin(); i != sizes.end(); i++) 125 { 126 std::stringstream ss; 124 osg::Geode* geode = new osg::Geode(); 127 125 128 ss << *i << " 1234567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 126 // Add all of our osgText drawables. 127 for(Sizes::const_iterator i = sizes.begin(); i != sizes.end(); i++) 128 { 129 std::stringstream ss; 129 130 130 geode->addDrawable(createLabel(ss.str(), args[1], *i)); 131 } 131 ss << *i << " 1234567890 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 132 132 133 camera->addChild(geode); 133 geode->addDrawable(createLabel(ss.str(), args[1], *i)); 134 } 134 135 135 group->addChild(camera);136 camera->addChild(geode); 136 137 137 viewer.setSceneData(group);138 group->addChild(camera); 138 139 139 return viewer.run(); 140 viewer.setSceneData(group); 141 142 return viewer.run(); 140 143 } 141 144
