Revision: 19392
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19392
Author:   dfelinto
Date:     2009-03-24 06:43:20 +0100 (Tue, 24 Mar 2009)

Log Message:
-----------
First commit of the dome code.

Three modes working:
Dome mode - 1 fisheye, 2 truncated, 3 panoramic

A brief explanation of the code pipeline:

BL_KetsjiEmbedStart.cpp or GPG_Application.cpp
  -> KX_KetsjiEngine.cpp::InitDome()
          -> KX_Dome.cpp::Constructor(initiallising class)
          -> KX_Dome.cpp::CreateMesh()
          -> Turn to Hemisphere (normalize the verts coordinates)
          -> KX_Dome.cpp::FlattenDome()

 Every frame:
  -> KX_KetsjiEngine.cpp::RenderDome() [a copy of KX_KetsjiEngine.cpp::Render()]
          -> KX_Dome.cpp::RenderDomeFrame() [a copy of 
KX_KetsjiEngine.cpp::RenderFrame()]
          -> KX_Dome.cpp::BindImages()
          -> KX_Dome.cpp::DrawDome()

Modified Paths:
--------------
    branches/ge_dome/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
    branches/ge_dome/source/blender/blenkernel/BKE_blender.h
    branches/ge_dome/source/blender/blenkernel/intern/scene.c
    branches/ge_dome/source/blender/blenloader/intern/readfile.c
    branches/ge_dome/source/blender/makesdna/DNA_scene_types.h
    branches/ge_dome/source/blender/src/buttons_scene.c
    branches/ge_dome/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    branches/ge_dome/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    branches/ge_dome/source/gameengine/Ketsji/KX_KetsjiEngine.h
    branches/ge_dome/source/gameengine/Rasterizer/RAS_IRasterizer.h
    
branches/ge_dome/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp

Added Paths:
-----------
    branches/ge_dome/source/gameengine/Ketsji/KX_Dome.cpp

Modified: branches/ge_dome/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
===================================================================
--- branches/ge_dome/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj        
2009-03-24 03:53:20 UTC (rev 19391)
+++ branches/ge_dome/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj        
2009-03-24 05:43:20 UTC (rev 19392)
@@ -514,6 +514,10 @@
                                >
                        </File>
                        <File
+                               
RelativePath="..\..\..\source\gameengine\Ketsji\KX_Dome.cpp"
+                               >
+                       </File>
+                       <File
                                
RelativePath="..\..\..\source\gameengine\Ketsji\KX_EmptyObject.cpp"
                                >
                        </File>
@@ -799,6 +803,10 @@
                                >
                        </File>
                        <File
+                               
RelativePath="..\..\..\source\gameengine\Ketsji\KX_Dome.h"
+                               >
+                       </File>
+                       <File
                                
RelativePath="..\..\..\source\gameengine\Ketsji\KX_EmptyObject.h"
                                >
                        </File>

Modified: branches/ge_dome/source/blender/blenkernel/BKE_blender.h
===================================================================
--- branches/ge_dome/source/blender/blenkernel/BKE_blender.h    2009-03-24 
03:53:20 UTC (rev 19391)
+++ branches/ge_dome/source/blender/blenkernel/BKE_blender.h    2009-03-24 
05:43:20 UTC (rev 19392)
@@ -41,7 +41,7 @@
 struct MemFile;
 
 #define BLENDER_VERSION                        248
-#define BLENDER_SUBVERSION             2
+#define BLENDER_SUBVERSION             3
 
 #define BLENDER_MINVERSION             245
 #define BLENDER_MINSUBVERSION  15

Modified: branches/ge_dome/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/ge_dome/source/blender/blenkernel/intern/scene.c   2009-03-24 
03:53:20 UTC (rev 19391)
+++ branches/ge_dome/source/blender/blenkernel/intern/scene.c   2009-03-24 
05:43:20 UTC (rev 19392)
@@ -230,6 +230,10 @@
        sce->r.threads= 1;
        
        sce->r.stereomode = 1;  // no stereo
