From 17eaca46d7e8127f40f07eaaeb1449aba1566627 Mon Sep 17 00:00:00 2001 From: Gianni Alessandroni <45824238+NotManyIdeasDev@users.noreply.github.com> Date: Fri, 14 May 2021 15:48:07 +0200 Subject: [PATCH] Hotfix for glitchy camera Super small fix that was causing the camera to glitch every x amount of seconds/pixels. Works much better now, 3/4 lines changed. --- .../core/core_2d_camera_smooth_pixelperfect.c | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/examples/core/core_2d_camera_smooth_pixelperfect.c b/examples/core/core_2d_camera_smooth_pixelperfect.c index 3594c4abc..3ead3ab49 100644 --- a/examples/core/core_2d_camera_smooth_pixelperfect.c +++ b/examples/core/core_2d_camera_smooth_pixelperfect.c @@ -25,7 +25,7 @@ int main(void) const int virualScreenWidth = 160; const int virtualScreenHeight = 90; - const float virtualRatio = (float)screenWidth/(float)virualScreenWidth; + const float virtualRatio = (float)screenWidth / (float)virualScreenWidth; InitWindow(screenWidth, screenHeight, "raylib [core] example - smooth pixel-perfect camera"); @@ -43,7 +43,7 @@ int main(void) //The renderTexture's height is flipped (in the source Rectangle), due to OpenGL reasons. Rectangle renderTextureSource = { 0.0f, 0.0f, (float)renderTexture.texture.width, (float)-renderTexture.texture.height }; - Rectangle renderTextureDest = { -virtualRatio, -virtualRatio, screenWidth + (virtualRatio*2), screenHeight + (virtualRatio*2) }; + Rectangle renderTextureDest = { -virtualRatio, -virtualRatio, screenWidth + (virtualRatio * 2), screenHeight + (virtualRatio * 2) }; Vector2 origin = { 0.0f, 0.0f }; @@ -61,30 +61,24 @@ int main(void) { // Update //---------------------------------------------------------------------------------- - rotation += degreesPerSecond*GetFrameTime(); // Rotate the rectangles. + rotation += degreesPerSecond * GetFrameTime(); // Rotate the rectangles. // Make the camera move to demonstrate the effect. - cameraX = (sinf(GetTime())*50.0f) - 10.0f; - cameraY = cosf(GetTime())*30.0f; + cameraX = (sinf(GetTime()) * 50.0f) - 10.0f; + cameraY = cosf(GetTime()) * 30.0f; // Set the camera's target to the values computed above. screenSpaceCamera.target = (Vector2){ cameraX, cameraY }; - // Round worldCamera's X, keep the decimals on screenSpaceCamera. - if (screenSpaceCamera.target.x >= 1 || screenSpaceCamera.target.x <= -1) - { - worldSpaceCamera.target.x = (int)screenSpaceCamera.target.x; - screenSpaceCamera.target.x -= worldSpaceCamera.target.x; - screenSpaceCamera.target.x *= virtualRatio; - } + //Round worldSpace coordinates, keep decimals into screenSpace coordinates. + worldSpaceCamera.target.x = (int)screenSpaceCamera.target.x; + screenSpaceCamera.target.x -= worldSpaceCamera.target.x; + screenSpaceCamera.target.x *= virtualRatio; + + worldSpaceCamera.target.y = (int)screenSpaceCamera.target.y; + screenSpaceCamera.target.y -= worldSpaceCamera.target.y; + screenSpaceCamera.target.y *= virtualRatio; - // Round worldCamera's Y, keep the decimals on screenSpaceCamera. - if (screenSpaceCamera.target.y >= 1 || screenSpaceCamera.target.y <= -1) - { - worldSpaceCamera.target.y = (int)screenSpaceCamera.target.y; - screenSpaceCamera.target.y -= worldSpaceCamera.target.y; - screenSpaceCamera.target.y *= virtualRatio; - } //---------------------------------------------------------------------------------- // Draw