[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20244] trunk/blender/source: BGE Dome: removing of size option and adding tilt option.

Dalai Felinto dfelinto at gmail.com
Sun May 17 22:37:13 CEST 2009


Revision: 20244
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20244
Author:   dfelinto
Date:     2009-05-17 22:37:13 +0200 (Sun, 17 May 2009)

Log Message:
-----------
BGE Dome: removing of size option and adding tilt option.

- Size adjustments can be accomplished with warp mesh data now. So we get a free spot in the GUI for a tilt option.

- Tilt option to tilt the camera (for planetarium domes).
Angle is in degree from -180 to +180. It's needed for planetarium domes (as this one http://domejunky.blogspot.com/2009/05/dome-corrected-bge.html ).

- This is the last commit regarding dome code I expected to 2.49. I consider this feature full implemented now. (working on docs now)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/src/buttons_scene.c
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Dome.h
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2009-05-17 20:37:13 UTC (rev 20244)
@@ -232,9 +232,9 @@
 	sce->r.stereomode = 1;  // no stereo
 	sce->r.domeangle = 180;
 	sce->r.domemode = 1;
-	sce->r.domesize = 1.0f;
 	sce->r.domeres = 4;
 	sce->r.domeresbuf = 1.0f;
+	sce->r.dometilt = 0;
 
 	sce->r.simplify_subsurf= 6;
 	sce->r.simplify_particles= 1.0f;

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2009-05-17 20:37:13 UTC (rev 20244)
@@ -8082,9 +8082,9 @@
 		for (sce= main->scene.first; sce; sce= sce->id.next) {
 			sce->r.domeangle = 180;
 			sce->r.domemode = 1;
-			sce->r.domesize = 1.0f;
 			sce->r.domeres = 4;
 			sce->r.domeresbuf = 1.0f;
+			sce->r.dometilt = 0;
 		}
 		/* DBVT culling by default */
 		for(wrld=main->world.first; wrld; wrld= wrld->id.next) {

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2009-05-17 20:37:13 UTC (rev 20244)
@@ -318,9 +318,9 @@
 
 	/* Dome variables */
 	short domeres, domemode;
-	short domeangle, pad9;
-	float domesize;
+	short domeangle, dometilt;
 	float domeresbuf;
+	float pad2;
 	struct Text *dometext;
 
 } RenderData;

Modified: trunk/blender/source/blender/src/buttons_scene.c
===================================================================
--- trunk/blender/source/blender/src/buttons_scene.c	2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/blender/src/buttons_scene.c	2009-05-17 20:37:13 UTC (rev 20244)
@@ -1832,11 +1832,11 @@
 	xco = 8;
 	uiBlockBeginAlign(block);
 	uiDefButS(block, ROW, 0, "Dome",	xco, yco-=30, 88, 19, &(G.scene->r.stereomode), 7.0, 8.0, 0, 0, "Enables dome camera");
-	uiDefButS(block, NUM, 0, "Ang:",	xco+90, yco, 88, 19, &G.scene->r.domeangle, 90.0, 250.0, 0, 0, "Angle (Aperture) of the Dome - it only works in mode 1");
-	uiDefButS(block, NUM, 0, "Mode:",	xco+180, yco, 88, 19, &G.scene->r.domemode, 1.0, 3.0, 0, 0, "1 fisheye, 2 environment map, 3 spherical panoramic");
+	uiDefButS(block, NUM, 0, "Ang:",	xco+90, yco, 88, 19, &G.scene->r.domeangle, 90.0, 250.0, 0, 0, "Angle (Aperture) of the Dome - it only works in mode 1 to 3");
+	uiDefButS(block, NUM, 0, "Mode:",	xco+180, yco, 88, 19, &G.scene->r.domemode, 1.0, 5.0, 0, 0, "1 fulldome, 2 front-truncated, 3 rear-truncated, 4 environment map, 5 spherical panoramic");
 
