From d945f49fca137f95e4854378b0f1891447252ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Con=C3=A1l?= Date: Thu, 8 Feb 2024 23:32:51 -0500 Subject: [PATCH] Okay, figured out input, for real this time --- Input/Input.cpp | 11 ++++++---- Renderer/Renderer.cpp | 8 +++---- Renderer/UniformBuffer.hpp | 19 ++++++++--------- Scene/Camera.hpp | 4 ++-- assets/shaders/ray.frag | 41 ++++++++++++++++++++---------------- assets/shaders/ray.frag.spv | Bin 2724 -> 3448 bytes assets/shaders/ray.vert | 17 ++++++--------- assets/shaders/ray.vert.spv | Bin 2132 -> 1556 bytes 8 files changed, 51 insertions(+), 49 deletions(-) diff --git a/Input/Input.cpp b/Input/Input.cpp index efd510a..3efb246 100644 --- a/Input/Input.cpp +++ b/Input/Input.cpp @@ -77,14 +77,17 @@ void Input::handleMovementKeys(Renderer& ren) { if (ImGui::GetIO().WantCaptureKeyboard) return; + auto dir = ren.cam.dir(); glm::vec3 forward; if (ren.flycam) - forward = glm::vec3(glm::sin(ren.cam.theta)*glm::cos(ren.cam.phi), glm::cos(ren.cam.theta), glm::sin(ren.cam.theta)*glm::sin(ren.cam.phi)); + forward = dir; else - forward = glm::vec3(glm::cos(ren.cam.phi), 0.0, glm::sin(ren.cam.phi)); - const auto right = glm::cross(glm::vec3(0.0, 1.0, 0.0), forward); - const auto speed = glfwGetKey(in, GLFW_KEY_LEFT_SHIFT)? 2.0f : 1.0f; + forward = glm::normalize(glm::vec3(dir.x, 0.0, dir.z)); + const auto right = glm::normalize(glm::cross(forward, glm::vec3(0.0, 1.0, 0.0))); + const auto up = glm::normalize(glm::cross(right, forward)); + + const auto speed = glfwGetKey(in, GLFW_KEY_LEFT_SHIFT)? 2.0f : 1.0f; if(glfwGetKey(in, GLFW_KEY_UP)) { ren.cam.theta -= 0.02; diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index 5f961da..7974317 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -323,11 +323,11 @@ void Renderer::draw() { auto sz = win.getDimensions(); - uniform_buffer->upload(UniformData{ - .view = cam.view(), - .viewport = glm::vec2(viewport.width, viewport.y), + uniform_buffer->upload(UniformData { + .cam_pos = cam.pos, .time = time, - .focal_length = 2.0, + .viewport = glm::vec4(viewport.width, viewport.y, 0.0, 0.0), + .cam_dir = cam.dir(), }); command_buffer->bind(*pipeline); diff --git a/Renderer/UniformBuffer.hpp b/Renderer/UniformBuffer.hpp index 6cc0297..61b39c7 100644 --- a/Renderer/UniformBuffer.hpp +++ b/Renderer/UniformBuffer.hpp @@ -11,20 +11,19 @@ /* Uniform: * - * layout (set = 0, binding = 0) uniform Matrices { - * mat4 view; - * vec2 viewport; - * float time; - * float focal_length; - * }; - * +layout (set = 0, binding = 0) uniform Matrices { + vec3 cam_pos; + float time; + vec4 viewport; + vec3 cam_dir; +}; */ struct UniformData { - glm::mat4 view; - glm::vec2 viewport; + glm::vec3 cam_pos; float time; - float focal_length = 2.0; + glm::vec4 viewport; + glm::vec3 cam_dir; }; struct UniformBuffer { diff --git a/Scene/Camera.hpp b/Scene/Camera.hpp index bd799b7..e2ef078 100644 --- a/Scene/Camera.hpp +++ b/Scene/Camera.hpp @@ -15,11 +15,11 @@ struct Camera { glm::vec3 pos = glm::vec3(0.0f); inline glm::vec3 dir() { - return glm::normalize(glm::vec3( + return glm::vec3( sin(theta) * cos(phi), cos(theta), sin(theta) * sin(phi) - )); + ); } inline glm::mat4 view() { diff --git a/assets/shaders/ray.frag b/assets/shaders/ray.frag index 546ca09..334e4ab 100644 --- a/assets/shaders/ray.frag +++ b/assets/shaders/ray.frag @@ -1,43 +1,48 @@ #version 450 core layout (set = 0, binding = 0) uniform Matrices { - mat4 view; - vec2 viewport; + vec3 cam_pos; float time; -}; - -layout (location = 0) in vec3 pos; -layout (location = 1) in vec3 dir; + vec4 viewport; + vec3 cam_dir; +}; +layout (location = 0) in vec2 pos; layout (location = 0) out vec4 fragColor; - float sphere(vec3 p, vec3 center, float r) { - return length(p) - r; + return length(p-center) - r; } float sdf(vec3 pos) { - return sphere(pos, vec3(0.0, 0.0, 10.0), 3.0); + return sphere(pos, vec3(0.0, 0.0, 0.0), 3.0); } -float raycast() { +float raycast(vec3 dir) { float t = 0.0; for(int i = 0; i < 64; i++) { - float dt = sdf(pos + dir * t); + float dt = sdf(cam_pos + dir * t); if(dt < 0.0001*t) - return t; + return float(i) / 64.0; else if(dt > 200.0) - return -1; + return 1.0; t += dt; } - return -1; + return 1.0; +} + +vec3 raygen() { + vec3 forward = cam_dir; + vec3 right = normalize(cross(forward, vec3(0.0, 1.0, 0.0))); + vec3 up = normalize(cross(right, forward)); + + return normalize(pos.x * right + pos.y * up + forward * 2.0); } void main() { - float d = raycast(); + vec3 dir = raygen(); + float d = raycast(dir); - vec3 col = vec3(1.0-d*0.075); - - fragColor = vec4(col, 1.0); + fragColor = vec4(d); } \ No newline at end of file diff --git a/assets/shaders/ray.frag.spv b/assets/shaders/ray.frag.spv index e1f38d415efc7d3342adcbcdfdcc5ec0824ac47d..b44de57b47238fa83dad27018854b862245c72d4 100644 GIT binary patch literal 3448 zcmZQ(Qf6mhU}WHC;ANQ100DvwObm<+3=G^1Y+%~mC)h`?xFki-#MA(!f{%e2M1ke_ z8Q2+E7#P4fH!(90BvHb^z%YSrbjIBX9&Cr^Gft7)oft!JWp@0FzW?|rAU|>j2%_~VQ0`Zv{co`TN ziokNL3_>6?QqsT%fcyi}D+tn?U(CSDz{Vg7Qkz(roLF3fqDF*)fgvTchymm-35c5X z)I1F^UlpW3u_!SYYzGU2IvQUCh0n~O!@$4*3P+IL`V0&VnP7d)3|1gJNWDauSvEe5%hjR7JCVkal&#uwxlGr+_^@mZ3Yn+lR+V_*a81;s~MW@>psei6tj zxLQ!`g7icD!pvX?(ge1jg~1KQoh%F~3=9lu`9sGcU~p$(hKGea0}I%%N>FoQd_^Qa$X{|ud{8=v@r4)<%9GnGO#gl zLDhrQfiOs3k%5H)QPDEEpIVKz_7_x*1e1$U)N@ z$bTUBg5*GKkomR@kT3$JV`~N$1`r>V)_OqhHPR1Cxii8n*kJAlHW zA6$MiFo41iWFLqRN_QZ4n=!D0(-|nNL0Uj!KNy%8SQ$X-A?XX0*Fa$i(hEvIp!^2o zgVGNu&w==s(Dd2Gz`y`1zw8*889;hLd|RkoF9QQu3?v8A2jW|TOGO5TJ_ZJG*$5H` z$%E_xiGlQj{4|k)0i4$Z7}&vnnZ&@r01`vSAblXef#m)&Ffv#$FfxGr2+|KK+d+N= z<9Tz3S6fl_|gmv;Ci5$0aSA^Fvu`4 zFo4uR#6hJb1A{CyUYr;p@*uN7ZUNz@cP@MvDJ1F0R z+z1MHP@MvDqcBojf$9m6TS0LJQUj_dV0@6jK=lNO4{`^HR%2jb0GR^{H;`TsAH)Xf z1Lb)T8>9!6&n+3)!DWLc0|U681gQt91IdHj3=&6nGpL?JcQdGt1G!lY>SmCeKy?+! zEg(08$_!9_1>=L{L3I|45AqYJ4gv8&ZUgBB50|Ns{ z4M@BZD(1?-zyLA_BnR>%$nPLASe|ibU;wu_K;j^IP*{P)V0L&gFo5fP7~czOXDc+% zc{4CDfXYOW_ztMQeZX}c0|Q9zI|DO=A2i%RVE~fzWnf?kfrcN54Kf=Pe*Vz#%ZJt> z0SpWbAh8apT|o>C3?MO3nF~rUAU-G@L1ux>0EI~?)V;f)ZV6{#U;v4M%4LvSB9Ytz zl8azqU;v4M%mJ}M=7P#z5FaECiffSjL3|JmvnK{>4~!oR4Hr-}tK`2|XUAURO|#sh5==@Fz3u6}ZL7h|2eqd`^&ZH4kXn#D%=|(m^FiuB=7anP5(oJYR1a1_+qt0n z5o8A_?kX7=7(n76KFGgS3=9k)H^A~)H3I_!NDQP7W=<{C98f(9(g!l9j)8#zBo5+( z%&BK!U;x<^tCWBFo48Bbu>(0D+2=q WNH0hZ=KnS%|AXW~X$2$(N-F@6wHK)X literal 2724 zcmZQ(Qf6mhU}WHC;AJRafB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!N*wB3=CkLo0ypglCWT4V6b9fU`SyqP z4^)2)$Y1$6V0VJzAgw4d-8nxeALciZ`+O5iiZYW^i$QK@V_;Q<&kQm5rkUNz? zhJxi-7(jebyn%#-8JNK7QxTj}8Nh5Y24)5}1_lNN1_lOk1{Ma8{UAOl2PiPGFmNz1 zfW<)KAU-FQ4^pGZz{bGEzyQ_{QU}5yc|`^m29O^>YCvKj`$VAXv>8~y>SaL=Vqjo^ z@gd=*;HbmE2DVS0fq?;}282O!Fm)hzGB7weh%&G+XhPi$3L}u)w4iPSiG$RGXdNVb zKzw5c1_n@AiZC!Sn1J=OFqkudN(hKQtr;MEP`U(}3*&?07{mve3-Xr}D7>~`w1Dw_ z!1j1J!}tMUe#3qcA7pPB)D93Iq(2rSZx7?gGcYjBnmN-J6bH%BumY7kAb+KR%N7O( zkT}RaAU-IKf#OJlfrTL(lpmmF6i9y#R6i(9$U)N^NDWLJWG1K}1IdH(1;|VgACy)= zVrC4i;IsjFNG4507=#VM#<2H6A36Xp!e;JgDWk6~<3c?@EM!VgpygTj=b zfq?<$c5!f>#K6GA04kjr7$l%+2AtNQ>Ol5LGB7ZJ^uxkRiUFb)B>sOty2@*p>Z#F5<$s((Ok29+BicZxyX333Oh zUIDoSNt?pW#%R4l%^mnU}a!oK(>#SfsKKifq@}C zCq5vxC@i(8B((zM4mPMbhz*j|;z$LS|Brz{J6|N8DdyrgdP7Yj-m4TT7fVoggtDBr%YgATa?X zF_7ILF$J*s%nl!77ZL1J>y^aV46i-CawgcTTA7(jjk zxf>K_)=)kueSpM3_V7X7015+;Js>_m$WjId29Ucz{s*}e6doY+1fgyKiG$1o@j+<} zrXQqM1galo9*8dr<~P`b^h<*CA_LgJAigw|4>J$M2gMu6eIWgyTrCUM4+<+522gy0 z>;jn!avvy+L2QtEP&k0%044?s4-gw<4=CP1egMgX+zsM`;tV7PvIpdERR&1hfYhr& z*&wsc7+Aq^28tVyQ$Tk8U|?ckWnf^iWnf_dxm_4q)&w$uN&yB2F>t(tR5LKZ#KfUu zAom9_u!F-uf&royBnJvNP*^!Kurh$cNs561oR>lIVaLGC0OEtxgXBTsAP=<@6h0t# zfZPg7GazwC1~vweAJiEb7(o66`3+f}1_J{FNUjy?UQK8^0Exr&Y9Z+br8Afv+6)W~ zAh`~xUL6Jo29SP`ILvLjP`4rL(_>&@0Eq`Mu!6%(pMik^q!%O(@*gPPL1KRy7#S=W G7#RSaJ8Z@P literal 2132 zcmZQ(Qf6mhU}WHC;AL=UfB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!NCH9jXZFEu_TvnVyWB(p3Pq>ckgU1nZ#PH76V0#*hV24p)~8JNK? zDPUk=U}a!s;9+23@J%c!%1llz2Dyn1Dh6VgWu}&cXf_5musV=mL1G2@MI{h%h<=cp zOEPm)A!6)cwIH9TNqg&7^~5jm4Si511Y?eL4s&v>k0;gw1aLQ%?v&9&g8Q2&Y7!(*77{nP^7(n3z z;)C=mFt9LiFff3{K;jbMTma#NigDuoN zkQ+eZ42n}woPgW`k^^CoJ@!yDK=L4SKzvZz2AKnrcZJG>^qMiSg3|yfEOlDbB-aWqX&4yf85kHqdO_kay`a1WN;@FEpzwg% z0m_3QxelmaP<{pJ2Z_VnrUG>vvOZM?1_qFL00TQXt!pqaFo5)e#6fWkir0w@tYA4! z1_lO@e?e;Opk+5m4CDq-IO#GlfXj1#1`cps>oG7efW$x;6vm+R14{ECy`cC9$%EVm z3R`_>m>`EOsNw>NgVcb+%?PRnlvY4?g2L9Afq?-eUeCY+&T}RV3=AMKn14(e7#KkQ z0AY|EvVY7N7#KiyfYgA@1Np%m>W5~ipDh>|7(ikmwIFwc(ga8hrrrvw9_D9j1_lO@ z7ziW#nTLT5940ovd50g6stGLF)f9Ffv#$FfsrD)GLW7