diff options
3 files changed, 190 insertions, 29 deletions
diff --git a/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/.ninja_log b/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/.ninja_log index 3e74c34..8059b4f 100644 --- a/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/.ninja_log +++ b/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/.ninja_log @@ -1,4 +1,5 @@ # ninja log v5 +<<<<<<< HEAD 50 168 1702330327746048757 /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/mocs_compilation.cpp 596afd61accb21ff 50 168 1702330327746048757 /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/timestamp 596afd61accb21ff 170 11454 1702328734963840489 CMakeFiles/projects_ray.dir/src/raytracer/raytracer.cpp.o efa4d0ee111c147a @@ -69,3 +70,76 @@ 25 146 1702334330701712265 /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/mocs_compilation.cpp 596afd61accb21ff 157 5410 1702334335944239212 CMakeFiles/projects_ray.dir/src/utils/sceneparser.cpp.o ed3cc2e1b7dc62bd 5410 6217 1702334336731923317 projects_ray a842e040bf3d79e9 +======= +12499 19715 1702070530335653994 CMakeFiles/projects_ray.dir/src/accelerate/myqthreads.cpp.o 81fffec8aaaec0bd +2014 16129 1702247256683403980 CMakeFiles/projects_ray.dir/src/raytracer/raytracer.cpp.o efa4d0ee111c147a +1949 12552 1702070523172011570 CMakeFiles/projects_ray.dir/src/utils/raytracerutils.cpp.o 35a3ae2d0b82dd65 +1941 13001 1702070523624492613 CMakeFiles/projects_ray.dir/src/illuminate/illuminate.cpp.o 4731cafbc4b4e737 +2013 15010 1702247255558209399 CMakeFiles/projects_ray.dir/src/main.cpp.o 987044590434d8d1 +1938 14619 1702070525228350664 CMakeFiles/projects_ray.dir/src/raytracer/raytracescene.cpp.o aaa2fe512335b7de +12552 23387 1702070534013897550 CMakeFiles/projects_ray.dir/src/accelerate/myqtconcurrent.cpp.o 28d12937d9255fcc +2013 13576 1702247254125569428 CMakeFiles/projects_ray.dir/src/mainwindow.cpp.o 6c6dd3bd167ac5ff +12696 20607 1702070531227914702 CMakeFiles/projects_ray.dir/src/accelerate/bvh.cpp.o 2ac5d1ff96197a9 +191 2112 1702069278793333995 CMakeFiles/projects_ray.dir/src/vec4ops/transform4d.cpp.o 9cafd52c1d615711 +1947 12499 1702070523121512734 CMakeFiles/projects_ray.dir/src/intersect/normals.cpp.o d622514f4a212179 +1946 12725 1702070523341525396 CMakeFiles/projects_ray.dir/src/texture/texture.cpp.o d3d7e9f0c176bf47 +7844 17014 1702070527638800667 CMakeFiles/projects_ray.dir/src/aliasing/supersample.cpp.o d10c1da10eac29ed +31 2011 1702247242555969000 projects_ray_autogen/mocs_compilation.cpp 596afd61accb21ff +1944 12700 1702070523312945240 CMakeFiles/projects_ray.dir/src/illuminate/reflect.cpp.o e72528d54abad0c9 +16129 16802 1702247257357860171 projects_ray a842e040bf3d79e9 +31 2011 1702247242555969000 projects_ray_autogen/timestamp 596afd61accb21ff +12615 20456 1702070531078485263 CMakeFiles/projects_ray.dir/src/accelerate/kdtree.cpp.o a0b7647ef5416d35 +1929 12353 1702070522974418120 CMakeFiles/projects_ray.dir/src/vec4ops/rotations4d.cpp.o 936dea6b1a330a9e +1943 12696 1702070523308816788 CMakeFiles/projects_ray.dir/src/illuminate/shadow.cpp.o 98378b8788da3ce3 +12354 20232 1702070530851642353 CMakeFiles/projects_ray.dir/src/aliasing/filter.cpp.o bc288befd0c32eb0 +2014 10778 1702247251325163693 CMakeFiles/projects_ray.dir/src/intersect/intersect.cpp.o 2ea2e8e07c7b357b +2 397 1702256894321554471 build.ninja d13bedc3f8269e08 +1946 16434 1702069114953926356 CMakeFiles/projects_ray.dir/src/utils/scenefilereader.cpp.o 4d14ff80692ac6b3 +2012 11891 1702247252438812632 CMakeFiles/projects_ray.dir/projects_ray_autogen/mocs_compilation.cpp.o 21ccedb02e7f6f6a +1953 12354 1702069370966741736 CMakeFiles/projects_ray.dir/src/utils/sceneparser.cpp.o ed3cc2e1b7dc62bd +1384 4596 1702065010366160912 CMakeFiles/projects_ray.dir/src/settings.cpp.o 73db81265aa9dd0e +201 2406 1702070849164713826 CMakeFiles/projects_ray.dir/src/camera/camera.cpp.o 5f7d45d0b689d9f7 +2015 7261 1702247247809011677 CMakeFiles/projects_ray.dir/src/vec4ops/vec4ops.cpp.o 176379e1dc38d565 +5 571 1702256898604025591 projects_ray_autogen/timestamp 90a86c673d4d5360 +5 571 1702256898604025591 projects_ray_autogen/mocs_compilation.cpp 90a86c673d4d5360 +5 571 1702256898604025591 /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/timestamp 90a86c673d4d5360 +5 571 1702256898604025591 /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/mocs_compilation.cpp 90a86c673d4d5360 +572 1069 1702256899105174401 CMakeFiles/projects_ray.dir/src/settings.cpp.o c1f79a20c0ecbe57 +572 1223 1702256899257632523 CMakeFiles/projects_ray.dir/src/camera/camera.cpp.o 94ae54642a1d948f +572 1752 1702256899785820170 CMakeFiles/projects_ray.dir/src/intersect/intersect.cpp.o aea38d6800d3e2d7 +574 1786 1702256899819989922 CMakeFiles/projects_ray.dir/src/texture/texture.cpp.o c5109dc5ea714408 +573 1800 1702256899835075331 CMakeFiles/projects_ray.dir/src/illuminate/reflect.cpp.o 3f60bdf8eba19b08 +573 1815 1702256899847957753 CMakeFiles/projects_ray.dir/src/illuminate/illuminate.cpp.o c5c01b155b8ee7bd +573 1842 1702256899876435373 CMakeFiles/projects_ray.dir/src/illuminate/shadow.cpp.o e75c5f32d37c0f7 +571 1888 1702256899921064937 CMakeFiles/projects_ray.dir/projects_ray_autogen/mocs_compilation.cpp.o b6caa8722c5ed85 +572 2067 1702256900097779246 CMakeFiles/projects_ray.dir/src/utils/sceneparser.cpp.o f97c011acc078586 +1070 2109 1702256900140845277 CMakeFiles/projects_ray.dir/src/intersect/normals.cpp.o 3b9d0580f53ea69c +572 2147 1702256900177405307 CMakeFiles/projects_ray.dir/src/raytracer/raytracescene.cpp.o e6850a1ba68767f +572 2292 1702256900324319504 CMakeFiles/projects_ray.dir/src/mainwindow.cpp.o e9399ac69b3cfe3a +2148 2299 1702256900337480508 CMakeFiles/projects_ray.dir/src/vec4ops/transform4d.cpp.o 202455a136d96772 +1224 2313 1702256900346526745 CMakeFiles/projects_ray.dir/src/utils/raytracerutils.cpp.o 494cb10eb691f3da +571 2370 1702256900402916405 CMakeFiles/projects_ray.dir/src/main.cpp.o 5dc8b318e78f1fc9 +2067 2556 1702256900590882395 CMakeFiles/projects_ray.dir/src/vec4ops/vec4ops.cpp.o 91511fc09b29247f +572 2611 1702256900642989789 CMakeFiles/projects_ray.dir/src/raytracer/raytracer.cpp.o 70260dd9342207e1 +1753 2670 1702256900703349134 CMakeFiles/projects_ray.dir/src/aliasing/supersample.cpp.o 6509507adff024b9 +1801 2689 1702256900723704594 CMakeFiles/projects_ray.dir/src/accelerate/myqthreads.cpp.o 61d667b82582b0f6 +1787 2744 1702256900779787339 CMakeFiles/projects_ray.dir/src/aliasing/filter.cpp.o 992faa973485d8a9 +1889 2780 1702256900815793538 CMakeFiles/projects_ray.dir/src/accelerate/kdtree.cpp.o 972643ee76ef36e3 +572 2826 1702256900861458138 CMakeFiles/projects_ray.dir/src/utils/scenefilereader.cpp.o ad7df583a7d505ab +1815 2836 1702256900869485215 CMakeFiles/projects_ray.dir/src/accelerate/bvh.cpp.o 57e5e91a0ccd956b +2109 2854 1702256900889672343 CMakeFiles/projects_ray.dir/src/vec4ops/rotations4d.cpp.o 7ae83c7dbbb3069c +1846 3326 1702256901360458086 CMakeFiles/projects_ray.dir/src/accelerate/myqtconcurrent.cpp.o edd9793557117a52 +3326 3465 1702256901503327682 projects_ray 86189a8842e154ef +7 37 1702333804316350533 projects_ray_autogen/timestamp 90a86c673d4d5360 +7 37 1702333804316350533 projects_ray_autogen/mocs_compilation.cpp 90a86c673d4d5360 +7 37 1702333804316350533 /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/timestamp 90a86c673d4d5360 +7 37 1702333804316350533 /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/mocs_compilation.cpp 90a86c673d4d5360 +40 646 1702333804921083630 CMakeFiles/projects_ray.dir/src/intersect/intersect.cpp.o aea38d6800d3e2d7 +646 779 1702333805055335915 projects_ray 86189a8842e154ef +6 34 1702334794290663489 projects_ray_autogen/timestamp 90a86c673d4d5360 +6 34 1702334794290663489 projects_ray_autogen/mocs_compilation.cpp 90a86c673d4d5360 +6 34 1702334794290663489 /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/timestamp 90a86c673d4d5360 +6 34 1702334794290663489 /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/mocs_compilation.cpp 90a86c673d4d5360 +35 630 1702334794882621284 CMakeFiles/projects_ray.dir/src/intersect/intersect.cpp.o aea38d6800d3e2d7 +630 760 1702334795013830551 projects_ray 86189a8842e154ef +>>>>>>> bbe08c295ccfa32de1a9ca7321f36b2c130ad233 diff --git a/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/CMakeFiles/projects_ray_autogen.dir/ParseCache.txt b/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/CMakeFiles/projects_ray_autogen.dir/ParseCache.txt index e665c83..8bbc9fa 100644 --- a/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/CMakeFiles/projects_ray_autogen.dir/ParseCache.txt +++ b/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/CMakeFiles/projects_ray_autogen.dir/ParseCache.txt @@ -1,4 +1,5 @@ # Generated by CMake. Changes will be overwritten. +<<<<<<< HEAD /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/src/utils/sceneparser.cpp /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/src/texture/texture.cpp /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/src/illuminate/illuminate.cpp @@ -12,6 +13,28 @@ /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/src/aliasing/filter.cpp /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/accelerate/bvh.cpp /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/mainwindow.h +======= +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/vec4ops/vec4ops.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/sceneparser.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/texture/texture.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/settings.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/raytracerutils.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/vec4ops/transform4d.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/intersect/normals.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/raytracer/raytracescene.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/raytracer/raytracer.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/scenefilereader.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/mainwindow.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/main.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/accelerate/myqtconcurrent.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/accelerate/kdtree.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/illuminate/illuminate.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/accelerate/bvh.h +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/illuminate/reflect.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/accelerate/myqthreads.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/rgba.h +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/raytracer/raytracer.h +>>>>>>> bbe08c295ccfa32de1a9ca7321f36b2c130ad233 mmc:Q_OBJECT mdp:/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/mainwindow.h mdp:/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/moc_predefs.h @@ -963,6 +986,7 @@ mdp:/Users/lafayette_bussey/Qt/6.5.2/macos/lib/QtWidgets.framework/Versions/A/Headers/qtwidgetsexports.h mdp:/Users/lafayette_bussey/Qt/6.5.2/macos/lib/QtWidgets.framework/Versions/A/Headers/qtwidgetsglobal.h mdp:/Users/lafayette_bussey/Qt/6.5.2/macos/lib/QtWidgets.framework/Versions/A/Headers/qwidget.h +<<<<<<< HEAD /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/src/utils/scenefilereader.h /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/src/raytracer/raytracescene.cpp /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/accelerate/kdtree.h @@ -981,6 +1005,16 @@ /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/src/accelerate/kdtree.cpp /Users/daviddoan/Desktop/Graphics/the-all-americans-in-cs1230/src/accelerate/bvh.h /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/aspectratiowidget/aspectratiowidget.hpp +======= +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/vec4ops/rotations4d.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/aliasing/supersample.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/illuminate/shadow.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/accelerate/bvh.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/sceneparser.h +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/camera/camera.h +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/raytracer/raytracescene.h +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/mainwindow.h +>>>>>>> bbe08c295ccfa32de1a9ca7321f36b2c130ad233 mmc:Q_OBJECT mdp:/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/aspectratiowidget/aspectratiowidget.hpp mdp:/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/moc_predefs.h @@ -1755,10 +1789,21 @@ /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/accelerate/bvh.h /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/raytracer/raytracescene.h /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/vec4ops/vec4ops.h +<<<<<<< HEAD /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/settings.h /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/aliasing/supersample.cpp /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/vec4ops/rotations4d.cpp /Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/raytracer/raytracer.h +======= +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/intersect/intersect.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/scenefilereader.h +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/scenedata.h +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/camera/camera.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/accelerate/kdtree.h +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/settings.h +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/aliasing/filter.cpp +/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/utils/aspectratiowidget/aspectratiowidget.hpp +>>>>>>> bbe08c295ccfa32de1a9ca7321f36b2c130ad233 mmc:Q_OBJECT mdp:/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/src/raytracer/raytracer.h mdp:/Users/lafayette_bussey/Desktop/cs1230/the-all-americans-in-cs1230/build/build-the-all-americans-in-cs1230-Qt_6_5_2_for_macOS-Release/projects_ray_autogen/moc_predefs.h diff --git a/src/intersect/intersect.cpp b/src/intersect/intersect.cpp index 3a39a87..cc3143d 100644 --- a/src/intersect/intersect.cpp +++ b/src/intersect/intersect.cpp @@ -7,6 +7,7 @@ // TODO: implement mesh +//updated to handle intersection in 4d glm::vec4 intersectCircle( glm::vec4 p, glm::vec4 d, @@ -14,9 +15,9 @@ glm::vec4 intersectCircle( { // implicit: x^2 + y^2 + z^2 - r^2 = 0, all directions float radius = 0.5f; - float a = d.x*d.x + d.y*d.y + d.z*d.z; - float b = 2.f * (p.x*d.x + p.y*d.y + p.z*d.z); - float c = p.x*p.x + p.y*p.y + p.z*p.z - radius*radius; + float a = d.x*d.x + d.y*d.y + d.z*d.z + d[3] * d[3]; + float b = 2.f * (p.x*d.x + p.y*d.y + p.z*d.z + p[3]*d[3]); + float c = p.x*p.x + p.y*p.y + p.z*p.z + p[3] * p[3] - radius*radius; float discriminant = b*b - 4*a*c; if (discriminant < 0) // no solution @@ -47,12 +48,12 @@ glm::vec4 intersectCone( const RenderShapeData& shape) { float t = FINF; - - // implicit: x^2 + y^2 - z^2 = 0, conic top + // updated to 4d + // x^2 + y^2 - z^2 - w^2= 0, conic top float radius = 0.5f; - float a = d.x*d.x + d.z*d.z - .25f*(d.y*d.y); - float b = 2.f*(p.x*d.x + p.z*d.z) - .5f*(p.y*d.y) + .25f*d.y; - float c = p.x*p.x + p.z*p.z - .25f*(p.y*p.y) + .25f*p.y - 1/16.f; + float a = d.x*d.x + d.z*d.z - .25f*(d.y*d.y) - .25f*(d[3]*d[3]); + float b = 2.f*(p.x*d.x + p.z*d.z) - .5f*(p.y*d.y) + .25f*d.y - .5f*(p[3]*d[3]) + .25f*d[3]; + float c = p.x*p.x + p.z*p.z - .25f*(p.y*p.y) + .25f*p.y - .25f*(p[3]*p[3]) + .25f*p[3] - 1/8.f; float discriminant = b*b - 4*a*c; if (discriminant >= 0) @@ -63,7 +64,8 @@ glm::vec4 intersectCone( auto p1Top = p + t1 * d; if ( t1 > 0 && - p1Top.y >= -.5f && p1Top.y <= .5f) + p1Top.y >= -.5f && p1Top.y <= .5f && + p1Top[3] >= -.5f && p1Top[3] <= .5f) { t = std::min(t1, t); @@ -72,23 +74,34 @@ glm::vec4 intersectCone( auto p2Top = p + t2 * d; if ( t2 > 0 && - p2Top.y >= -.5f && p2Top.y <= .5f) + p2Top.y >= -.5f && p2Top.y <= .5f && + p2Top[3] >= -.5f && p2Top[3] <= .5f) { t = std::min(t2, t); } } - - // implicit p_y + t*d_y = -.5f, top base - float tBase = (- .5f - p.y) / d.y; - auto pBase = p + tBase * d; + // x^2 + y^2 - z^2 = 0, base w.r.t. w axis + float twBase = (- .5f - p[3]) / d[3]; + auto pwBase = p + twBase * d; if ( - tBase > 0 && - pBase.x*pBase.x + pBase.z*pBase.z <= radius*radius + twBase > 0 && + pwBase.x*pwBase.x + pwBase.z*pwBase.z <= pwBase.y*pwBase.y ) { - t = std::min(t, tBase); + t = std::min(t, twBase); + } + + // x^2 + y^2 - z^2 = 0, base w.r.t. y axis + float tyBase = (- .5f - p.y) / d.y; + auto pyBase = p + tyBase * d; + if ( + tyBase > 0 && + pyBase.x*pyBase.x + pyBase.z*pyBase.z <= pyBase[3]*pyBase[3] + ) + { + t = std::min(t, tyBase); } return t == FINF ? glm::vec4(0.f) : p + t*d; @@ -101,7 +114,7 @@ glm::vec4 intersectCylinder( { float t = FINF; - // implicit: x^2 + z^2 = 0, y between -.5, 5 rectuangular side + // implicit: x^2 + z^2 = r^2, y + w between -.5, 5 rectuangular side float radius = 0.5f; float a = d.x*d.x + d.z*d.z; float b = 2.f * (p.x*d.x + p.z*d.z); @@ -116,7 +129,9 @@ glm::vec4 intersectCylinder( auto p1Top = p + t1 * d; if ( t1 > 0 && - p1Top.y >= -.5f && p1Top.y <= .5f) + p1Top.y + p1Top[3] >= -.5f && p1Top.y + p1Top[3] <= .5f && + p1Top.y >= -.5f && p1Top.y <= .5f && + p1Top[3] >= -.5f && p1Top[3] <= .5f) { t = std::min(t1, t); } @@ -124,32 +139,36 @@ glm::vec4 intersectCylinder( auto p2Top = p + t2 * d; if ( t2 > 0 && - p2Top.y >= -.5f && p2Top.y <= .5f) + p2Top.y + p2Top[3] >= -.5f && p2Top.y + p2Top[3] <= .5f && + p2Top.y >= -.5f && p2Top.y <= .5f && + p2Top[3] >= -.5f && p2Top[3] <= .5f) { t = std::min(t2, t); } } - // implicit p_y + t*d_y = -.5f, top base - float tTop = (.5f - p.y) / d.y; + // implicit y + w = .5f, top base + float tTop = (.5f - p.y - p.y) / (d[3] + d.y); auto pTop = p + tTop * d; if ( tTop > 0 && - pTop.x*pTop.x + pTop.z*pTop.z <= radius*radius - ) + pTop.x*pTop.x + pTop.z*pTop.z <= radius*radius && + pTop.y >= -.5f && pTop.y <= .5f && + pTop[3] >= -.5f && pTop[3] <= .5f) { t = std::min(t, tTop); } - // implicit p_y + t*d_y = -.5f, top base - float tBase = (- .5f - p.y) / d.y; + // implicit p_y + t*d_y = -.5f, Bottom base + float tBase = (.5f - p.y - p.y) / (d[3] + d.y); auto pBase = p + tBase * d; if ( tBase > 0 && - pBase.x*pBase.x + pBase.z*pBase.z <= radius*radius - ) + pBase.x*pBase.x + pBase.z*pBase.z <= radius*radius && + pBase.y >= -.5f && pBase.y <= .5f && + pBase[3] >= -.5f && pBase[3] <= .5f) { t = std::min(t, tBase); } @@ -221,6 +240,29 @@ glm::vec4 intersectCube ( tmax = tzmax; } + // w-dir + float twmin = (-apothem - p[3]) / d[3]; + float twmax = (apothem - p[3]) / d[3]; + + if (twmin > twmax) + { + std::swap(twmin, twmax); + } + + if ((tmin > twmax) || (twmin > tmax)) + { // no hit + return glm::vec4(0.f); + } + + if (twmin > tmin) + { + tmin = twmin; + } + if (twmax < tmax) + { + tmax = twmax; + } + if (tmin <= 0 && tmax <= 0) // both behind camera { return glm::vec4(0.f); @@ -262,4 +304,4 @@ glm::vec4 RayTracer::findIntersection( break; } return glm::vec4(0.f); -}
\ No newline at end of file +} |