Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitc146d10ae0462a47d4caaec7bc86bd1f18280409 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-04-16 08:39:54 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-04-16 08:39:54 +0300
Filesdb1b60f83cc6a259def04b023a05dc87ac4f1601
uni-projects-c146d10ae0462a47d4caaec7bc86bd1f18280409.tar
uni-projects-c146d10ae0462a47d4caaec7bc86bd1f18280409.tar.gz
uni-projects-c146d10ae0462a47d4caaec7bc86bd1f18280409.zip
Parent0ba0b3564b23176696f40a3bf31967560803276b (diff)
[Ray/h4] Added old solution
1 files changed, 98 insertions, 0 deletions
-rw-r--r--Year 3/Raytracing/0001-h4-Added-Mendelbrot-shader.patch98
diff --git a/Year 3/Raytracing/0001-h4-Added-Mendelbrot-shader.patch b/Year 3/Raytracing/0001-h4-Added-Mendelbrot-shader.patch
new file mode 100644
index 0000000..5ab3a2d
--- /dev/null
+++ b/Year 3/Raytracing/0001-h4-Added-Mendelbrot-shader.patch
@@ -0,0 +1,98 @@
+From 0a0c03847ad7428bec5394df0f663a206ad37041 Mon Sep 17 00:00:00 2001
+From: Syndamia <kamen@syndamia.com>
+Date: Mon, 8 Apr 2024 18:24:38 +0300
+Subject: [PATCH] [h4] Added Mendelbrot shader
+
+---
+ src/main.cpp | 6 +++---
+ src/shading.cpp | 29 +++++++++++++++++++++++++++++
+ src/shading.h | 14 ++++++++++++++
+ 3 files changed, 46 insertions(+), 3 deletions(-)
+
+diff --git a/src/main.cpp b/src/main.cpp
+index 5ec299f..594fb70 100644
+--- a/src/main.cpp
++++ b/src/main.cpp
+@@ -47,10 +47,10 @@ Sphere sphere(Vector(-10, 60, 0), 30);
+
+ void setupScene()
+ {
+- camera.pos.set(0, 60, -120);
++ camera.pos.set(101.82, 80, -7436.4);
++ camera.pitch = -90.0;
+ camera.beginFrame();
+- nodes.push_back(Node{ new Plane(15), new Checker(Color(0, 0, 0.8), Color(0.2, 0.3, 0.6))});
+- nodes.push_back(Node{ &sphere, new Checker(Color(0.8, 0, 0), Color(0.6, 0.4, 0.1), 9)});
++ nodes.push_back(Node{ new Plane(15), new Mendelbrot()});
+ lightPos.set(+30, +100, -70);
+ lightColor.setColor(1, 1, 1);
+ lightIntensity = 10000.0;
+diff --git a/src/shading.cpp b/src/shading.cpp
+index c4c17ff..41543b1 100644
+--- a/src/shading.cpp
++++ b/src/shading.cpp
+@@ -24,6 +24,7 @@
+
+ #include "shading.h"
+ #include "main.h"
++#include <math.h>
+
+ Vector lightPos;
+ Color lightColor;
+@@ -57,3 +58,31 @@ Color Checker::computeColor(Ray ray, const IntersectionInfo& info)
+ Color ambient = toUse * AMBIENT_LIGHT;
+ return direct + ambient;
+ }
++
++double nfmod(double a, double b) {
++ return fmod(fmod(a, b) + b, b);
++}
++double limit(double val, double low, double high) {
++ return nfmod(val - low, high - low) + low;
++}
++
++Color linearInterpolation(double alpha, const Color& a, const Color& b) {
++ return a*(1.0-alpha) + b*alpha;
++}
++
++Color Mendelbrot::computeColor(Ray ray, const IntersectionInfo& info) {
++ double u = limit(info.u / scaling, -2.00, 0.47);
++ double v = limit(info.v / scaling, -1.12, 1.12);
++
++ double x = 0.0, y = 0.0;
++ for (int i = 0; i < ITERATIONS; i++) {
++ if (sqr(x) + sqr(y) > 4) {
++ return linearInterpolation((double)i / (double)ITERATIONS, color1, color2);
++ }
++
++ double temp = sqr(x) - sqr(y) + u;
++ y = 2 * x * y + v;
++ x = temp;
++ }
++ return color2;
++}
+diff --git a/src/shading.h b/src/shading.h
+index b896b6b..857834c 100644
+--- a/src/shading.h
++++ b/src/shading.h
+@@ -54,3 +54,17 @@ public:
+ float scaling = 20.0f): col1(col1), col2(col2), scaling(scaling) {}
+ virtual Color computeColor(Ray ray, const IntersectionInfo& info) override;
+ };
++
++class Mendelbrot : public Shader {
++ const int ITERATIONS = 100;
++
++public:
++ Color color1, color2;
++ double scaling;
++
++ Mendelbrot(Color color1 = Color(0.0, 0.0, 0.1), Color color2 = Color(1.0, 0.4, 0.0), double scaling = 10000.0)
++ : color1(color1), color2(color2), scaling(scaling)
++ {}
++
++ virtual Color computeColor(Ray ray, const IntersectionInfo& info) override;
++};
+--
+2.42.0
+