From e6a477c8d29fd413106e24ee7ec3762fc7d206b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wilhelm=20Bj=C3=B6rkstr=C3=B6m?= <143391787+Grantallkotten@users.noreply.github.com> Date: Fri, 28 Feb 2025 13:56:08 +0100 Subject: [PATCH] Applying viewMatrix to the blackhole camera plane Co-Authored-By: Emil Wallberg <49481622+EmilWallberg@users.noreply.github.com> --- .../blackhole/rendering/renderableblackhole.cpp | 6 ++++++ modules/blackhole/rendering/renderableblackhole.h | 2 +- modules/blackhole/rendering/viewport.h | 2 +- modules/blackhole/shaders/blackhole_fs.glsl | 15 ++++++++++----- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/modules/blackhole/rendering/renderableblackhole.cpp b/modules/blackhole/rendering/renderableblackhole.cpp index f5cbc10e1b..81f8e935de 100644 --- a/modules/blackhole/rendering/renderableblackhole.cpp +++ b/modules/blackhole/rendering/renderableblackhole.cpp @@ -36,6 +36,7 @@ namespace openspace { void RenderableBlackHole::initialize() { _viewport = ViewPort(global::navigationHandler->camera()); + global::navigationHandler->camera()->setRotation(glm::dquat(0,0,0,0)); cuda_test(); } @@ -71,6 +72,11 @@ namespace openspace { if (!bindTexture(_uniformCache.viewGrid, viewGridUnit, _viewport.viewGrid)) { LWARNING("UniformCache is missing 'viewGrid'"); } + + _program->setUniform( + _uniformCache.cameraRotationMatrix, + glm::mat4(global::navigationHandler->camera()->combinedViewMatrix()) + ); drawQuad(); diff --git a/modules/blackhole/rendering/renderableblackhole.h b/modules/blackhole/rendering/renderableblackhole.h index 0cbd5b5fc1..81a3be9b11 100644 --- a/modules/blackhole/rendering/renderableblackhole.h +++ b/modules/blackhole/rendering/renderableblackhole.h @@ -40,7 +40,7 @@ private: GLuint _quadVao = 0; GLuint _quadVbo = 0; - UniformCache(enviromentTexture, viewGrid) _uniformCache; + UniformCache(enviromentTexture, viewGrid, cameraRotationMatrix) _uniformCache; std::unique_ptr _enviromentTexture; }; diff --git a/modules/blackhole/rendering/viewport.h b/modules/blackhole/rendering/viewport.h index 9bb8a705ad..312cafa4e3 100644 --- a/modules/blackhole/rendering/viewport.h +++ b/modules/blackhole/rendering/viewport.h @@ -18,7 +18,7 @@ namespace openspace { std::unique_ptr viewGrid; private: Camera* _camera = nullptr; - float fovHorizontel = glm::radians(120.f); + float fovHorizontel = glm::radians(90.f); }; } // namespace openspace diff --git a/modules/blackhole/shaders/blackhole_fs.glsl b/modules/blackhole/shaders/blackhole_fs.glsl index 2add80d1aa..78c977ef06 100644 --- a/modules/blackhole/shaders/blackhole_fs.glsl +++ b/modules/blackhole/shaders/blackhole_fs.glsl @@ -3,6 +3,7 @@ in vec2 TexCoord; uniform sampler2D enviromentTexture; uniform sampler2D viewGrid; +uniform mat4 cameraRotationMatrix; const float PI = 3.1415926535897932384626433832795f; const float VIEWGRIDZ = -1.0f; @@ -22,8 +23,8 @@ float atan2(float a, float b){ return 0.0f; } -vec2 cartisianToSphereical(vec2 cartisian) { - float theta = atan(sqrt(cartisian.x * cartisian.x + cartisian.y * cartisian.y) , VIEWGRIDZ); +vec2 cartisianToSphereical(vec3 cartisian) { + float theta = atan2(sqrt(cartisian.x * cartisian.x + cartisian.y * cartisian.y) , cartisian.z); float phi = atan2(cartisian.y, cartisian.x); return vec2(phi, theta); @@ -31,12 +32,16 @@ vec2 cartisianToSphereical(vec2 cartisian) { Fragment getFragment() { Fragment frag; - vec2 cartisianCoords = texture(viewGrid, TexCoord).xy; - vec2 sphereicaleCoords = cartisianToSphereical(cartisianCoords); + vec4 cartisianCoords = normalize(vec4(texture(viewGrid, TexCoord).xy, VIEWGRIDZ, 0.0f)); + + cartisianCoords = cameraRotationMatrix * cartisianCoords; + + vec2 sphereicaleCoords = cartisianToSphereical(cartisianCoords.xyz); + vec2 uv = sphereToUV(sphereicaleCoords); vec4 texColor = texture(enviromentTexture, uv); frag.color = texColor; - + return frag; } \ No newline at end of file