Revision: 16529
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16529
Author:   blendix
Date:     2008-09-15 02:11:30 +0200 (Mon, 15 Sep 2008)

Log Message:
-----------
Fix zoom level and clipping to be consistent with the viewport
when pressing P without a camera active, now it should match
the view exactly.

Fix an issue when setting a camera with an actuator and being
in orthographic mode in the viewport without an active camera,
it used a strange mix of the set camera and the viewport then.

Modified Paths:
--------------
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h

Modified: 
trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     
2008-09-14 21:31:07 UTC (rev 16528)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp     
2008-09-15 00:11:30 UTC (rev 16529)
@@ -198,6 +198,7 @@
                // some blender stuff
                MT_CmMatrix4x4 projmat;
                MT_CmMatrix4x4 viewmat;
+               float camzoom;
                int i;
                
                for (i = 0; i < 16; i++)
@@ -211,8 +212,13 @@
                        projmat.setElem(i, projmat_linear[i]);
                }
                
-               float camzoom = (1.41421 + (v3d->camzoom / 50.0));
-               camzoom *= camzoom;
+               if(v3d->persp==V3D_CAMOB) {
+                       camzoom = (1.41421 + (v3d->camzoom / 50.0));
+                       camzoom *= camzoom;
+               }
+               else
+                       camzoom = 2.0;
+
                camzoom = 4.0 / camzoom;
                
                ketsjiengine->SetDrawType(v3d->drawtype);
@@ -293,6 +299,7 @@
                                
ketsjiengine->SetCameraOverrideUseOrtho((v3d->persp == V3D_ORTHO));
                                
ketsjiengine->SetCameraOverrideProjectionMatrix(projmat);
                                
ketsjiengine->SetCameraOverrideViewMatrix(viewmat);
+                               
ketsjiengine->SetCameraOverrideClipping(v3d->near, v3d->far);
                        }
                        
                        // create a scene converter, create and convert the 
startingscene

Modified: trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp  2008-09-14 
21:31:07 UTC (rev 16528)
+++ trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp  2008-09-15 
00:11:30 UTC (rev 16529)
@@ -135,6 +135,8 @@
        
        m_overrideCam(false),
        m_overrideCamUseOrtho(false),
+       m_overrideCamNear(0.0),
+       m_overrideCamFar(0.0),
 
        m_stereo(false),
        m_curreye(0),
@@ -886,7 +888,12 @@
        m_overrideCamViewMat = mat;
 }
 
-       
+void KX_KetsjiEngine::SetCameraOverrideClipping(float near, float far)
+{
+       m_overrideCamNear = near;
+       m_overrideCamFar = far;
+}
+
 void KX_KetsjiEngine::SetupViewport(KX_Scene *scene, KX_Camera* cam, RAS_Rect& 
area, RAS_Rect& viewport)
 {
        // In this function we make sure the rasterizer settings are upto
@@ -985,6 +992,7 @@
 // update graphics
 void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
 {
+       bool override_camera;
        RAS_Rect viewport, area;
        float left, right, bottom, top, nearfrust, farfrust, focallength;
        const float ortho = 100.0;
@@ -1006,7 +1014,10 @@
        //m_rasterizer->SetAmbient();
        m_rasterizer->DisplayFog();
 
-       if (m_overrideCam && (scene->GetName() == m_overrideSceneName) && 
m_overrideCamUseOrtho) {
+       override_camera = m_overrideCam && (scene->GetName() == 
m_overrideSceneName);
+       override_camera = override_camera && (cam->GetName() == 
"__default__cam__");
+
+       if (override_camera && m_overrideCamUseOrtho) {
                MT_CmMatrix4x4 projmat = m_overrideCamProjMat;
                m_rasterizer->SetProjectionMatrix(projmat);
        } else if (cam->hasValidProjectionMatrix() && !cam->GetViewport() )
@@ -1016,12 +1027,17 @@
        {
                RAS_FrameFrustum frustum;
                float lens = cam->GetLens();
+               bool orthographic = !cam->GetCameraData()->m_perspective;
                nearfrust = cam->GetCameraNear();
                farfrust = cam->GetCameraFar();
                focallength = cam->GetFocalLength();
 
-               if (!cam->GetCameraData()->m_perspective)
-               {
+               if(override_camera) {
+                       nearfrust = m_overrideCamNear;
+                       farfrust = m_overrideCamFar;
+               }
+
+               if (orthographic) {
                        lens *= ortho;
                        nearfrust = (nearfrust + 1.0)*ortho;
                        farfrust *= ortho;

Modified: trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h    2008-09-14 
21:31:07 UTC (rev 16528)
+++ trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h    2008-09-15 
00:11:30 UTC (rev 16529)
@@ -124,6 +124,8 @@
        bool                    m_overrideCamUseOrtho;
        MT_CmMatrix4x4  m_overrideCamProjMat;
        MT_CmMatrix4x4  m_overrideCamViewMat;
+       float                   m_overrideCamNear;
+       float                   m_overrideCamFar;
 
        bool m_stereo;
        int m_curreye;
@@ -236,6 +238,7 @@
        void SetCameraOverrideUseOrtho(bool useOrtho);
        void SetCameraOverrideProjectionMatrix(const MT_CmMatrix4x4& mat);
        void SetCameraOverrideViewMatrix(const MT_CmMatrix4x4& mat);
+       void SetCameraOverrideClipping(float near, float far);
        
        /**
         * Sets display of all frames.


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to