-	uiDefButF(block, NUM, 0, "Size:",	xco, yco-=21, 88, 19, &G.scene->r.domesize, 0.5, 3.5, 0, 0, "Size adjustments");
-	uiDefButS(block, NUM, 0, "Tes:",	xco+90, yco, 88, 19, &G.scene->r.domeres, 1.0, 8.0, 0, 0, "Tesselation level - 1 to 8");
+	uiDefButS(block, NUM, 0, "Tilt:",	xco, yco-=21, 88, 19, &G.scene->r.dometilt, -180.0, 180.0, 0, 0, "Dome tilt - camera rotation in horizontal axis");
+	uiDefButS(block, NUM, 0, "Tes:",	xco+90, yco, 88, 19, &G.scene->r.domeres, 0.0, 8.0, 0, 0, "Tesselation level - check the generated mesh in wireframe mode");
 	uiDefButF(block, NUM, 0, "Res:",	xco+180, yco, 88, 19, &G.scene->r.domeresbuf, 0.1, 1.0, 0, 0, "Buffer Resolution - decrease it to increase speed");
 
 	uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Warp Data: ", xco,yco-=21,268, 19, &G.scene->r.dometext, "Custom Warp Mesh data file");

Modified: trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2009-05-17 20:37:13 UTC (rev 20244)
@@ -376,7 +376,7 @@
 
 			//initialize Dome Settings
 			if(blscene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
-				ketsjiengine->InitDome(blscene->r.domesize, blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf, blscene->r.dometext);
+				ketsjiengine->InitDome(blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf, blscene->r.dometilt, blscene->r.dometext);
 
 			if (sceneconverter)
 			{

Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp	2009-05-17 20:37:13 UTC (rev 20244)
@@ -701,7 +701,7 @@
 
 		//initialize Dome Settings
 		if(m_startScene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
-			m_ketsjiengine->InitDome(m_startScene->r.domesize, m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, m_startScene->r.domeresbuf, m_startScene->r.dometext);
+			m_ketsjiengine->InitDome(m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, m_startScene->r.domeresbuf, m_startScene->r.dometilt, m_startScene->r.dometext);
 
 		// Set the GameLogic.globalDict from marshal'd data, so we can
 		// load new blend files and keep data in GameLogic.globalDict

Modified: trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp	2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp	2009-05-17 20:37:13 UTC (rev 20244)
@@ -43,23 +43,23 @@
     RAS_IRenderTools* rendertools,
     /// engine
     KX_KetsjiEngine* engine,
-	
-	float size,		//size for adjustments
+
 	short res,		//resolution of the mesh
 	short mode,		//mode - fisheye, truncated, warped, panoramic, ...
 	short angle,
 	float resbuf,	//size adjustment of the buffer
+	short tilt,
 	struct Text* warptext
 
 ):
 	dlistSupported(false),
 	canvaswidth(-1), canvasheight(-1),
 	m_drawingmode(engine->GetDrawType()),
-	m_size(size),
 	m_resolution(res),
 	m_mode(mode),
 	m_angle(angle),
 	m_resbuffer(resbuf),
+	m_tilt(tilt),
 	m_canvas(canvas),
 	m_rasterizer(rasterizer),
 	m_rendertools(rendertools),
@@ -124,7 +124,7 @@
 			CreateMeshPanorama();
 			m_numfaces = 6;
 			break;
-		default: //DOME_TRUNCATED_DOWN and DOME_TRUNCATED_UP
+		default: //DOME_TRUNCATED_FRONT and DOME_TRUNCATED_REAR
 			if (m_angle <= 180){
 				cubetop.resize(1);
 				cubebottom.resize(1);
@@ -269,7 +269,7 @@
 bool KX_Dome::CreateDL(){
 	dlistId = glGenLists((GLsizei) m_numimages);
 	if (dlistId != 0) {
-		if(m_mode == DOME_FISHEYE || m_mode == DOME_TRUNCATED_UP || m_mode == DOME_TRUNCATED_DOWN){
+		if(m_mode == DOME_FISHEYE || m_mode == DOME_TRUNCATED_FRONT || m_mode == DOME_TRUNCATED_REAR){
 			glNewList(dlistId, GL_COMPILE);
 				GLDrawTriangles(cubetop, nfacestop);
 			glEndList();
@@ -1485,13 +1485,14 @@
 Uses 5 cameras for angles up to 250\xBA
 Uses 6 cameras for angles up to 360\xBA
 */
+	int i;
 	float deg45 = MT_PI / 4;
 	MT_Scalar c = cos(deg45);
 	MT_Scalar s = sin(deg45);
 
 	if (m_angle <= 180 && (m_mode == DOME_FISHEYE 
-		|| m_mode == DOME_TRUNCATED_UP 
-		|| m_mode == DOME_TRUNCATED_DOWN)){
+		|| m_mode == DOME_TRUNCATED_FRONT
+		|| m_mode == DOME_TRUNCATED_REAR)){
 
 		m_locRot[0] = MT_Matrix3x3( // 90\xBA - Top
 						c, -s, 0.0,
@@ -1514,8 +1515,8 @@
 						s, 0.0, c);
 
 	} else if (m_mode == DOME_ENVMAP || (m_angle > 180 && (m_mode == DOME_FISHEYE
-		|| m_mode == DOME_TRUNCATED_UP 
-		|| m_mode == DOME_TRUNCATED_DOWN))){
+		|| m_mode == DOME_TRUNCATED_FRONT 
+		|| m_mode == DOME_TRUNCATED_REAR))){
 
 		m_locRot[0] = MT_Matrix3x3( // 90\xBA - Top
 						 1.0, 0.0, 0.0,
@@ -1579,6 +1580,23 @@
 						0.0, 1.0, 0.0,
 						s, 0.0, c);
 	}
+
+	// rotating the camera in horizontal axis
+	if (m_tilt)
+	{
+		float tiltdeg = ((m_tilt % 360) * 2 * MT_PI) / 360;
+		c = cos(tiltdeg);
+		s = sin(tiltdeg);
+
+		MT_Matrix3x3 tilt_mat = MT_Matrix3x3(
+		1.0, 0.0, 0.0,
+		0.0, c, -s,
+		0.0, s,  c
+		);
+
+		for (i =0;i<6;i++)
+			m_locRot[i] = tilt_mat * m_locRot[i];
+	}
 }
 
 void KX_Dome::RotateCamera(KX_Camera* cam, int i)
@@ -1621,10 +1639,10 @@
 		case DOME_PANORAM_SPH:
 			DrawPanorama();
 			break;
-		case DOME_TRUNCATED_UP:
+		case DOME_TRUNCATED_FRONT:
 			DrawDomeFisheye();
 			break;
-		case DOME_TRUNCATED_DOWN:
+		case DOME_TRUNCATED_REAR:
 			DrawDomeFisheye();
 			break;
 	}
@@ -1670,9 +1688,6 @@
 			ortho_width = (float)can_width/can_height * ortho_height;
 		}
 		
-		ortho_width /= m_size;
-		ortho_height /= m_size;
-		
 		glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_height, -20.0, 10.0);
 	}
 
