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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs