Show
Ignore:
Timestamp:
03/12/04 21:23:55 (10 years ago)
Author:
robert
Message:

Cleaned up osgmovie example so it no longer depends upon LibMpeg?3, just
using readImageFile instead.

Files:
1 modified

Legend:

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

    r2794 r2809  
    1616#include <osgGA/TrackballManipulator> 
    1717 
    18 #include <math.h> 
     18osg::Geometry* createTexturedQuadGeometry(const osg::Vec3& pos,float width,float height, osg::Image* image) 
     19{ 
     20    bool useTextureRectangle = true; 
     21    if (useTextureRectangle) 
     22    { 
     23        osg::Geometry* pictureQuad = osg::createTexturedQuadGeometry(pos, 
     24                                           osg::Vec3(width,0.0f,0.0f), 
     25                                           osg::Vec3(0.0f,0.0f,height), 
     26                                           image->s(),image->t()); 
     27                                        
     28        pictureQuad->getOrCreateStateSet()->setTextureAttributeAndModes(0, 
     29                    new osg::TextureRectangle(image), 
     30                    osg::StateAttribute::ON); 
     31                     
     32        return pictureQuad; 
     33    } 
     34    else 
     35    { 
     36        osg::Geometry* pictureQuad = osg::createTexturedQuadGeometry(pos, 
     37                                           osg::Vec3(width,0.0f,0.0f), 
     38                                           osg::Vec3(0.0f,0.0f,height), 
     39                                           1.0f,1.0f); 
     40                                        
     41        pictureQuad->getOrCreateStateSet()->setTextureAttributeAndModes(0, 
     42                    new osg::Texture2D(image), 
     43                    osg::StateAttribute::ON); 
    1944 
    20 #include "MpegImageStream.h" 
    21  
    22  
    23 /* 
    24  * Create morphed textured geometry 
    25  */ 
    26 osg::Geode* morphGeom(osg::Vec3Array* coords, 
    27                       osg::Vec3Array* normals, 
    28                       osg::Vec2Array* texCoords, 
    29                       osg::Image* image, 
    30                       osg::TexMat* texMat) 
    31 { 
    32     /* 
    33      * GeoSet 
    34      */ 
    35     osg::Geometry* gset = new osg::Geometry(); 
    36  
    37     gset->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::POLYGON,0,4)); 
    38  
    39     gset->setVertexArray(coords); 
    40  
    41     gset->setNormalArray(normals); 
    42     gset->setNormalBinding(osg::Geometry::BIND_OVERALL); 
    43  
    44     gset->setTexCoordArray(0,texCoords); 
    45  
    46     /* 
    47      * StateSet 
    48      */ 
    49     osg::StateSet* state = new osg::StateSet; 
    50  
    51     osg::Material* mtl = new osg::Material(); 
    52     osg::Vec4 white( 1.0f, 1.0f, 1.0f, 1.0f ); 
    53     mtl->setEmission( osg::Material::FRONT_AND_BACK, white ); 
    54     mtl->setAmbient( osg::Material::FRONT_AND_BACK, white ); 
    55     mtl->setDiffuse( osg::Material::FRONT_AND_BACK, white ); 
    56     mtl->setSpecular( osg::Material::FRONT_AND_BACK, white ); 
    57     state->setAttribute(mtl); 
    58  
    59     //osg::Texture2D* tex = new osg::Texture2D; 
    60     osg::TextureRectangle* tex = new osg::TextureRectangle; 
    61     if (!image) { 
    62         image = osgDB::readImageFile("lz.rgb"); 
     45        return pictureQuad; 
    6346    } 
    64     tex->setImage(image); 
    65     tex->setFilter(osg::Texture::MIN_FILTER, osg::Texture::NEAREST); 
    66     tex->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP); 
    67     tex->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP); 
    68     state->setTextureAttributeAndModes(0, tex, osg::StateAttribute::ON); 
    69  
    70     if (texMat) 
    71         state->setTextureAttributeAndModes(0, texMat, osg::StateAttribute::ON); 
    72  
    73     // don't cull faces 
    74     osg::CullFace* cull = new osg::CullFace; 
    75     state->setAttributeAndModes(cull, osg::StateAttribute::OFF); 
    76  
    77     /* 
    78      * Geode 
    79      */ 
    80     osg::Geode* geode = new osg::Geode; 
    81     geode->setStateSet( state ); 
    82     geode->addDrawable( gset ); 
    83  
    84     return geode; 
    8547} 
    8648 
    87  
    88 /* 
    89  * Main 
    90  */ 
    9149int main(int argc, char** argv) 
    9250{ 
    93     // coordinates 
    94     osg::Vec3Array* coords = new osg::Vec3Array(4); 
    95     (*coords)[0].set( -1.0f, 0.0f, -1.0f ); 
    96     (*coords)[1].set(  1.0f, 0.0f, -1.0f ); 
    97     (*coords)[2].set(  1.0f, 0.0f,  1.0f ); 
    98     (*coords)[3].set( -1.0f, 0.0f,  1.0f ); 
    99  
    100  
    101     // normals 
    102     osg::Vec3Array* normals = new osg::Vec3Array(1); 
    103     (*normals)[0].set( 0.0f, 1.0f, 0.0f ); 
    104  
    105     // texture coordinates 
    106     osg::Vec2Array* texCoords = new osg::Vec2Array(4); 
    107     (*texCoords)[0].set(0.0f, 0.0f); 
    108     (*texCoords)[1].set(1.0f, 0.0f); 
    109     (*texCoords)[2].set(1.0f, 1.0f); 
    110     (*texCoords)[3].set(0.0f, 1.0f); 
    111  
    112  
    113     // open MpegImageStream 
    114     osg::MpegImageStream* mpeg = NULL; 
    115     if (argc > 1) { 
    116         mpeg = new osg::MpegImageStream(argv[1]); 
    117         mpeg->start(); 
    118     } 
    119  
    120     osg::TexMat* texMat = new osg::TexMat; 
    121     texMat->setMatrix(osg::Matrix::scale(mpeg->s(),mpeg->t(),1.0f)); 
    122  
    123  
    124     // Create morphed geometry 
    125     osg::Geode* geode = morphGeom(coords, 
    126                                   normals, texCoords, mpeg, texMat); 
    127     //coordMorph.addGeode(geode); 
    128  
    129  
    130  
    131  
    13251    // use an ArgumentParser object to manage the program arguments. 
    13352    osg::ArgumentParser arguments(&argc,argv); 
     
    15574        return 1; 
    15675    } 
     76 
     77    osg::Geode* geode = new osg::Geode; 
     78    osg::Vec3 pos(0.0f,0.0f,0.0f); 
     79     
     80    for(int i=1;i<arguments.argc();++i) 
     81    { 
     82        if (arguments.isString(i)) 
     83        { 
     84            osg::Image* image = osgDB::readImageFile(arguments[i]); 
     85            geode->addDrawable(createTexturedQuadGeometry(pos,image->s(),image->t(),image)); 
     86        } 
     87 
     88    } 
     89 
    15790 
    15891    // report any errors if they have occured when parsing the program aguments. 
     
    190123        viewer.sync(); 
    191124         
    192         // update the geoemtry 
    193         //coordMorph.update(viewer.getFrameStamp()->getReferenceTime()); 
    194  
    195125        // update the scene by traversing it with the the update visitor which will 
    196126        // call all node update callbacks and animations.