Skip to content

Commit 783d801

Browse files
committed
UPBGE: Send RAS_CameraData for override camera settings in KX_KetsjiEngine.
Previously all the settins were set by different setters and after packed to a RAS_CameraData. This behaviour is simplified by packing the datas in the RAS_CameraData before send it to the ketsji engine. The engine store it under m_overrideCamData.
1 parent 09f88ce commit 783d801

File tree

3 files changed

+23
-68
lines changed

3 files changed

+23
-68
lines changed

source/gameengine/Ketsji/KX_KetsjiEngine.cpp

Lines changed: 12 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,6 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem *system)
135135
m_exitstring(""),
136136
m_cameraZoom(1.0f),
137137
m_overrideCam(false),
138-
m_overrideCamUseOrtho(false),
139-
m_overrideCamNear(0.0f),
140-
m_overrideCamFar(0.0f),
141138
m_overrideCamZoom(1.0f),
142139
m_stereo(false),
143140
m_curreye(0),
@@ -727,47 +724,26 @@ const std::string& KX_KetsjiEngine::GetExitString()
727724
return m_exitstring;
728725
}
729726

730-
void KX_KetsjiEngine::EnableCameraOverride(const std::string& forscene)
731-
{
732-
m_overrideCam = true;
733-
m_overrideSceneName = forscene;
734-
}
735-
736727
void KX_KetsjiEngine::SetCameraZoom(float camzoom)
737728
{
738729
m_cameraZoom = camzoom;
739730
}
740731

741-
void KX_KetsjiEngine::SetCameraOverrideUseOrtho(bool useOrtho)
742-
{
743-
m_overrideCamUseOrtho = useOrtho;
744-
}
745-
746-
void KX_KetsjiEngine::SetCameraOverrideProjectionMatrix(const MT_CmMatrix4x4& mat)
747-
{
748-
m_overrideCamProjMat = mat;
749-
}
750-
751-
void KX_KetsjiEngine::SetCameraOverrideViewMatrix(const MT_CmMatrix4x4& mat)
752-
{
753-
m_overrideCamViewMat = mat;
754-
}
755-
756-
void KX_KetsjiEngine::SetCameraOverrideClipping(float nearfrust, float farfrust)
732+
void KX_KetsjiEngine::SetCameraOverrideZoom(float camzoom)
757733
{
758-
m_overrideCamNear = nearfrust;
759-
m_overrideCamFar = farfrust;
734+
m_overrideCamZoom = camzoom;
760735
}
761736

762-
void KX_KetsjiEngine::SetCameraOverrideLens(float lens)
737+
void KX_KetsjiEngine::EnableCameraOverride(const std::string& forscene, const MT_CmMatrix4x4& projmat,
738+
const MT_CmMatrix4x4& viewmat, const RAS_CameraData& camdata)
763739
{
764-
m_overrideCamLens = lens;
740+
m_overrideCam = true;
741+
m_overrideSceneName = forscene;
742+
m_overrideCamProjMat = projmat;
743+
m_overrideCamViewMat = viewmat;
744+
m_overrideCamData = camdata;
765745
}
766746

767-
void KX_KetsjiEngine::SetCameraOverrideZoom(float camzoom)
768-
{
769-
m_overrideCamZoom = camzoom;
770-
}
771747

