From db19d4ec6a0c9c8e825ca22c7a8945b20a6dfd84 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mikl=C3=B3s=20T=C3=B3th?= <tothmiklostibor@gmail.com>
Date: Thu, 15 Apr 2021 23:19:04 +0200
Subject: [PATCH] =?UTF-8?q?polkorrekt=20k=C3=B3d?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Skeleton.cpp | 82 +++++++++++++++++++++++++++++++++-------------------
 1 file changed, 53 insertions(+), 29 deletions(-)

diff --git a/Skeleton.cpp b/Skeleton.cpp
index 86e83e0..3cf1328 100644
--- a/Skeleton.cpp
+++ b/Skeleton.cpp
@@ -1,5 +1,35 @@
 //=============================================================================================
-// Computer Graphics Sample Program: Ray-tracing-let
+// Mintaprogram: Ray-tracing-let
+//
+// A beadott program csak ebben a fajlban lehet, a fajl 1 byte-os ASCII karaktereket tartalmazhat, BOM kihuzando.
+// Tilos:
+// - mast "beincludolni", illetve mas konyvtarat hasznalni
+// - faljmuveleteket vegezni a printf-et kiveve
+// - Mashonnan atvett programresszleteket forrasmegjeloles nelkul felhasznalni es
+// - felesleges programsorokat a beadott programban hagyni!!!!!!!
+// - felesleges kommenteket a beadott programba irni a forrasmegjelolest kommentjeit kiveve
+// ---------------------------------------------------------------------------------------------
+// A feladatot ANSI C++ nyelvu forditoprogrammal ellenorizzuk, a Visual Studio-hoz kepesti elteresekrol
+// es a leggyakoribb hibakrol (pl. ideiglenes objektumot nem lehet referencia tipusnak ertekul adni)
+// a hazibeado portal ad egy osszefoglalot.
+// ---------------------------------------------------------------------------------------------
+// A feladatmegoldasokban csak olyan OpenGL fuggvenyek hasznalhatok, amelyek az oran a feladatkiadasig elhangzottak
+// A keretben nem szereplo GLUT fuggvenyek tiltottak.
+//
+// NYILATKOZAT
+// ---------------------------------------------------------------------------------------------
+// Nev    : Tóth Miklós
+// Neptun : FLGIIG
+// ---------------------------------------------------------------------------------------------
+// ezennel kijelentem, hogy a feladatot magam keszitettem, es ha barmilyen segitseget igenybe vettem vagy
+// mas szellemi termeket felhasznaltam, akkor a forrast es az atvett reszt kommentekben egyertelmuen jeloltem.
+// A forrasmegjeloles kotelme vonatkozik az eloadas foliakat es a targy oktatoi, illetve a
+// grafhazi doktor tanacsait kiveve barmilyen csatornan (szoban, irasban, Interneten, stb.) erkezo minden egyeb
+// informaciora (keplet, program, algoritmus, stb.). Kijelentem, hogy a forrasmegjelolessel atvett reszeket is ertem,
+// azok helyessegere matematikai bizonyitast tudok adni. Tisztaban vagyok azzal, hogy az atvett reszek nem szamitanak
+// a sajat kontribucioba, igy a feladat elfogadasarol a tobbi resz mennyisege es minosege alapjan szuletik dontes.
+// Tudomasul veszem, hogy a forrasmegjeloles kotelmenek megsertese eseten a hazifeladatra adhato pontokat
+// negativ elojellel szamoljak el es ezzel parhuzamosan eljaras is indul velem szemben.
 //=============================================================================================
 #include "framework.h"
 
@@ -48,8 +78,6 @@ struct Light;
 class Scene;
 
 struct Material {
-	Material() {}
-    
     virtual void trace(const Scene& scene, const Hit& hit, const Ray& ray, const std::vector<Light*>& lights, int depth, vec3& outRadiance) = 0;
 };
 
