[Bf-blender-cvs] [13a4bcd] master: BGE: Fix T31357: wrong zoom when sets camera.

Porteries Tristan noreply at git.blender.org
Tue Oct 27 11:15:52 CET 2015


Commit: 13a4bcd148bd7a32af8af626f42f7793aca7b7fe
Author: Porteries Tristan
Date:   Tue Oct 27 11:04:04 2015 +0100
Branches: master
https://developer.blender.org/rB13a4bcd148bd7a32af8af626f42f7793aca7b7fe

BGE: Fix T31357: wrong zoom when sets camera.

This patch makes independant the override camera zoom and the default camera object zoom. The override zoom is 2.0f and the camera object zoom is computed with the RegionView3D camera zoom.
These features are only used for the embedded BGE, so there's no compatibility issues with the blenderplayer.
I let the override zoom with a setter to allow later to create an override camera in blenderplayer easily.

Tested with the 3 framing modes in embedded and standalone.

===================================================================

M	source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
M	source/gameengine/Ketsji/KX_KetsjiEngine.cpp
M	source/gameengine/Ketsji/KX_KetsjiEngine.h

===================================================================

diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 9138266..e3c8c89 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -359,25 +359,22 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
 		}
 
 		// some blender stuff
-		float camzoom;
+		float camzoom = 1.0f;
 		int draw_letterbox = 0;
-		
+
 		if (rv3d->persp==RV3D_CAMOB) {
 			if (startscene->gm.framing.type == SCE_GAMEFRAMING_BARS) { /* Letterbox */
-				camzoom = 1.0f;
 				draw_letterbox = 1;
 			}
 			else {
 				camzoom = 1.0f / BKE_screen_view3d_zoom_to_fac(rv3d->camzoom);
 			}
 		}
-		else {
-			camzoom = 2.0;
-		}
 
 		rasterizer->SetDrawingMode(drawtype);
 		ketsjiengine->SetCameraZoom(camzoom);
-		
+		ketsjiengine->SetCameraOverrideZoom(2.0f);
+
 		// if we got an exitcode 3 (KX_EXIT_REQUEST_START_OTHER_GAME) load a different file
 		if (exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME || exitrequested == KX_EXIT_REQUEST_RESTART_GAME)
 		{
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index f42e3e1..5f36a98 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -146,6 +146,7 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system)
 	m_overrideCamUseOrtho(false),
 	m_overrideCamNear(0.0),
 	m_overrideCamFar(0.0),
+	m_overrideCamZoom(1.0f),
 
 	m_stereo(false),
 	m_curreye(0),
@@ -976,6 +977,11 @@ void KX_KetsjiEngine::SetCameraOverrideLens(float lens)
 	m_overrideCamLens = lens;
 }
 
+void KX_KetsjiEngine::SetCameraOverrideZoom(float camzoom)
+{
+	m_overrideCamZoom = camzoom;
+}
+
 void KX_KetsjiEngine::GetSceneViewport(KX_Scene *scene, KX_Camera* cam, RAS_Rect& area, RAS_Rect& viewport)
 {
 	// In this function we make sure the rasterizer settings are upto
@@ -1154,6 +1160,7 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
 			farfrust = m_overrideCamFar;
 		}
 
+		float camzoom = override_camera ? m_overrideCamZoom : m_cameraZoom;
 		if (orthographic) {
 
 			RAS_FramingManager::ComputeOrtho(
@@ -1169,10 +1176,10 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
 				frustum
 			);
 			if (!cam->GetViewport()) {
-				frustum.x1 *= m_cameraZoom;
-				frustum.x2 *= m_cameraZoom;
-				frustum.y1 *= m_cameraZoom;
-				frustum.y2 *= m_cameraZoom;
+				frustum.x1 *= camzoom;
+				frustum.x2 *= camzoom;
+				frustum.y1 *= camzoom;
+				frustum.y2 *= camzoom;
 			}
 			projmat = m_rasterizer->GetOrthoMatrix(
 				frustum.x1, frustum.x2, frustum.y1, frustum.y2, frustum.camnear, frustum.camfar);
@@ -1194,10 +1201,10 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
 			);
 
 			if (!cam->GetViewport()) {
-				frustum.x1 *= m_cameraZoom;
-				frustum.x2 *= m_cameraZoom;
-				frustum.y1 *= m_cameraZoom;
-				frustum.y2 *= m_cameraZoom;
+				frustum.x1 *= camzoom;
+				frustum.x2 *= camzoom;
+				frustum.y1 *= camzoom;
+				frustum.y2 *= camzoom;
 			}
 			projmat = m_rasterizer->GetFrustumMatrix(
 				frustum.x1, frustum.x2, frustum.y1, frustum.y2, frustum.camnear, frustum.camfar, focallength);
@@ -1242,7 +1249,7 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
 
 	//render all the font objects for this scene
 	scene->RenderFonts();
-	
+
 	if (scene->GetPhysicsEnvironment())
 		scene->GetPhysicsEnvironment()->DebugDrawWorld();
 }
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h
index 04e09c8..ec855be 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.h
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h
@@ -140,6 +140,8 @@ private:
 	float			m_overrideCamNear;
 	float			m_overrideCamFar;
 	float			m_overrideCamLens;
+	/// Default camera zoom.
+	float m_overrideCamZoom;
 
 	bool m_stereo;
 	int m_curreye;
@@ -266,6 +268,7 @@ public:
 
 	void			GetSceneViewport(KX_Scene* scene, KX_Camera* cam, RAS_Rect& area, RAS_Rect& viewport);
 
+	/// Sets zoom for camera objects, useful only with extend and scale framing mode.
 	void SetCameraZoom(float camzoom);
 	
 	void EnableCameraOverride(const STR_String& forscene);
@@ -275,6 +278,8 @@ public:
 	void SetCameraOverrideViewMatrix(const MT_CmMatrix4x4& mat);
 	void SetCameraOverrideClipping(float near, float far);
 	void SetCameraOverrideLens(float lens);
+	/// Sets zoom for default camera, = 2 in embedded mode.
+	void SetCameraOverrideZoom(float camzoom);
 
 	// Update animations for object in this scene
 	void UpdateAnimations(KX_Scene *scene);




More information about the Bf-blender-cvs mailing list