@@ -1803,20 +1818,17 @@
 				ortho_height = 1.0;
 			}
 			
-			ortho_width /= m_size;
-			ortho_height /= m_size;
-			
 			glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_height, -20.0, 10.0);
 		}
 	}
-	else if(m_mode == DOME_TRUNCATED_UP)
+	else if(m_mode == DOME_TRUNCATED_FRONT)
 	{
 		ortho_width = 1.0;
 		ortho_height = 2 * ((float)can_height/can_width) - 1.0 ;
 
 		glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_width, -20.0, 10.0);
 	}
-	else { //m_mode == DOME_TRUNCATED_DOWN
+	else { //m_mode == DOME_TRUNCATED_REAR
 		ortho_width = 1.0;
 		ortho_height = 2 * ((float)can_height/can_width) - 1.0 ;
 
@@ -1901,9 +1913,6 @@
 			ortho_width = (float)can_width/can_height * 0.5;
 			ortho_height = 0.5;
 		}
-
-		ortho_width /= m_size;
-		ortho_height /= m_size;
 		
 		glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_height, -20.0, 10.0);
 	}
@@ -1972,7 +1981,6 @@
 	int can_height = m_viewport.GetTop();
 
 	double screen_ratio = can_width/ (double) can_height;	
-	screen_ratio /= m_size;
 
     glOrtho(-screen_ratio,screen_ratio,-1.0,1.0,-20.0,10.0);
 

Modified: trunk/blender/source/gameengine/Ketsji/KX_Dome.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Dome.h	2009-05-17 16:30:18 UTC (rev 20243)
+++ trunk/blender/source/gameengine/Ketsji/KX_Dome.h	2009-05-17 20:37:13 UTC (rev 20244)
@@ -40,12 +40,12 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list