+       sce->r.domesize = 1.0f;
+       sce->r.domeres = 4;
+       sce->r.domemode = 1;
+       sce->r.domeangle = 180;
 
        sce->r.simplify_subsurf= 6;
        sce->r.simplify_particles= 1.0f;

Modified: branches/ge_dome/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/ge_dome/source/blender/blenloader/intern/readfile.c        
2009-03-24 03:53:20 UTC (rev 19391)
+++ branches/ge_dome/source/blender/blenloader/intern/readfile.c        
2009-03-24 05:43:20 UTC (rev 19392)
@@ -8025,6 +8025,18 @@
                }
        }
        
+       if (main->versionfile < 248 || (main->versionfile == 248 && 
main->subversionfile < 3)) {
+               Scene *sce;
+
+               /*  Dome (Fisheye) default parameters  */
+               for (sce= main->scene.first; sce; sce= sce->id.next) {
+                       sce->r.domesize = 1.0f;
+                       sce->r.domeres = 4;
+                       sce->r.domemode = 1;
+                       sce->r.domeangle = 180;
+               }
+       }
+
        /* WATCH IT!!!: pointers from libdata have not been converted yet here! 
*/
        /* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
 

Modified: branches/ge_dome/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/ge_dome/source/blender/makesdna/DNA_scene_types.h  2009-03-24 
03:53:20 UTC (rev 19391)
+++ branches/ge_dome/source/blender/makesdna/DNA_scene_types.h  2009-03-24 
05:43:20 UTC (rev 19392)
@@ -314,6 +314,12 @@
        /* jpeg2000 */
        short jp2_preset, jp2_depth;
        int rpad3;
+
+       /* Dome variables */
+       short domeres, domemode;
+       short domeangle, pad9;
+       float domesize;
+       float pad10;
 } RenderData;
 
 /* control render convert and shading engine */

Modified: branches/ge_dome/source/blender/src/buttons_scene.c
===================================================================
--- branches/ge_dome/source/blender/src/buttons_scene.c 2009-03-24 03:53:20 UTC 
(rev 19391)
+++ branches/ge_dome/source/blender/src/buttons_scene.c 2009-03-24 05:43:20 UTC 
(rev 19392)
@@ -1772,13 +1772,13 @@
 static uiBlock *framing_render_menu(void *arg_unused)
 {
        uiBlock *block;
-       short yco = 190, xco = 0;
+       short yco = 241, 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, 275, 
NULL, 0, 0, 0, 0, "");
 
        uiDefBut(block, LABEL, 0, "Framing:", xco, yco, 68,19, 0, 0, 0, 0, 0, 
"");
        uiBlockBeginAlign(block);
@@ -1820,6 +1820,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");
@@ -1831,6 +1832,16 @@
        
        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 (fisheye)");
+       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 
panoramic");//, 4 (tests), 5 offset, 6 warped");
+
+       uiDefButF(block, NUM, 0, "Size:",               xco-=180, yco-=21, 88, 
19, &G.scene->r.domesize, 0.5, 3.5, 0, 0, "Size adjustemnts");
+       uiDefButS(block, NUM, 0, "Res:",                xco+=90, yco, 88, 19, 
&G.scene->r.domeres, 1.0, 8.0, 0, 0, "Resolution of the dome - 1 to 8");
+//     uiDefButF(block, NUM, 0, "Off:",                xco+=90, yco, 88, 19, 
&G.scene->r.domeoffset, 0.0, 0.999, 0, 0, "Offset - only works in mode 4");
+       uiBlockEndAlign(block);
+
        uiBlockSetDirection(block, UI_TOP);
 
        return block;

