[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16529] trunk/blender/source/gameengine: Fix zoom level and clipping to be consistent with the viewport

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Sep 15 02:11:30 CEST 2008


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.





More information about the Bf-blender-cvs mailing list