Show
Ignore:
Timestamp:
10/21/14 17:10:27 (4 days ago)
Author:
robert
Message:

Added shaders to support experimental shader based displacement mapping technique osgTerrain::ShaderTerrain?.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgtext/osgtext.cpp

    r12289 r14197  
    5454 
    5555//////////////////////////////////////////////////////////////////////////////////////////////////////// 
    56 //     
     56// 
    5757// Examples of how to set up different text layout 
    5858// 
    5959 
    6060    osg::Vec4 layoutColor(1.0f,1.0f,0.0f,1.0f); 
    61     float layoutCharacterSize = 20.0f;     
    62      
     61    float layoutCharacterSize = 20.0f; 
     62 
    6363    { 
    6464        osgText::Text* text = new osgText::Text; 
     
    104104        geode->addDrawable(text); 
    105105    } 
    106      
    107      
     106 
     107 
    108108//////////////////////////////////////////////////////////////////////////////////////////////////////// 
    109 //     
     109// 
    110110// Examples of how to set up different font resolution 
    111111// 
     
    113113    osg::Vec4 fontSizeColor(0.0f,1.0f,1.0f,1.0f); 
    114114    float fontSizeCharacterSize = 30; 
    115      
     115 
    116116    osg::Vec3 cursor = osg::Vec3(margin*2,windowHeight-margin*2,0.0f); 
    117      
     117 
    118118    { 
    119119        osgText::Text* text = new osgText::Text; 
     
    122122        text->setCharacterSize(fontSizeCharacterSize); 
    123123        text->setPosition(cursor); 
    124          
     124 
    125125        // use text that uses 10 by 10 texels as a target resolution for fonts. 
    126126        text->setFontResolution(10,10); // blocky but small texture memory usage 
    127          
     127 
    128128        text->setText("text->setFontResolution(10,10); // blocky but small texture memory usage"); 
    129129        geode->addDrawable(text); 
    130130    } 
    131      
     131 
    132132    cursor.y() -= fontSizeCharacterSize; 
    133133    { 
     
    137137        text->setCharacterSize(fontSizeCharacterSize); 
    138138        text->setPosition(cursor); 
    139          
     139 
    140140        // use text that uses 20 by 20 texels as a target resolution for fonts. 
    141141        text->setFontResolution(20,20); // smoother but higher texture memory usage (but still quite low). 
    142          
     142 
    143143        text->setText("text->setFontResolution(20,20); // smoother but higher texture memory usage (but still quite low)."); 
    144144        geode->addDrawable(text); 
    145145    } 
    146      
     146 
    147147    cursor.y() -= fontSizeCharacterSize; 
    148148    { 
     
    152152        text->setCharacterSize(fontSizeCharacterSize); 
    153153        text->setPosition(cursor); 
    154          
     154 
    155155        // use text that uses 40 by 40 texels as a target resolution for fonts. 
    156156        text->setFontResolution(40,40); // even smoother but again higher texture memory usage. 
    157          
     157 
    158158        text->setText("text->setFontResolution(40,40); // even smoother but again higher texture memory usage."); 
    159159        geode->addDrawable(text); 
     
    162162 
    163163//////////////////////////////////////////////////////////////////////////////////////////////////////// 
    164 //     
     164// 
    165165// Examples of how to set up different sized text 
    166166// 
    167167 
    168168    osg::Vec4 characterSizeColor(1.0f,0.0f,1.0f,1.0f); 
    169      
     169 
    170170    cursor.y() -= fontSizeCharacterSize*2.0f; 
    171      
     171 
    172172    { 
    173173        osgText::Text* text = new osgText::Text; 
     
    176176        text->setFontResolution(20,20); 
    177177        text->setPosition(cursor); 
    178          
     178 
    179179        // use text that is 20 units high. 
    180180        text->setCharacterSize(20); // small 
    181          
     181 
    182182        text->setText("text->setCharacterSize(20.0f); // small"); 
    183183        geode->addDrawable(text); 
    184184    } 
    185      
     185 
    186186    cursor.y() -= 30.0f; 
    187187    { 
     
    191191        text->setFontResolution(30,30); 
    192192        text->setPosition(cursor); 
    193          
     193 
    194194        // use text that is 30 units high. 
    195195        text->setCharacterSize(30.0f); // medium 
    196          
     196 
    197197        text->setText("text->setCharacterSize(30.0f); // medium"); 
    198198        geode->addDrawable(text); 
    199199    } 
    200      
     200 
    201201    cursor.y() -= 50.0f; 
    202202    { 
     
    206206        text->setFontResolution(40,40); 
    207207        text->setPosition(cursor); 
    208          
     208 
    209209        // use text that is 60 units high. 
    210210        text->setCharacterSize(60.0f); // large 
    211          
     211 
    212212        text->setText("text->setCharacterSize(60.0f); // large"); 
    213213        geode->addDrawable(text); 
     
    216216 
    217217//////////////////////////////////////////////////////////////////////////////////////////////////////// 
    218 //     
     218// 
    219219// Examples of how to set up different alignments 
    220220// 
     
    224224    cursor.x() = 640; 
    225225    cursor.y() = margin*4.0f; 
    226      
     226 
    227227    typedef std::pair<osgText::Text::AlignmentType,std::string> AlignmentPair; 
    228228    typedef std::vector<AlignmentPair> AlignmentList; 
     
    261261            text->setPosition(cursor); 
    262262            text->setDrawMode(osgText::Text::TEXT|osgText::Text::ALIGNMENT|osgText::Text::BOUNDINGBOX); 
    263              
     263 
    264264            text->setAlignment(itr->first); 
    265265            text->setText(itr->second); 
    266              
     266 
    267267            alignmentGeode->addDrawable(text); 
    268268 
    269269 
    270270        } 
    271          
     271 
    272272    } 
    273273 
     
    275275    sequence->setInterval(osg::Sequence::LOOP, 0, -1); 
    276276    sequence->setDuration(1.0f, -1); 
    277      
     277 
    278278    rootNode->addChild(sequence); 
    279279 
    280280 
    281281//////////////////////////////////////////////////////////////////////////////////////////////////////// 
    282 //     
     282// 
    283283// Examples of how to set up different fonts... 
    284284// 
     
    286286    cursor.x() = margin*2.0f; 
    287287    cursor.y() = margin*2.0f; 
    288      
     288 
    289289    osg::Vec4 fontColor(1.0f,0.5f,0.0f,1.0f); 
    290290    float fontCharacterSize = 20.0f; 
    291291    float spacing = 40.0f; 
    292      
     292 
    293293    { 
    294294        osgText::Text* text = new osgText::Text; 
     
    296296        text->setPosition(cursor); 
    297297        text->setCharacterSize(fontCharacterSize); 
    298          
     298 
    299299        text->setFont(0); 
    300300        text->setText("text->setFont(0); // inbuilt font."); 
    301301        geode->addDrawable(text); 
    302302 
    303         cursor.x() = text->getBound().xMax() + spacing ; 
    304     } 
    305      
     303        cursor.x() = text->getBoundingBox().xMax() + spacing ; 
     304    } 
     305 
    306306    { 
    307307        osgText::Font* arial = osgText::readFontFile("fonts/arial.ttf"); 
     
    311311        text->setPosition(cursor); 
    312312        text->setCharacterSize(fontCharacterSize); 
    313          
     313 
    314314        text->setFont(arial); 
    315315        text->setText(arial!=0? 
     
    318318        geode->addDrawable(text); 
    319319 
    320         cursor.x() = text->getBound().xMax() + spacing ; 
    321     } 
    322      
     320        cursor.x() = text->getBoundingBox().xMax() + spacing ; 
     321    } 
     322 
    323323    { 
    324324        osgText::Font* times = osgText::readFontFile("fonts/times.ttf"); 
     
    328328        text->setPosition(cursor); 
    329329        text->setCharacterSize(fontCharacterSize); 
    330          
     330 
    331331        geode->addDrawable(text); 
    332332        text->setFont(times); 
     
    335335                      "unable to load \"fonts/times.ttf\""); 
    336336 
    337         cursor.x() = text->getBound().xMax() + spacing ; 
    338     } 
    339      
     337        cursor.x() = text->getBoundingBox().xMax() + spacing ; 
     338    } 
     339 
    340340    cursor.x() = margin*2.0f; 
    341341    cursor.y() = margin; 
     
    348348        text->setPosition(cursor); 
    349349        text->setCharacterSize(fontCharacterSize); 
    350          
     350 
    351351        text->setFont(dirtydoz); 
    352352        text->setText(dirtydoz!=0? 
     
    355355        geode->addDrawable(text); 
    356356 
    357         cursor.x() = text->getBound().xMax() + spacing ; 
    358     } 
    359      
     357        cursor.x() = text->getBoundingBox().xMax() + spacing ; 
     358    } 
     359 
    360360    { 
    361361        osgText::Font* fudd = osgText::readFontFile("fonts/fudd.ttf"); 
    362      
     362 
    363363        osgText::Text* text = new osgText::Text; 
    364364        text->setColor(fontColor); 
    365365        text->setPosition(cursor); 
    366366        text->setCharacterSize(fontCharacterSize); 
    367          
     367 
    368368        text->setFont(fudd); 
    369369        text->setText(fudd!=0? 
     
    372372        geode->addDrawable(text); 
    373373 
    374         cursor.x() = text->getBound().xMax() + spacing ; 
    375     } 
    376              
    377     return rootNode;     
     374        cursor.x() = text->getBoundingBox().xMax() + spacing ; 
     375    } 
     376 
     377    return rootNode; 
    378378} 
    379379 
     
    387387    osg::Geode* geode  = new osg::Geode; 
    388388 
    389      
     389 
    390390//////////////////////////////////////////////////////////////////////////////////////////////////////// 
    391 //     
     391// 
    392392// Examples of how to set up axis/orientation alignments 
    393393// 
     
    478478    rootNode->addChild(geode); 
    479479 
    480     return rootNode;     
     480    return rootNode; 
    481481} 
    482482 
     
    485485public: 
    486486 
    487     UpdateTextOperation(const osg::Vec3& center, float diameter, osg::Group* group):         
     487    UpdateTextOperation(const osg::Vec3& center, float diameter, osg::Group* group): 
    488488        Operation("UpdateTextOperation", true), 
    489489        _center(center), 
     
    503503        else load(); 
    504504    } 
    505      
     505 
    506506    void update() 
    507507    { 
    508508        // osg::notify(osg::NOTICE)<<"*** Doing update"<<std::endl; 
    509          
     509 
    510510        OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
    511          
     511 
    512512        if (_mergeSubgraph.valid()) 
    513513        { 
     
    526526                _group->removeChild(0,1); 
    527527            } 
    528              
     528 
    529529            _waitOnMergeBlock.release(); 
    530         }         
    531     } 
    532      
     530        } 
     531    } 
     532 
    533533    void load() 
    534534    { 
    535      
     535 
    536536        // osg::notify(osg::NOTICE)<<"Doing load"<<std::endl; 
    537537 
     
    545545            } 
    546546        } 
    547          
     547 
    548548        if (!geode) geode = new osg::Geode; 
    549549 
     
    561561                str.push_back(char(32.0 + (float(rand())/float(RAND_MAX))*128.0f)); 
    562562            } 
    563                          
     563 
    564564            osgText::Text* text = new osgText::Text; 
    565565            text->setDataVariance(osg::Object::DYNAMIC); 
     
    569569            text->setCharacterSize(0.025f * _diameter); 
    570570            text->setAxisAlignment(osgText::Text::SCREEN); 
    571              
     571 
    572572            geode->addDrawable(text); 
    573573        } 
    574574 
    575575 
    576         {         
     576        { 
    577577            OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_mutex); 
    578578            _mergeSubgraph = geode; 
    579579        } 
    580          
     580 
    581581        // osg::notify(osg::NOTICE)<<"Waiting on merge"<<std::endl; 
    582582 
     
    584584 
    585585    } 
    586      
     586 
    587587    virtual void release() 
    588588    { 
     
    596596    unsigned int                _maxNumChildren; 
    597597    unsigned int                _maxNumTextPerGeode; 
    598      
     598 
    599599    OpenThreads::Mutex          _mutex; 
    600600    osg::ref_ptr<osg::Group>    _group; 
     
    602602    AvailableList               _availableSubgraph; 
    603603    OpenThreads::Block          _waitOnMergeBlock; 
    604      
     604 
    605605    unsigned int                _counter; 
    606606 
     
    614614    // construct the viewer. 
    615615    osgViewer::Viewer viewer(arguments); 
    616      
     616 
    617617    typedef std::list< osg::ref_ptr<osg::OperationThread> > Threads; 
    618618 
     
    625625        // construct a multi-threaded text updating test. 
    626626        if (numThreads==0) numThreads = 1; 
    627          
     627 
    628628        // create a group to add everything into. 
    629629        osg::Group* mainGroup = new osg::Group; 
    630          
     630 
    631631        osg::Vec3 center(0.5f,0.5f,0.5f); 
    632632        float diameter = 1.0f; 
    633          
     633 
    634634        osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments); 
    635635        if (loadedModel.valid()) 
    636636        { 
    637637            mainGroup->addChild(loadedModel.get()); 
    638              
     638 
    639639            center = loadedModel->getBound().center(); 
    640640            diameter = loadedModel->getBound().radius() * 2.0f; 
    641641        } 
    642          
     642 
    643643        for(unsigned int i=0; i<numThreads; ++i) 
    644644        { 
     
    648648            // create the background thread 
    649649            osg::OperationThread* operationThread = new osg::OperationThread; 
    650              
     650 
    651651            operationThreads.push_back(operationThread); 
    652652 
     
    670670            mainGroup->addChild(geode); 
    671671        } 
    672                  
    673         viewer.setSceneData(mainGroup);         
     672 
     673        viewer.setSceneData(mainGroup); 
    674674    } 
    675675    else 
     
    678678        osg::Vec3 center(0.0f,0.0f,0.0f); 
    679679        float radius = 1.0f; 
    680          
     680 
    681681        // make sure the root node is group so we can add extra nodes to it. 
    682682        osg::Group* group = new osg::Group; 
     
    716716 
    717717    viewer.run(); 
    718      
     718 
    719719    if (!operationThreads.empty()) 
    720720    {