@@ -67,7 +95,7 @@ struct RoughMaterial: Material {
 };
 
 vec3 operator/(const vec3& num, const vec3& denom) {
-    return vec3(num.x / denom.x, num.y / denom.y, num.z / denom.z);
+    return {num.x / denom.x, num.y / denom.y, num.z / denom.z};
 }
 
 struct ReflectiveMaterial: Material {
@@ -81,16 +109,13 @@ struct ReflectiveMaterial: Material {
 };
 
 struct PortalMaterial: Material {
-    PortalMaterial() {
-    }
     void trace(const Scene& scene, const Hit& hit, const Ray& ray, const std::vector<Light*>& lights, int depth, vec3& outRadiance) override;
 };
 
 struct Hit {
-	float t;
+	float t = -1;
 	vec3 position, normal;
-	Material * material;
-	Hit() { t = -1; }
+	Material* material = nullptr;
 };
 
 struct Ray {
@@ -100,7 +125,7 @@ struct Ray {
 
 class Intersectable {
 protected:
-	Material * material;
+	Material * material = nullptr;
 public:
 	virtual Hit intersect(const Ray& ray) = 0;
 };
@@ -115,7 +140,7 @@ struct Sphere : public Intersectable {
 		material = _material;
 	}
 
-	Hit intersect(const Ray& ray) {
+	Hit intersect(const Ray& ray) override {
 		Hit hit;
 		vec3 dist = ray.start - center;
 		float a = dot(ray.dir, ray.dir);
@@ -157,7 +182,7 @@ struct Pentagon : public Intersectable {
         material = _material;
     }
     
-    Hit intersect(const Ray& ray) {
+    Hit intersect(const Ray& ray) override {
         Hit hit;
         auto n = cross(r2-r1, r3-r1);
         n = normalize(n);
@@ -196,7 +221,7 @@ struct Pentagon : public Intersectable {
 
 class Camera {
 	vec3 eye, lookat, right, up;
-	float fov;
+	float fov = 0;
 public:
 	void set(vec3 _eye, vec3 _lookat, vec3 vup, float _fov) {
 		eye = _eye;
@@ -208,8 +233,8 @@ public:
 		up = normalize(cross(w, right)) * focus * tanf(fov / 2);
 	}
 	Ray getRay(int X, int Y) {
-		vec3 dir = lookat + right * (2.0f * (X + 0.5f) / windowWidth - 1) + up * (2.0f * (Y + 0.5f) / windowHeight - 1) - eye;
-		return Ray(eye, dir);
+		vec3 dir = lookat + right * (2.0f * (float(X) + 0.5f) / windowWidth - 1) + up * (2.0f * (float(Y) + 0.5f) / windowHeight - 1) - eye;
+		return {eye, dir};
 	}
 	void Animate(float dt){
 	    vec3 d = eye - lookat;
@@ -221,9 +246,9 @@ public:
 struct Light {
 	vec3 position;
 	vec3 Le;
-	Light(vec3 _position, vec3 _Le) {
-		position = _position;
-		Le = _Le;
+	Light(vec3 position, vec3 Le) {
+		this->position = position;
+		this->Le = Le;
 	}
 	
 	vec3 getDirection(const vec3& from) const {
@@ -236,7 +261,7 @@ struct Light {
 	}
 };
 
-float rnd() { return (float)rand() / RAND_MAX; }
+float rnd() { return (float)rand() / float(RAND_MAX); }
 
 const float epsilon = 0.0001f;
 
@@ -267,8 +292,7 @@ public:
         
         vec3 kd(0.3f, 0.3f, .3f), ks(2, 2, 2);
         Material* dodekaMat = new RoughMaterial(kd, ks, 50);
-        for (int i = 0; i < 12; i++) {
-            auto indexRow = objIndex[i];
+        for (auto indexRow : objIndex) {
             auto p1 = objPoints[indexRow[0]];
             auto p2 = objPoints[indexRow[1]];
             auto p3 = objPoints[indexRow[2]];
@@ -280,10 +304,10 @@ public:
 	}
 
 	void render(std::vector<vec4>& image) {
-#pragma omp parallel for collapse(2)
-		for (int Y = 0; Y < windowHeight; Y++) {
-			for (int X = 0; X < windowWidth; X++) {
-				vec3 color = trace(camera.getRay(X, Y));
+#pragma omp parallel for collapse(2) default(none) shared(windowHeight, windowWidth, image)
+		for (unsigned int Y = 0; Y < windowHeight; Y++) {
+			for (unsigned int X = 0; X < windowWidth; X++) {
+				vec3 color = trace(camera.getRay(int(X), int(Y)));
 				image[Y * windowWidth + X] = vec4(color.x, color.y, color.z, 1);
 			}
 		}
@@ -400,8 +424,8 @@ public:
         texture.create(wW, wH, image);
     }
     
-	FullScreenTexturedQuad(int windowWidth, int windowHeight, std::vector<vec4>& image)
-		: wW(windowWidth), wH(windowHeight), texture(windowWidth, windowHeight, image)
+	FullScreenTexturedQuad(int windowW, int windowH, std::vector<vec4>& image)
+		: wW(windowW), wH(windowH), texture(windowWidth, windowHeight, image)
 	{
 		glGenVertexArrays(1, &vao);	// create 1 vertex array object
 		glBindVertexArray(vao);		// make it active
@@ -436,7 +460,7 @@ void onInitialization() {
     long timeStart = glutGet(GLUT_ELAPSED_TIME);
     scene.render(image);
     long timeEnd = glutGet(GLUT_ELAPSED_TIME);
-    printf("Rendering time: %d milliseconds\n", (timeEnd - timeStart));
+    printf("Rendering time: %ld milliseconds\n", (timeEnd - timeStart));
     
     // copy image to GPU as a texture
     fullScreenTexturedQuad = new FullScreenTexturedQuad(windowWidth, windowHeight, image);
@@ -452,7 +476,7 @@ void onDisplay() {
     long timeStart = glutGet(GLUT_ELAPSED_TIME);
     scene.render(image);
     long timeEnd = glutGet(GLUT_ELAPSED_TIME);
-    printf("Rendering time: %d milliseconds\n", (timeEnd - timeStart));
+    printf("Rendering time: %ld milliseconds\n", (timeEnd - timeStart));
     
     fullScreenTexturedQuad->loadImage(image);
     
-- 
GitLab