Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPorteries Tristan <republicthunderbolt9@gmail.com>2015-10-27 13:04:04 +0300
committerPorteries Tristan <republicthunderbolt9@gmail.com>2015-10-27 13:10:12 +0300
commit13a4bcd148bd7a32af8af626f42f7793aca7b7fe (patch)
treed2ec1c6cb1fda3223805eb01e2ca3bb3d583fb06 /source/gameengine/Ketsji
parent95164a09a73b5f72cfb21abfe608dfd0873b7706 (diff)
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.
Diffstat (limited to 'source/gameengine/Ketsji')
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.cpp25
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.h5
2 files changed, 21 insertions, 9 deletions
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index f42e3e104ac..5f36a980a53 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 04e09c8db15..ec855be3212 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);