Show
Ignore:
Timestamp:
02/20/11 10:55:20 (4 years ago)
Author:
robert
Message:

Added --fov and --light-pos and --light-dir command line parameters

Files:
1 modified

Legend:

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

    r12159 r12174  
    596596        return 1; 
    597597    } 
    598  
    599     bool postionalLight = true; 
    600     while (arguments.read("--positionalLight")) postionalLight = true; 
    601     while (arguments.read("--directionalLight")) postionalLight = false; 
     598     
     599    float fov = 0.0; 
     600    while (arguments.read("--fov",fov)) {} 
     601 
     602    osg::Vec4 lightpos(0.0,0.0,1,0.0); 
     603    while (arguments.read("--positionalLight")) { lightpos.set(0.5,0.5,1.5,1.0); } 
     604    while (arguments.read("--directionalLight")) { lightpos.set(0.0,0.0,1,0.0); } 
     605 
     606    while ( arguments.read("--light-pos", lightpos.x(), lightpos.y(), lightpos.z(), lightpos.w())) {} 
     607    while ( arguments.read("--light-pos", lightpos.x(), lightpos.y(), lightpos.z())) { lightpos.w()=1.0; } 
     608    while ( arguments.read("--light-dir", lightpos.x(), lightpos.y(), lightpos.z())) { lightpos.w()=0.0; } 
     609 
    602610 
    603611    while (arguments.read("--castsShadowMask", CastsShadowTraversalMask )); 
     
    642650    viewer.addEventHandler(new osgViewer::RecordCameraPathHandler); 
    643651 
     652    // add the window size toggle handler 
     653    viewer.addEventHandler(new osgViewer::WindowSizeHandler); 
     654 
    644655    // add the threading handler 
    645656    viewer.addEventHandler( new osgViewer::ThreadingHandler() ); 
     
    786797    osg::BoundingBox bb = cbbv.getBoundingBox(); 
    787798 
    788     osg::Vec4 lightpos; 
    789  
    790     if (postionalLight) 
    791     { 
    792         lightpos.set(bb.center().x(), bb.center().y(), bb.zMax() + bb.radius()*2.0f  ,1.0f); 
    793     } 
    794     else 
    795     { 
    796         lightpos.set(0.5f,0.25f,0.8f,0.0f); 
    797     } 
    798  
    799  
     799    if (lightpos.w()==1.0) 
     800    { 
     801        lightpos.x() = bb.xMin()+(bb.xMax()-bb.xMin())*lightpos.x(); 
     802        lightpos.y() = bb.yMin()+(bb.yMax()-bb.yMin())*lightpos.y(); 
     803        lightpos.z() = bb.zMin()+(bb.zMax()-bb.zMin())*lightpos.z(); 
     804    } 
     805       
    800806    if ( arguments.read("--base")) 
    801807    { 
     
    856862    // create the windows and run the threads. 
    857863    viewer.realize(); 
     864     
     865    if (fov!=0.0) 
     866    { 
     867        double fovy, aspectRatio, zNear, zFar; 
     868        viewer.getCamera()->getProjectionMatrix().getPerspective(fovy, aspectRatio, zNear, zFar); 
     869 
     870        std::cout << "Setting FOV to " << fov << std::endl; 
     871        viewer.getCamera()->getProjectionMatrix().makePerspective(fov, aspectRatio, zNear, zFar); 
     872    } 
    858873 
    859874    // it is done after viewer.realize() so that the windows are already initialized 
     
    910925            float t = viewer.getFrameStamp()->getSimulationTime(); 
    911926 
    912             if (postionalLight) 
     927            if (lightpos.w()==1.0) 
    913928            { 
    914929                lightpos.set(bb.center().x()+sinf(t)*bb.radius(), bb.center().y() + cosf(t)*bb.radius(), bb.zMax() + bb.radius()*3.0f  ,1.0f);