Revision: 19599
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19599
Author:   ben2610
Date:     2009-04-08 17:06:20 +0200 (Wed, 08 Apr 2009)

Log Message:
-----------
Patch #18462: Fisheye (Dome) and Spherical Panoramic mode in BGE.

User guide:
http://wiki.blender.org/index.php/Dev:Source/GameEngine/Fisheye_Dome_Camera

Fixed two bugs from original patch:
- deleting a text will clear the warp field from Game framing settings
- removed spurious black dots along the edge of the cube map in the gameplayer 

Known limitation:
- resizing of the screen doesn't work in the gameplayer

Known bugs:
- Texture with reflexion are not rendered correctly
- Spurious problems with light

Modified Paths:
--------------
    trunk/blender/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
    trunk/blender/source/blender/blenkernel/BKE_blender.h
    trunk/blender/source/blender/blenkernel/BKE_scene.h
    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/blender/src/header_text.c
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h
    trunk/blender/source/gameengine/Rasterizer/RAS_IRasterizer.h
    
trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp

Added Paths:
-----------
    trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Dome.h

Modified: trunk/blender/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
===================================================================
--- trunk/blender/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj   
2009-04-08 12:35:38 UTC (rev 19598)
+++ trunk/blender/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj   
2009-04-08 15:06:20 UTC (rev 19599)
@@ -514,6 +514,10 @@
                                >
                        </File>
                        <File
+                               
RelativePath="..\..\..\source\gameengine\Ketsji\KX_Dome.cpp"
+                               >
+                       </File>
+                       <File
                                
RelativePath="..\..\..\source\gameengine\Ketsji\KX_EmptyObject.cpp"
                                >
                        </File>
@@ -803,6 +807,10 @@
                                >
                        </File>
                        <File
+                               
RelativePath="..\..\..\source\gameengine\Ketsji\KX_Dome.h"
+                               >
+                       </File>
+                       <File
                                
RelativePath="..\..\..\source\gameengine\Ketsji\KX_EmptyObject.h"
                                >
                        </File>

Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_blender.h       2009-04-08 
12:35:38 UTC (rev 19598)
+++ trunk/blender/source/blender/blenkernel/BKE_blender.h       2009-04-08 
15:06:20 UTC (rev 19599)
@@ -41,7 +41,7 @@
 struct MemFile;
 
 #define BLENDER_VERSION                        248
-#define BLENDER_SUBVERSION             3
+#define BLENDER_SUBVERSION             4
 
 #define BLENDER_MINVERSION             245
 #define BLENDER_MINSUBVERSION  15

Modified: trunk/blender/source/blender/blenkernel/BKE_scene.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_scene.h 2009-04-08 12:35:38 UTC 
(rev 19598)
+++ trunk/blender/source/blender/blenkernel/BKE_scene.h 2009-04-08 15:06:20 UTC 
(rev 19599)
@@ -86,5 +86,7 @@
 int get_render_shadow_samples(struct RenderData *r, int samples);
 float get_render_aosss_error(struct RenderData *r, float error);
 
+void free_dome_warp_text(struct Text *txt);
+
 #endif
 

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c      2009-04-08 
12:35:38 UTC (rev 19598)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c      2009-04-08 
15:06:20 UTC (rev 19599)
@@ -230,6 +230,11 @@
        sce->r.threads= 1;
        
        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.simplify_subsurf= 6;
        sce->r.simplify_particles= 1.0f;
@@ -775,3 +780,14 @@
                return error;
 }
 
+void free_dome_warp_text(struct Text *txt)
+{
+       Scene *scene;
+
+       scene = G.main->scene.first;
+       while(scene) {
+               if (scene->r.dometext == txt)
+                       scene->r.dometext = NULL;
+               scene = scene->id.next;
+       }
+}
\ No newline at end of file

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2009-04-08 
12:35:38 UTC (rev 19598)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2009-04-08 
15:06:20 UTC (rev 19599)
@@ -3531,7 +3531,9 @@
                                srl->mat_override= newlibadr_us(fd, 
sce->id.lib, srl->mat_override);
                                srl->light_override= newlibadr_us(fd, 
sce->id.lib, srl->light_override);
                        }
-                       
+                       /*Game Settings: Dome Warp Text*/
+                       sce->r.dometext= newlibadr_us(fd, sce->id.lib, 
sce->r.dometext);
+
                        sce->id.flag -= LIB_NEEDLINK;
                }
 
@@ -8035,6 +8037,24 @@
                }
        }
        
+       if (main->versionfile < 248 || (main->versionfile == 248 && 
main->subversionfile < 4)) {
+               Scene *sce;
+               World *wrld;
+
+               /*  Dome (Fisheye) default parameters  */
+               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;
+               }
+               /* DBVT culling by default */
+               for(wrld=main->world.first; wrld; wrld= wrld->id.next) {
+                       wrld->mode |= WO_DBVT_CAMERA_CULLING;
+               }
+       }
+
        /* WATCH IT!!!: pointers from libdata have not been converted yet here! 
*/
        /* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
 
@@ -8841,7 +8861,9 @@
                expand_doit(fd, mainvar, srl->mat_override);
                expand_doit(fd, mainvar, srl->light_override);
        }
-                               
+
+       if(sce->r.dometext)
+               expand_doit(fd, mainvar, sce->r.dometext);
 }
 
 static void expand_camera(FileData *fd, Main *mainvar, Camera *ca)

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h     2009-04-08 
12:35:38 UTC (rev 19598)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h     2009-04-08 
15:06:20 UTC (rev 19599)
@@ -45,6 +45,7 @@
 struct Scene;
 struct Image;
 struct Group;
+struct Text;
 struct bNodeTree;
 
 typedef struct Base {
@@ -314,6 +315,14 @@
        /* jpeg2000 */
        short jp2_preset, jp2_depth;
        int rpad3;