Modified: 
branches/ge_dome/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- branches/ge_dome/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp  
2009-03-24 03:53:20 UTC (rev 19391)
+++ branches/ge_dome/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp  
2009-03-24 05:43:20 UTC (rev 19392)
@@ -372,6 +372,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);
+
                        if (sceneconverter)
                        {
                                // convert and add scene

Modified: 
branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
===================================================================
--- branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp     
2009-03-24 03:53:20 UTC (rev 19391)
+++ branches/ge_dome/source/gameengine/GamePlayer/ghost/GPG_Application.cpp     
2009-03-24 05:43:20 UTC (rev 19392)
@@ -692,6 +692,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);
+
                // 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: branches/ge_dome/source/gameengine/Ketsji/KX_Dome.cpp
===================================================================
--- branches/ge_dome/source/gameengine/Ketsji/KX_Dome.cpp                       
        (rev 0)
+++ branches/ge_dome/source/gameengine/Ketsji/KX_Dome.cpp       2009-03-24 
05:43:20 UTC (rev 19392)
@@ -0,0 +1,1766 @@
+/* $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
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
details.
+
+You should have received a copy of the GNU Lesser General Public License along 
with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+
+Contributor(s): Dalai Felinto
+
+This code is originally inspired on some of the ideas and codes from Paul 
Bourke.
+Developed as part of a Research and Development project for SAT - La 
Soci\xE9t\xE9 des arts technologiques.
+-----------------------------------------------------------------------------
+*/
+
+#include <PyObjectPlus.h>
+#include <structmember.h>
+#include <float.h>
+#include <math.h>
+
+
+#include <BIF_gl.h>
+
+#include "KX_PythonInit.h"
+#include "DNA_scene_types.h"
+#include "RAS_CameraData.h"
+#include "BLI_arithb.h"
+
+#include "KX_Dome.h"
+
+#include "GL/glew.h"
+#include "GPU_extensions.h"
+#include "GL/glu.h" //XXX temporary, I don't think Blender can use glu.h in 
its files!!!
+
+// constructor
+KX_Dome::KX_Dome (
+       RAS_ICanvas* canvas,
+    /// rasterizer
+    RAS_IRasterizer* rasterizer,
+    /// render tools
+    RAS_IRenderTools* rendertools,
+    /// engine
+    KX_KetsjiEngine* engine,
+       
+       float size, //size for adjustments
+       short res, //resolution
+       short mode, //mode - fisheye, truncated, warped, panoramic, ...
+       short angle
+//     float offset //offset distance of the camera
+
+):
+       m_canvas(canvas),
+       m_rasterizer(rasterizer),
+       m_rendertools(rendertools),
+       m_engine(engine),
+       m_clip(100.f),
+       m_drawingmode(engine->GetDrawType()),
+       m_size(size),
+       m_resolution(res),
+       m_mode(mode),
+       m_angle(angle)
+//     m_offset(offset)
+
+{
+       if (mode > DOME_NUM_MODES)
+               m_mode = DOME_FISHEYE;
+       
+       //setting the viewport size
+       GLuint  viewport[4]={0};
+       glGetIntegerv(GL_VIEWPORT,(GLint *)viewport);
+
+       SetViewPort(viewport);
+       CalculateImageSize(); //it could be called from m_dome->SetViewPort()
+
+       //4 == 180\xBA; 5 == 250\xBA; 6 == 360\xBA
+       m_numfaces = 5;
+//     if (m_angle > 250)
+//             m_angle = 250;
+
+       switch(m_mode){
+               case DOME_FISHEYE:
+                       if (m_angle <= 180){
+                               cubetop.resize(1);
+                               cubebottom.resize(1);
+                               cubeleft.resize(2);
+                               cuberight.resize(2);
+
+                               CreateMeshDome180(m_resolution);
+                               m_numfaces = 4;
+                       }else if (m_angle > 180 && m_angle <= 250){
+                               cubetop.resize(2);
+                               cubebottom.resize(2);

@@ 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