[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27130] trunk/blender/source/gameengine/ GamePlayer/ghost/GPG_ghost.cpp: BGE Dome: Console arguments: angle, tilt, mode and warpdata (not working yet)

Dalai Felinto dfelinto at gmail.com
Thu Feb 25 00:01:50 CET 2010


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 */





More information about the Bf-blender-cvs mailing list