+
+       /* Dome variables */
+       short domeres, domemode;
+       short domeangle, pad9;
+       float domesize;
+       float domeresbuf;
+       struct Text *dometext;
+
 } RenderData;
 
 /* control render convert and shading engine */

Modified: trunk/blender/source/blender/src/buttons_scene.c
===================================================================
--- trunk/blender/source/blender/src/buttons_scene.c    2009-04-08 12:35:38 UTC 
(rev 19598)
+++ trunk/blender/source/blender/src/buttons_scene.c    2009-04-08 15:06:20 UTC 
(rev 19599)
@@ -1766,13 +1766,13 @@
 static uiBlock *framing_render_menu(void *arg_unused)
 {
        uiBlock *block;
-       short yco = 190, xco = 0;
+       short yco = 267, xco = 0;
        int randomcolorindex = 1234;
 
        block= uiNewBlock(&curarea->uiblocks, "framing_options", UI_EMBOSS, 
UI_HELV, curarea->win);
 
        /* use this for a fake extra empy space around the buttons */
-       uiDefBut(block, LABEL, 0, "",                   -5, -10, 295, 224, 
NULL, 0, 0, 0, 0, "");
+       uiDefBut(block, LABEL, 0, "",                   -5, -10, 295, 300, 
NULL, 0, 0, 0, 0, "");
 
        uiDefBut(block, LABEL, 0, "Framing:", xco, yco, 68,19, 0, 0, 0, 0, 0, 
"");
        uiBlockBeginAlign(block);
@@ -1814,6 +1814,7 @@
         * RAS_STEREO_ANAGLYPH          5
         * RAS_STEREO_SIDEBYSIDE        6
         * RAS_STEREO_VINTERLACE        7
+        * RAS_STEREO_DOME              8
         */
        uiBlockBeginAlign(block);
        uiDefButS(block, ROW, 0, "No Stereo", xco, yco-=30, 88, 19, 
&(G.scene->r.stereomode), 7.0, 1.0, 0, 0, "Disables stereo");
@@ -1825,6 +1826,18 @@
        
        uiBlockEndAlign(block);
 
+       uiBlockBeginAlign(block);
+       uiDefButS(block, ROW, 0, "Dome", xco-=180, 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+=90, yco, 88, 19, 
&G.scene->r.domemode, 1.0, 3.0, 0, 0, "Dome mode - 1 fisheye, 2 truncated, 3 
spherical panoramic");
+
+       uiDefButF(block, NUM, 0, "Size:",               xco-=180, 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");
+       uiDefButF(block, NUM, 0, "Res:",        xco+=90, 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-180,yco-=21,268, 19, &G.scene->r.dometext, "Custom Warp Mesh data file");
+       uiBlockEndAlign(block);
+
        uiBlockSetDirection(block, UI_TOP);
 
        return block;

Modified: trunk/blender/source/blender/src/header_text.c
===================================================================
--- trunk/blender/source/blender/src/header_text.c      2009-04-08 12:35:38 UTC 
(rev 19598)
+++ trunk/blender/source/blender/src/header_text.c      2009-04-08 15:06:20 UTC 
(rev 19599)
@@ -173,6 +173,7 @@
                        BPY_clear_bad_scriptlinks(text);
                        BPY_free_pyconstraint_links(text);
                        free_text_controllers(text);
+                       free_dome_warp_text(text);
 #endif
                        unlink_text(text);
                        free_libblock(&G.main->text, text);

Modified: 
trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     
2009-04-08 12:35:38 UTC (rev 19598)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     
2009-04-08 15:06:20 UTC (rev 19599)
@@ -373,6 +373,10 @@
                        initVideoTexture();
 #endif
 
+                       //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);
+
                        if (sceneconverter)
                        {
                                // convert and add scene

Modified: trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp        
2009-04-08 12:35:38 UTC (rev 19598)
+++ trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp        
2009-04-08 15:06:20 UTC (rev 19599)
@@ -693,6 +693,11 @@
 #ifdef WITH_FFMPEG
         initVideoTexture();
 #endif
+
+               //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);
+
                // Set the GameLogic.globalDict from marshal'd data, so we can
                // load new blend files and keep data in GameLogic.globalDict
                loadGamePythonConfig(m_pyGlobalDictString, 
m_pyGlobalDictString_Length);

Added: trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp                          
(rev 0)
+++ trunk/blender/source/gameengine/Ketsji/KX_Dome.cpp  2009-04-08 15:06:20 UTC 
(rev 19599)
@@ -0,0 +1,1820 @@
+/* $Id$
+-----------------------------------------------------------------------------
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free 
Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to