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

Reply via email to