772748
void KX_KetsjiEngine::GetSceneViewport(KX_Scene *scene, KX_Camera *cam, RAS_Rect& area, RAS_Rect& viewport)
773749
{
@@ -797,7 +773,7 @@ void KX_KetsjiEngine::GetSceneViewport(KX_Scene *scene, KX_Camera *cam, RAS_Rect
797773

798774
area = userviewport;
799775
}
800-
else if (!m_overrideCam || (scene->GetName() != m_overrideSceneName) || m_overrideCamUseOrtho) {
776+
else if (!m_overrideCam || (scene->GetName() != m_overrideSceneName) || !m_overrideCamData.m_perspective) {
801777
RAS_FramingManager::ComputeViewport(
802778
scene->GetFramingType(),
803779
m_canvas->GetDisplayArea(),
@@ -929,7 +905,7 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene *scene, KX_Camera *cam, unsigned shor
929905
override_camera = m_overrideCam && (scene->GetName() == m_overrideSceneName) &&
930906
(cam->GetName() == "__default__cam__");
931907

932-
if (override_camera && m_overrideCamUseOrtho) {
908+
if (override_camera && !m_overrideCamData.m_perspective) {
933909
m_rasterizer->SetProjectionMatrix(m_overrideCamProjMat);
934910
if (!cam->hasValidProjectionMatrix()) {
935911
// needed to get frustum planes for culling
@@ -949,11 +925,6 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene *scene, KX_Camera *cam, unsigned shor
949925
focallength = cam->GetFocalLength();
950926
MT_Matrix4x4 projmat;
951927

952-
if (override_camera) {
953-
nearfrust = m_overrideCamNear;
954-
farfrust = m_overrideCamFar;
955-
}
956-
957928
float camzoom = override_camera ? m_overrideCamZoom : m_cameraZoom;
958929
if (orthographic) {
959930

@@ -1123,15 +1094,7 @@ void KX_KetsjiEngine::PostProcessScene(KX_Scene *scene)
11231094
if (!scene->GetActiveCamera() || override_camera) {
11241095
KX_Camera *activecam = NULL;
11251096

1126-
RAS_CameraData camdata = RAS_CameraData();
1127-
if (override_camera) {
1128-
camdata.m_lens = m_overrideCamLens;
1129-
camdata.m_clipstart = m_overrideCamNear;
1130-
camdata.m_clipend = m_overrideCamFar;
1131-
1132-
camdata.m_perspective = !m_overrideCamUseOrtho;
1133-
}
1134-
activecam = new KX_Camera(scene, KX_Scene::m_callbacks, camdata);
1097+
activecam = new KX_Camera(scene, KX_Scene::m_callbacks, override_camera ? m_overrideCamData : RAS_CameraData());
11351098
activecam->SetName("__default__cam__");
11361099

11371100
// set transformation

source/gameengine/Ketsji/KX_KetsjiEngine.h

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
#include "KX_Scene.h"
4141
#include "EXP_Python.h"
4242
#include "KX_WorldInfo.h"
43+
#include "RAS_CameraData.h"
4344
#include <vector>
4445

4546
struct TaskScheduler;
@@ -152,13 +153,9 @@ class KX_KetsjiEngine
152153

153154
bool m_overrideCam;
154155
std::string m_overrideSceneName;
155-
156-
bool m_overrideCamUseOrtho;
156+
RAS_CameraData m_overrideCamData;
157157
MT_CmMatrix4x4 m_overrideCamProjMat;
158158
MT_CmMatrix4x4 m_overrideCamViewMat;
159-
float m_overrideCamNear;
160-
float m_overrideCamFar;
161-
float m_overrideCamLens;
162159
/// Default camera zoom.
163160
float m_overrideCamZoom;
164161

@@ -315,17 +312,11 @@ class KX_KetsjiEngine
315312

316313
/// Sets zoom for camera objects, useful only with extend and scale framing mode.
317314
void SetCameraZoom(float camzoom);
318-
319-
void EnableCameraOverride(const std::string& forscene);
320-
321-
void SetCameraOverrideUseOrtho(bool useOrtho);
322-
void SetCameraOverrideProjectionMatrix(const MT_CmMatrix4x4& mat);
323-
void SetCameraOverrideViewMatrix(const MT_CmMatrix4x4& mat);
324-
void SetCameraOverrideClipping(float near, float far);
325-
void SetCameraOverrideLens(float lens);
326315
/// Sets zoom for default camera, = 2 in embedded mode.
327316
void SetCameraOverrideZoom(float camzoom);
328317

318+
void EnableCameraOverride(const std::string& forscene, const MT_CmMatrix4x4& projmat, const MT_CmMatrix4x4& viewmat, const RAS_CameraData& camdata);
319+
329320
// Update animations for object in this scene
330321
void UpdateAnimations(KX_Scene *scene);
331322

source/gameengine/Launcher/LA_BlenderLauncher.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,13 @@ void LA_BlenderLauncher::InitCamera()
130130
m_ketsjiEngine->SetCameraOverrideZoom(2.0f);
131131

132132
if (rv3d->persp != RV3D_CAMOB) {
133-
m_ketsjiEngine->EnableCameraOverride(m_startSceneName);
134-
m_ketsjiEngine->SetCameraOverrideUseOrtho((rv3d->persp == RV3D_ORTHO));
135-
m_ketsjiEngine->SetCameraOverrideProjectionMatrix(MT_CmMatrix4x4(rv3d->winmat));
136-
m_ketsjiEngine->SetCameraOverrideViewMatrix(MT_CmMatrix4x4(rv3d->viewmat));
137-
m_ketsjiEngine->SetCameraOverrideClipping(m_view3d->near, m_view3d->far);
138-
m_ketsjiEngine->SetCameraOverrideLens(m_view3d->lens);
133+
RAS_CameraData camdata = RAS_CameraData();
134+
camdata.m_lens = m_view3d->lens;
135+
camdata.m_clipstart = m_view3d->near;
136+
camdata.m_clipend = m_view3d->far;
137+
camdata.m_perspective = (rv3d->persp != RV3D_ORTHO);
138+
139+
m_ketsjiEngine->EnableCameraOverride(m_startSceneName, MT_CmMatrix4x4(rv3d->winmat), MT_CmMatrix4x4(rv3d->viewmat), camdata);
139140
}
140141
}
141142

0 commit comments

Comments
 (0)