From e97ba08c00ebc18dc933d21c3b73ce51e00ad250 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Mon, 6 May 2019 23:11:49 +0200 Subject: [PATCH] Ortho camera zoom --- Sources/arm/renderpath/RenderPathDeferred.hx | 6 ++++-- Sources/arm/trait/FlyCamera.hx | 4 ++++ Sources/arm/trait/OrbitCamera.hx | 4 ++++ Sources/arm/trait/RotateCamera.hx | 4 ++++ Sources/arm/ui/UITrait.hx | 18 ++++++++++-------- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Sources/arm/renderpath/RenderPathDeferred.hx b/Sources/arm/renderpath/RenderPathDeferred.hx index 958b161f..d312ce80 100644 --- a/Sources/arm/renderpath/RenderPathDeferred.hx +++ b/Sources/arm/renderpath/RenderPathDeferred.hx @@ -388,7 +388,8 @@ class RenderPathDeferred { #if ((rp_ssgi == "RTGI") || (rp_ssgi == "RTAO")) { - if (armory.data.Config.raw.rp_ssgi != false) { + var ssgi = armory.data.Config.raw.rp_ssgi != false && UITrait.inst.cameraType == 0; + if (ssgi) { path.setTarget("singlea"); path.bindTarget("_main", "gbufferD"); path.bindTarget("gbuffer0", "gbuffer0"); @@ -451,7 +452,8 @@ class RenderPathDeferred { path.bindTarget("gbuffer1", "gbuffer1"); #if (rp_ssgi != "Off") { - if (armory.data.Config.raw.rp_ssgi != false) { + var ssgi = armory.data.Config.raw.rp_ssgi != false && UITrait.inst.cameraType == 0; + if (ssgi) { path.bindTarget("singlea", "ssaotex"); } else { diff --git a/Sources/arm/trait/FlyCamera.hx b/Sources/arm/trait/FlyCamera.hx index 26d5df1d..9338de9d 100644 --- a/Sources/arm/trait/FlyCamera.hx +++ b/Sources/arm/trait/FlyCamera.hx @@ -66,6 +66,10 @@ class FlyCamera extends iron.Trait { if (d > 0.0) { UITrait.inst.ddirty = 2; camera.transform.move(dir, d); + + if (UITrait.inst.cameraType == 1) { + UITrait.inst.updateCameraType(UITrait.inst.cameraType); + } } if (mouse.down("right")) { diff --git a/Sources/arm/trait/OrbitCamera.hx b/Sources/arm/trait/OrbitCamera.hx index a5d3ffef..7c92df16 100644 --- a/Sources/arm/trait/OrbitCamera.hx +++ b/Sources/arm/trait/OrbitCamera.hx @@ -76,6 +76,10 @@ class OrbitCamera extends iron.Trait { if (redraws > 0) { redraws--; UITrait.inst.ddirty = 2; + + if (UITrait.inst.cameraType == 1) { + UITrait.inst.updateCameraType(UITrait.inst.cameraType); + } } }); } diff --git a/Sources/arm/trait/RotateCamera.hx b/Sources/arm/trait/RotateCamera.hx index 4220feee..8d210ec5 100644 --- a/Sources/arm/trait/RotateCamera.hx +++ b/Sources/arm/trait/RotateCamera.hx @@ -69,6 +69,10 @@ class RotateCamera extends iron.Trait { if (redraws > 0) { redraws--; UITrait.inst.ddirty = 2; + + if (UITrait.inst.cameraType == 1) { + UITrait.inst.updateCameraType(UITrait.inst.cameraType); + } } }); } diff --git a/Sources/arm/ui/UITrait.hx b/Sources/arm/ui/UITrait.hx index 651b335b..736f6867 100644 --- a/Sources/arm/ui/UITrait.hx +++ b/Sources/arm/ui/UITrait.hx @@ -1503,8 +1503,7 @@ class UITrait extends iron.Trait { fovHandle = Id.handle({value: Std.int(cam.data.raw.fov * 100) / 100}); cam.data.raw.fov = ui.slider(fovHandle, "FoV", 0.3, 2.0, true); if (fovHandle.changed) { - cam.buildProjection(); - ddirty = 2; + updateCameraType(cameraType); } if (messageTimer > 0) { @@ -2748,19 +2747,22 @@ class UITrait extends iron.Trait { public function updateCameraType(cameraType:Int) { var cam = iron.Scene.active.cameras[0]; + var light = iron.Scene.active.lights[0]; if (cameraType == 0) { cam.data.raw.ortho = null; - cam.buildProjection(); + light.visible = true; } else { var f32 = new kha.arrays.Float32Array(4); - f32[0] = -2; - f32[1] = 2; - f32[2] = -2 * (iron.App.h() / iron.App.w()); - f32[3] = 2 * (iron.App.h() / iron.App.w()); + var f = cam.data.raw.fov * cam.transform.world.getLoc().length() / 2.5; + f32[0] = -2 * f; + f32[1] = 2 * f; + f32[2] = -2 * f * (iron.App.h() / iron.App.w()); + f32[3] = 2 * f * (iron.App.h() / iron.App.w()); cam.data.raw.ortho = f32; - cam.buildProjection(); + light.visible = false; } + cam.buildProjection(); ddirty = 2; }