From 446670bd29bb01e97180a1667327afc478241a6f Mon Sep 17 00:00:00 2001 From: Patedam Date: Mon, 23 Feb 2026 23:13:06 -0500 Subject: [PATCH] Various debug to check lighting --- Assets/compiled/Debug.vert.dxil | Bin 5104 -> 5128 bytes Assets/compiled/ImGui.frag.dxil | Bin 4616 -> 4640 bytes Assets/compiled/ImGui.vert.dxil | Bin 5076 -> 5100 bytes Assets/compiled/Skybox.vert.dxil | Bin 5440 -> 5464 bytes Assets/compiled/SolidColor.frag.dxil | Bin 5752 -> 5776 bytes Assets/compiled/Triangle.vert.dxil | Bin 6016 -> 6040 bytes Assets/source/RootConstants.hlsl | 8 +- Assets/source/SolidColor.frag.hlsl | 6 +- Juliet/include/Graphics/MeshRenderer.h | 2 + Juliet/include/Graphics/PushConstants.h | 8 +- Juliet/src/Graphics/DebugDisplayRenderer.cpp | 16 +- Juliet/src/Graphics/MeshRenderer.cpp | 20 ++ JulietApp/main.cpp | 232 +++++++++++++++---- 13 files changed, 222 insertions(+), 70 deletions(-) diff --git a/Assets/compiled/Debug.vert.dxil b/Assets/compiled/Debug.vert.dxil index 865e6a3f1b09cd2e95549991cde9d224fa46c6b7..9c8b91ebf72155f7b446798313b255d4d4f75896 100644 GIT binary patch delta 196 zcmV;#06YKiCx|E-L|8&Y_G>h0V|zQWMubTh$F{&J0RR912o#YT8V2kN000OJu{v@A zB|HfL0A>II08at{07O_xOa=h}01yBG03- zb;R~27RJVuc7{erlqOd;Mwj;HHbEG=4F+Kc)g4$Dog=n4u`o8Kv@vAv0fu`#8cq0tS!vAxMn5QcAqLGVG<2i8UFi0w@*j4iXv1|VS@ E0Cw**XaE2J diff --git a/Assets/compiled/ImGui.frag.dxil b/Assets/compiled/ImGui.frag.dxil index 0529b791da08adb9c0bce54b53f95b160c43683a..f87c1e688266f28ae19e1b0f2440a3450244a3ce 100644 GIT binary patch delta 174 zcmeBBS)d~665-@LWA!a5o+C}M&Gze}f~0RxWMp7qP?#tw&04|5z%XT_WizAd4h{x} zG@!5^69a=wgr^T1P>lePzW^xigI=x+{}#cHos*lWaRLW-MF{2b)(_r z1U5;#=N)f-b$WU=-}3bGY4zkZITT3qDDi9AZqRdb&&f|p%<;)g&nR)u&&e+mW?6JQ YL7*n!Yh&p}tE6gS?qu%GOWBgS0a_9^X8-^I delta 154 zcmZ3W(xD>h65-^0@P^=)e~k|%w1Up>R+!kx%E-XLz%fx$nl*uofuUxjWizAd0uBa- zG@!5s69a=wgr^T1P>leP-vJbNaz1cRk%xgne)B^{Zf3?8o8Ph&G8()vSUPv%MZu*f zr}kc4x_76qKu2z~;|<4B_G_*!ns0e}`Lud+nj8wGd6f9IY&Ym>OWM$AX-0RR91?2#E81uzQ$08FttuK^`Q z2><|Q0096|0ssI+SV>F<0RR9H0000i2><{>L%`l43;+N~vkd|-0|Eg7vpxlP0Vq;O zY;R&=Y)olqXmmtra%E$5X>V>5gn`>&5Oz@AfpyV2VtW${V`G!i1`{LD5!;(s7#maC i85-Tt8{3=Q1Yz(t7z7_wePCU*j@aJB!q~I>2H6aHXgy~D delta 153 zcmaE(ennl><$6X{9Zm*@ zGzLZnZzcu?mk3WEHlP{-pfVAlxRdjNdx|_jdNVJRJ~QL*$%TB@n=4pt85yl6?_rbF z5lr;5c3#}fr94}K=Pq0GiDobUHQijnw$`wmOu2Qvv4`H^FG; Dd3`J+ diff --git a/Assets/compiled/Skybox.vert.dxil b/Assets/compiled/Skybox.vert.dxil index 6cc5b90daa39e24fdc05f586fc4c355790875c2d..f2a378b3698848191d09c679f5862a82ccf18f79 100644 GIT binary patch delta 197 zcmX@0bwf+iCBn)1%leeyXOE4%ep`F%KJ2>@$jHFJ5HV3wnpJ~~fx%^?Wig{_1qTB| z8UrJP91~C^!qbNhs73&&ECDF)IQ#NoIbYaEs&Z1c9=EyN#t6Et9H+xs#Kj1 delta 153 zcmcbibwEqfCBn&hXMxfA)6t;}_V!wQ2Yyw(VPs%naF{45%__jfz@W3yvY1gdfrEh| zje(Itf{B5_CBoB(4X8!{sLTT>?&N&no+1we1OMiWjF*`hUr*-bwch-I#e|X3YO*w& zq>f;sm$mcaW-jH~3Ou*jnol%)@vrIT3ce*Nb@zhw?b&x&5+9gJu*iqhCd9UEE@FGe F2LN5aEPen0 diff --git a/Assets/compiled/SolidColor.frag.dxil b/Assets/compiled/SolidColor.frag.dxil index 910457d8143bfacc27612a34272fd3979a61f4c0..522effa2c9dfc7ad28e466592e671b97877fc594 100644 GIT binary patch delta 176 zcmeyNGeK9D7G8)61vTlhfqTaFDI}M6(zFn(hmNw`WI4NC)4Nl)8IC`u6NQER7t^ byc`GFL**l`m$Gl^yK(Qxp&OfH*k$+ujUzpn delta 179 zcmbQB`$I?4CBn%$t>f0@{=```mo5Dg7Ubr)fsuiMp<<$>H0uU#28J^mEzdKmF5zTg zNCOIIGBGf?M0onJ0o4cq`8_~!C+7qA6nPjJ5;p5H6*Dvb*u0Q6n=wFk*%o6Ht3@U| zHyQ5QV!oY|>7%c}4D%Ze0;K^r8%tx$9a=Qs^7Qg)_2e`;G#q4WKGE#Ozowfj_?D#9 f-3!vUXWwCI6e&0Qj*v>j5RS z2><|Q0097P0ssI+SV>F<0RR9H0001-2><{>L%`l43;+ORvq=JT0|Em9v%Up%0bf!_ zY;R&=Y)olqXmmtra%E$5X>V>5gu&Zj5Oz@AfpyV2VtW${V`EA?L!*NVBby)$-v)!o xgGvvqi_j6j5R4 z2><|Q0097J0ssI+SV>F<0RR9H0001l2><{>L%`l43;+OLvmp#*0<*0I4*>!FlVJ}# zv-kx%0Y^GaX=iA3L}_wmV{~b6ZWDyT+h7oOP~Cxb5n)O@L!*NVBby)$-v)!ogGvvq hiwaZP85-Tt8{3=Q1YrP!4F 0) diff --git a/Juliet/include/Graphics/MeshRenderer.h b/Juliet/include/Graphics/MeshRenderer.h index 347482f..0dc8060 100644 --- a/Juliet/include/Graphics/MeshRenderer.h +++ b/Juliet/include/Graphics/MeshRenderer.h @@ -59,6 +59,8 @@ namespace Juliet [[nodiscard]] JULIET_API LightID AddPointLight(const PointLight& light); JULIET_API void SetPointLightPosition(LightID id, const Vector3& position); JULIET_API void SetPointLightColor(LightID id, const Vector3& color); + JULIET_API void SetPointLightRadius(LightID id, float radius); + JULIET_API void SetPointLightIntensity(LightID id, float intensity); JULIET_API void ClearPointLights(); // Utils diff --git a/Juliet/include/Graphics/PushConstants.h b/Juliet/include/Graphics/PushConstants.h index 740ad74..620c0e7 100644 --- a/Juliet/include/Graphics/PushConstants.h +++ b/Juliet/include/Graphics/PushConstants.h @@ -19,10 +19,10 @@ namespace Juliet float Translate[2]; float Padding2[2]; - Vector3 LightDirection; - float LightPad; - Vector3 LightColor; - float AmbientIntensity; + Vector3 GlobalLightDirection; + float GlobalLightPad; + Vector3 GlobalLightColor; + float GlobalAmbientIntensity; uint32 LightBufferIndex; uint32 ActiveLightCount; diff --git a/Juliet/src/Graphics/DebugDisplayRenderer.cpp b/Juliet/src/Graphics/DebugDisplayRenderer.cpp index bd56e5d..ed5fab3 100644 --- a/Juliet/src/Graphics/DebugDisplayRenderer.cpp +++ b/Juliet/src/Graphics/DebugDisplayRenderer.cpp @@ -313,10 +313,10 @@ namespace Juliet pushData.Translate[0] = 0.0f; pushData.Translate[1] = 0.0f; // Dummy light data as we don't light debug primitives - pushData.LightDirection = {0,0,-1}; - pushData.LightPad = 0; - pushData.LightColor = {1,1,1}; - pushData.AmbientIntensity = 1.0f; + pushData.GlobalLightDirection = {0,0,-1}; + pushData.GlobalLightPad = 0; + pushData.GlobalLightColor = {1,1,1}; + pushData.GlobalAmbientIntensity = 1.0f; SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / sizeof(uint32), &pushData); @@ -341,10 +341,10 @@ namespace Juliet pushData.Translate[0] = 0.0f; pushData.Translate[1] = 0.0f; // Dummy light data as we don't light debug primitives - pushData.LightDirection = {0,0,-1}; - pushData.LightPad = 0; - pushData.LightColor = {1,1,1}; - pushData.AmbientIntensity = 1.0f; + pushData.GlobalLightDirection = {0,0,-1}; + pushData.GlobalLightPad = 0; + pushData.GlobalLightColor = {1,1,1}; + pushData.GlobalAmbientIntensity = 1.0f; SetPushConstants(cmdList, ShaderStage::Vertex, 0, sizeof(pushData) / sizeof(uint32), &pushData); diff --git a/Juliet/src/Graphics/MeshRenderer.cpp b/Juliet/src/Graphics/MeshRenderer.cpp index b56435a..23015cf 100644 --- a/Juliet/src/Graphics/MeshRenderer.cpp +++ b/Juliet/src/Graphics/MeshRenderer.cpp @@ -317,6 +317,26 @@ namespace Juliet } } + void SetPointLightRadius(LightID id, float radius) + { + Assert(id < static_cast(g_MeshRenderer.PointLights.Count)); + g_MeshRenderer.PointLights.Data[id].Radius = radius; + if (g_MeshRenderer.MappedLights) + { + g_MeshRenderer.MappedLights[id].Radius = radius; + } + } + + void SetPointLightIntensity(LightID id, float intensity) + { + Assert(id < static_cast(g_MeshRenderer.PointLights.Count)); + g_MeshRenderer.PointLights.Data[id].Intensity = intensity; + if (g_MeshRenderer.MappedLights) + { + g_MeshRenderer.MappedLights[id].Intensity = intensity; + } + } + void ClearPointLights() { g_MeshRenderer.PointLights.Clear(); diff --git a/JulietApp/main.cpp b/JulietApp/main.cpp index 3fe9816..262620c 100644 --- a/JulietApp/main.cpp +++ b/JulietApp/main.cpp @@ -3,10 +3,18 @@ #ifdef global #undef global #endif +#include #include #include #define global static +#ifdef _WIN32 +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#endif + #include #include #include @@ -42,15 +50,29 @@ static bool animateCubes = true; static bool animateLights = true; static bool animateCamera = true; -static bool freeCameraMode = false; -static float camYaw = 0.0f; -static float camPitch = 0.0f; -static Juliet::Vector3 camPos = { 25.0f, 0.0f, 12.5f }; +static bool freeCameraMode = false; +static float camYaw = 0.0f; +static float camPitch = 0.0f; +static Juliet::Vector3 camPos = { 25.0f, 0.0f, 12.5f }; static float animateCubesTime = 0.0f; static float animateLightsTime = 0.0f; static float animateCameraTime = 0.0f; +static float redLightRadius = 10.0f; +static float redLightIntensity = 5.0f; +static float redLightColor[3] = { 1.0f, 0.2f, 0.2f }; +static bool redLightFollowsCamera = false; + +static bool enableGlobalLight = true; +static float globalLightDir[3] = { 0.5f, -1.0f, -0.5f }; +static float globalLightColor[3] = { 1.0f, 0.95f, 0.8f }; +static float globalAmbientIntensity = 0.2f; + +static float blueLightRadius = 15.0f; +static float blueLightIntensity = 8.0f; +static float blueLightColor[3] = { 0.2f, 0.2f, 1.0f }; + // TODO : Replace with message box from framework + call main and not winmain + subsystem // TODO : Think how to do the draw pipeline. // Ex: Expose a Draw method ? @@ -139,16 +161,16 @@ void JulietApplication::Init(NonNullPtr) // Start with some default test lights PointLight redLight = {}; redLight.Position = { 5.0f, 5.0f, 2.0f }; - redLight.Radius = 10.0f; - redLight.Color = { 1.0f, 0.2f, 0.2f }; - redLight.Intensity = 5.0f; + redLight.Radius = redLightRadius; + redLight.Color = { redLightColor[0], redLightColor[1], redLightColor[2] }; + redLight.Intensity = redLightIntensity; RedLightID = AddPointLight(redLight); PointLight blueLight = {}; blueLight.Position = { -5.0f, 0.0f, 2.0f }; - blueLight.Radius = 15.0f; - blueLight.Color = { 0.2f, 0.2f, 1.0f }; - blueLight.Intensity = 8.0f; + blueLight.Radius = blueLightRadius; + blueLight.Color = { blueLightColor[0], blueLightColor[1], blueLightColor[2] }; + blueLight.Intensity = blueLightIntensity; BlueLightID = AddPointLight(blueLight); } @@ -262,24 +284,19 @@ void JulietApplication::Update() { reloadShadersDebounce = false; } - - if (evt.Type == EventType::Mouse_Move && freeCameraMode) - { - float sensitivity = 0.005f; - camYaw += evt.Data.MouseMovement.X_Displacement * sensitivity; - camPitch -= evt.Data.MouseMovement.Y_Displacement * sensitivity; - - // Limit pitch to avoid flipping - if (camPitch > 1.5f) camPitch = 1.5f; - if (camPitch < -1.5f) camPitch = -1.5f; - } } + static bool firstFreeFrame = false; + if (IsKeyDown(ScanCode::F1)) { if (!f1Debounce) { freeCameraMode = !freeCameraMode; + if (freeCameraMode) + { + firstFreeFrame = true; + } f1Debounce = true; } } @@ -288,6 +305,47 @@ void JulietApplication::Update() f1Debounce = false; } + // Confine and hide the mouse for Free Camera mode + if (freeCameraMode) + { +#ifdef JULIET_ENABLE_IMGUI + ImGui::SetMouseCursor(ImGuiMouseCursor_None); +#endif + +#ifdef _WIN32 + HWND hwnd = GetForegroundWindow(); + if (hwnd) + { + RECT rect; + GetClientRect(hwnd, &rect); + POINT ptCenterClient = { (rect.right - rect.left) / 2, (rect.bottom - rect.top) / 2 }; + + if (!firstFreeFrame) + { + POINT currentPos; + GetCursorPos(¤tPos); + ScreenToClient(hwnd, ¤tPos); + + float deltaX = static_cast(currentPos.x - ptCenterClient.x); + float deltaY = static_cast(currentPos.y - ptCenterClient.y); + + float sensitivity = 0.005f; + // Plus because the mouse is inverted inherently by windows to screen coordinate + camYaw += deltaX * sensitivity; + camPitch -= deltaY * sensitivity; + + camPitch = std::min(camPitch, 1.5f); + camPitch = std::max(camPitch, -1.5f); + } + firstFreeFrame = false; + + POINT ptCenterScreen = ptCenterClient; + ClientToScreen(hwnd, &ptCenterScreen); + SetCursorPos(ptCenterScreen.x, ptCenterScreen.y); + } +#endif + } + if (freeCameraMode) { float speed = 10.0f * deltaTime; @@ -300,39 +358,104 @@ void JulietApplication::Update() Vector3 right = { cosf(camYaw + 1.5708f), sinf(camYaw + 1.5708f), 0.0f }; Vector3 up = { 0.0f, 0.0f, 1.0f }; - if (IsKeyDown(ScanCode::W)) camPos = camPos + forward * speed; - if (IsKeyDown(ScanCode::S)) camPos = camPos - forward * speed; - if (IsKeyDown(ScanCode::D)) camPos = camPos + right * speed; - if (IsKeyDown(ScanCode::A)) camPos = camPos - right * speed; - if (IsKeyDown(ScanCode::E)) camPos = camPos + up * speed; - if (IsKeyDown(ScanCode::Q)) camPos = camPos - up * speed; + if (IsKeyDown(ScanCode::W)) + { + camPos = camPos + forward * speed; + } + if (IsKeyDown(ScanCode::S)) + { + camPos = camPos - forward * speed; + } + if (IsKeyDown(ScanCode::D)) + { + camPos = camPos + right * speed; + } + if (IsKeyDown(ScanCode::A)) + { + camPos = camPos - right * speed; + } + if (IsKeyDown(ScanCode::E)) + { + camPos = camPos + up * speed; + } + if (IsKeyDown(ScanCode::Q)) + { + camPos = camPos - up * speed; + } } - if (animateCubes) animateCubesTime += deltaTime; - if (animateLights) animateLightsTime += deltaTime; - if (animateCamera) animateCameraTime += deltaTime; + if (animateCubes) + { + animateCubesTime += deltaTime; + } + if (animateLights) + { + animateLightsTime += deltaTime; + } + if (animateCamera) + { + animateCameraTime += deltaTime; + } #ifdef JULIET_ENABLE_IMGUI ImGui::Begin("Debug Controls"); ImGui::Checkbox("Animate Cubes", &animateCubes); ImGui::Checkbox("Animate Lights", &animateLights); ImGui::Checkbox("Animate Camera", &animateCamera); + + ImGui::Separator(); + ImGui::Text("Global Light"); + ImGui::Checkbox("Enable Global Light", &enableGlobalLight); + if (enableGlobalLight) + { + ImGui::SliderFloat3("Direction", globalLightDir, -1.0f, 1.0f); + ImGui::ColorEdit3("Color", globalLightColor); + ImGui::SliderFloat("Ambient Intensity", &globalAmbientIntensity, 0.0f, 1.0f); + } + + ImGui::Separator(); + ImGui::Text("Red Point Light"); + ImGui::ColorEdit3("Red Color", redLightColor); + ImGui::SliderFloat("Red Radius", &redLightRadius, 1.0f, 50.0f); + ImGui::SliderFloat("Red Intensity", &redLightIntensity, 0.0f, 50.0f); + ImGui::Checkbox("Red Light Follows Camera", &redLightFollowsCamera); + + ImGui::Separator(); + ImGui::Text("Blue Point Light"); + ImGui::ColorEdit3("Blue Color", blueLightColor); + ImGui::SliderFloat("Blue Radius", &blueLightRadius, 1.0f, 50.0f); + ImGui::SliderFloat("Blue Intensity", &blueLightIntensity, 0.0f, 50.0f); + ImGui::End(); #endif ArenaClear(GameScratchArena); - Vector3 redLightPos = { 5.0f, 5.0f, 2.0f }; + Vector3 redLightPos = { 5.0f, 5.0f, 2.0f }; Vector3 blueLightPos = { -5.0f, 0.0f, 2.0f }; if (animateLights || animateLightsTime > 0.0f) { - redLightPos = { cosf(animateLightsTime * 2.0f) * 5.0f, sinf(animateLightsTime * 2.0f) * 5.0f, 2.0f }; + redLightPos = { cosf(animateLightsTime * 2.0f) * 5.0f, sinf(animateLightsTime * 2.0f) * 5.0f, 2.0f }; blueLightPos = { -5.0f, cosf(animateLightsTime) * 3.0f, 2.0f }; } + if (redLightFollowsCamera) + { + Camera cam = GetDebugCamera(); + redLightPos = cam.Position; + } + SetPointLightPosition(RedLightID, redLightPos); SetPointLightPosition(BlueLightID, blueLightPos); + + SetPointLightColor(RedLightID, { redLightColor[0], redLightColor[1], redLightColor[2] }); + SetPointLightRadius(RedLightID, redLightRadius); + SetPointLightIntensity(RedLightID, redLightIntensity); + + SetPointLightColor(BlueLightID, { blueLightColor[0], blueLightColor[1], blueLightColor[2] }); + SetPointLightRadius(BlueLightID, blueLightRadius); + SetPointLightIntensity(BlueLightID, blueLightIntensity); // Animate the 100 cubes (10x10 grid) constexpr int kGridSize = 10; @@ -351,24 +474,22 @@ void JulietApplication::Update() float timeZ = animateCubesTime * 2.0f + seed * 0.5f; float z = 0.0f; - float scaleF = 1.0f; + float scaleF = 1.0f; Matrix rotation = MatrixIdentity(); if (animateCubes || animateCubesTime > 0.0f) { - z = sinf(timeZ) * 1.5f; // Oscillate up and down + z = sinf(timeZ) * 1.5f; // Oscillate up and down scaleF = 1.0f + sinf(animateCubesTime * 1.5f + seed) * 0.3f; // Pulse scale rotation = MatrixRotation(animateCubesTime * 1.2f + seed * 0.73f, animateCubesTime * 0.8f + seed * 1.17f, - animateCubesTime * 0.5f + seed * 0.53f); + animateCubesTime * 0.5f + seed * 0.53f); } - Matrix scale = MatrixScale(scaleF, scaleF, scaleF); + Matrix scale = MatrixScale(scaleF, scaleF, scaleF); SetMeshTransform(cube, MatrixTranslation(x, y, z) * rotation * scale); } } - - DebugDisplay_DrawLine({ 0.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.0f }, { 1.0f, 0.0f, 0.0f, 1.0f }, false); DebugDisplay_DrawLine({ 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 1.0f, 0.0f, 1.0f }, true); DebugDisplay_DrawLine({ 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f, 1.0f }, true); @@ -435,9 +556,18 @@ void JulietApplication::OnRender(RenderPass* pass, CommandList* cmd) PushData pushData = {}; pushData.ViewProjection = Camera_GetViewProjectionMatrix(GetDebugCamera()); - pushData.LightDirection = Normalize({ 0.5f, -1.0f, -0.5f }); - pushData.LightColor = { 1.0f, 0.95f, 0.8f }; - pushData.AmbientIntensity = 0.2f; + if (enableGlobalLight) + { + pushData.GlobalLightDirection = Normalize({ globalLightDir[0], globalLightDir[1], globalLightDir[2] }); + pushData.GlobalLightColor = { globalLightColor[0], globalLightColor[1], globalLightColor[2] }; + pushData.GlobalAmbientIntensity = globalAmbientIntensity; + } + else + { + pushData.GlobalLightDirection = { 0.0f, -1.0f, 0.0f }; + pushData.GlobalLightColor = { 0.0f, 0.0f, 0.0f }; + pushData.GlobalAmbientIntensity = 0.0f; + } RenderSkybox(pass, cmd, pushData.ViewProjection); RenderMeshes(pass, cmd, pushData); @@ -467,11 +597,11 @@ Camera JulietApplication::GetDebugCamera() { if (freeCameraMode) { - Camera cam = {}; - cam.Position = camPos; - cam.Target = camPos + Vector3{ cosf(camYaw) * cosf(camPitch), sinf(camYaw) * cosf(camPitch), sinf(camPitch) }; - cam.Up = { 0.0f, 0.0f, 1.0f }; - cam.FOV = 1.047f; + Camera cam = {}; + cam.Position = camPos; + cam.Target = camPos + Vector3{ cosf(camYaw) * cosf(camPitch), sinf(camYaw) * cosf(camPitch), sinf(camPitch) }; + cam.Up = { 0.0f, 0.0f, 1.0f }; + cam.FOV = 1.047f; cam.AspectRatio = 1200.0f / 800.0f; cam.NearPlane = 0.1f; cam.FarPlane = 1000.0f; @@ -482,16 +612,16 @@ Camera JulietApplication::GetDebugCamera() float baseRadius = 25.0f; // Increased to see 10x10 cube grid float radius = baseRadius; - + if (animateCamera || animateCameraTime > 0.0f) { - float orbitSpeed = 0.5f; + float orbitSpeed = 0.5f; float currentOrbitTime = animateCameraTime * orbitSpeed; - + float zoomAmplitude = 15.0f; float zoomSpeed = 0.5f; radius = baseRadius + (sinf(animateCameraTime * zoomSpeed) * zoomAmplitude); - + float zHeight = radius * 0.5f; // Keep a nice downward viewing angle Camera cam = {}; @@ -505,7 +635,7 @@ Camera JulietApplication::GetDebugCamera() return cam; } - + float zHeight = radius * 0.5f; // Keep a nice downward viewing angle Camera cam = {};