Revision: 27130
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27130
Author:   dfelinto
Date:     2010-02-25 00:01:49 +0100 (Thu, 25 Feb 2010)

Log Message:
-----------
BGE Dome: Console arguments: angle, tilt, mode and warpdata (not working yet)

2Do:
(1) open external warpdata file
(2) documentation
(3) preserve scene settings (at least scene->gm.dome) even if you load a new 
file inside the game (e.g. Yo Frankie loading new levels)
otherwise it's a nightmare to update all your files every time you change your 
projection system. See note.
Maybe SYS_WriteCommandLineInt/Float/String can be used for that. Gotta 
investigate further.

* Note: an external warpdata file is a must ! Currently every time you need to 
calibrate your system you have to update the warp file in all your demo files. 
This is terrible. I'm glad I *now* have a dome near by to test it ;)
* FYI: A recent 'Yo Frankie in a dome' video if you want to see how it works: 
http://www.vimeo.com/9629626 I'm going to record a better one tomorrow.

Modified Paths:
--------------
    trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp

Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp      
2010-02-24 21:53:16 UTC (rev 27129)
+++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp      
2010-02-24 23:01:49 UTC (rev 27130)
@@ -195,6 +195,17 @@
        printf("                   anaglyph         (Red-Blue glasses)\n");
        printf("                   vinterlace       (Vertical interlace for 
autostereo display)\n");
        printf("                             depending on the type of stereo 
you want\n\n");
+       printf("  -D: start player in dome mode\n");
+       printf("       --Optional parameters--\n");
+       printf("       angle = field of view in degrees\n");
+       printf("       tilt = tilt angle in degrees\n");
+       printf("       warpdata = a file to use for warping the image\n");      
+       printf("       mode: fisheye                (Fisheye)\n");
+       printf("             truncatedfront         (Front-Truncated)\n");
+       printf("             truncatedrear          (Rear-Truncated)\n");
+       printf("             cubemap                (Cube Map)\n");
+       printf("             sphericalpanoramic     (Spherical Panoramic)\n");
+       printf("                             depending on the type of dome you 
are using\n\n");
 #ifndef _WIN32
        printf("  -i: parent windows ID \n\n");
 #endif
@@ -310,6 +321,11 @@
        RAS_IRasterizer::StereoMode stereomode = 
RAS_IRasterizer::RAS_STEREO_NOSTEREO;
        bool stereoWindow = false;
        bool stereoParFound = false;
+       int stereoFlag = STEREO_NOSTEREO;
+       int domeFov = -1;
+       int domeTilt = -200;
+       int domeMode = 0;
+       char* domeWarp = NULL;
        int windowLeft = 100;
        int windowTop = 100;
        int windowWidth = 640;
@@ -525,30 +541,31 @@
                                                stereomode = 
RAS_IRasterizer::RAS_STEREO_NOSTEREO;
                                        
                                        // only the hardware pageflip method 
needs a stereo window
-                                       if(!strcmp(argv[i], "hwpageflip")) {
+                                       else if(!strcmp(argv[i], "hwpageflip")) 
{
                                                stereomode = 
RAS_IRasterizer::RAS_STEREO_QUADBUFFERED;
                                                stereoWindow = true;
                                        }
-                                       if(!strcmp(argv[i], "syncdoubling"))
+                                       else if(!strcmp(argv[i], 
"syncdoubling"))
                                                stereomode = 
RAS_IRasterizer::RAS_STEREO_ABOVEBELOW;
                                        
-                                       if(!strcmp(argv[i], "anaglyph"))
+                                       else if(!strcmp(argv[i], "anaglyph"))
                                                stereomode = 
RAS_IRasterizer::RAS_STEREO_ANAGLYPH;
                                        
-                                       if(!strcmp(argv[i], "sidebyside"))
+                                       else if(!strcmp(argv[i], "sidebyside"))
                                                stereomode = 
RAS_IRasterizer::RAS_STEREO_SIDEBYSIDE;
                                        
-                                       if(!strcmp(argv[i], "vinterlace"))
+                                       else if(!strcmp(argv[i], "vinterlace"))
                                                stereomode = 
RAS_IRasterizer::RAS_STEREO_VINTERLACE;
                                        
 #if 0
                                        // future stuff
-                                       if(strcmp(argv[i], "stencil")
+                                       else if(!strcmp(argv[i], "stencil")
                                                stereomode = RAS_STEREO_STENCIL;
 #endif
                                        
                                        i++;
                                        stereoParFound = true;
+                                       stereoFlag = STEREO_ENABLED;
                                }
                                else
                                {
@@ -556,6 +573,47 @@
                                        printf("error: too few options for 
stereo argument.\n");
                                }
                                break;
+                       case 'D':
+                               stereoFlag = STEREO_DOME;
+                               stereomode = RAS_IRasterizer::RAS_STEREO_DOME;
+                               i++;
+                               if ((i + 1) < argc)
+                               {
+                                       if(!strcmp(argv[i], "angle")){
+                                               i++;
+                                               domeFov = atoi(argv[i++]);
+                                       }
+                                       if(!strcmp(argv[i], "tilt")){
+                                               i++;
+                                               domeTilt = atoi(argv[i++]);
+                                       }
+                                       if(!strcmp(argv[i], "warpdata")){
+                                               i++;
+                                               domeWarp = argv[i++];
+                                       }
+                                       if(!strcmp(argv[i], "mode")){
+                                               i++;
+                                               if(!strcmp(argv[i], "fisheye"))
+                                                       domeMode = DOME_FISHEYE;
+                                                       
+                                               else if(!strcmp(argv[i], 
"truncatedfront"))
+                                                       domeMode = 
DOME_TRUNCATED_FRONT;
+                                                       
+                                               else if(!strcmp(argv[i], 
"truncatedrear"))
+                                                       domeMode = 
DOME_TRUNCATED_REAR;
+                                                       
+                                               else if(!strcmp(argv[i], 
"cubemap"))
+                                                       domeMode = DOME_ENVMAP;
+                                                       
+                                               else if(!strcmp(argv[i], 
"sphericalpanoramic"))
+                                                       domeMode = 
DOME_PANORAM_SPH;
+
+                                               else
+                                                       printf("error: %s is 
not a valid dome mode.\n", argv[i]);
+                                       }
+                                       i++;
+                               }
+                               break;
                        default:
                                printf("Unkown argument: %s\n", argv[i++]);
                                break;
@@ -714,6 +772,24 @@
                                                                        
stereoWindow = true;
                                                        }
                                                }
+                                               else
+                                                       scene->gm.stereoflag = 
STEREO_ENABLED;
+
+                                               if (stereoFlag == STEREO_DOME){
+                                                       stereomode = 
RAS_IRasterizer::RAS_STEREO_DOME;
+                                                       scene->gm.stereoflag = 
STEREO_DOME;
+                                                       if (domeFov > 89)
+                                                               
scene->gm.dome.angle = domeFov;
+                                                       if (domeTilt > -180)
+                                                               
scene->gm.dome.tilt = domeTilt;
+                                                       if (domeMode > 0)
+                                                               
scene->gm.dome.mode = domeMode;
+                                                       if (domeWarp)
+                                                       {
+                                                               printf("using 
external file as dome warping. Not implemented yet");
+                                                               
//scene->gm.dome.warptext
+                                                       }
+                                               }
                                                
                                                //                              
        GPG_Application app (system, maggie, startscenename);
                                                app.SetGameEngineData(maggie, 
scene, argc, argv); /* this argc cant be argc_py_clamped, since python uses it 
*/


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to