diff --git a/.gitignore b/.gitignore index 333c253..2cf37dd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ -RayTracer *.tga *.gch *.out *.o + +/bazel-* diff --git a/WORKSPACE b/WORKSPACE new file mode 100644 index 0000000..f27d572 --- /dev/null +++ b/WORKSPACE @@ -0,0 +1 @@ +workspace(name = "raytracer") diff --git a/src/BSP.cpp b/raytracer/BSP.cpp similarity index 98% rename from src/BSP.cpp rename to raytracer/BSP.cpp index b89f0b1..442b91b 100644 --- a/src/BSP.cpp +++ b/raytracer/BSP.cpp @@ -1,7 +1,8 @@ -#include "BSP.h" #include -#include "Object.h" + +#include "BSP.h" #include "Intersection.h" +#include "objects/Object.h" using namespace std; @@ -18,7 +19,7 @@ void BSP::build() { } // For debugging. - if (true) { + if (false) { for (int i = 0; i < depth; i++) { cout << "\t"; } diff --git a/src/BSP.h b/raytracer/BSP.h similarity index 100% rename from src/BSP.h rename to raytracer/BSP.h diff --git a/raytracer/BUILD b/raytracer/BUILD new file mode 100644 index 0000000..93aef7f --- /dev/null +++ b/raytracer/BUILD @@ -0,0 +1,110 @@ +package(default_visibility = ["//visibility:public"]) + +cc_binary( + name = "raytracer", + srcs = [ + "main.cpp", + ], + deps = [ + ":lib", + ], +) + +cc_library( + name = "lib", + srcs = ["RayTracer.cpp"], + hdrs = ["RayTracer.h"], + deps = [ + ":bsp", + ":camera", + ":image", + ":light", + ":vector", + "//raytracer/materials", + "//raytracer/materials:normal_map", + "//raytracer/objects", + ], +) + + +cc_library( + name = "boundaries", + srcs = ["Boundaries.cpp"], + hdrs = ["Boundaries.h"], + deps = [ + ":ray", + ":vector", + ], +) + +cc_library( + name = "bsp", + srcs = ["BSP.cpp"], + hdrs = ["BSP.h"], + deps = [ + ":boundaries", + ":intersection", + "//raytracer/objects:object", + ], +) + +cc_library( + name = "camera", + srcs = ["Camera.cpp"], + hdrs = ["Camera.h"], + deps = [ + ":vector", + ], +) + +cc_library( + name = "color", + srcs = ["Color.cpp"], + hdrs = ["Color.h"], +) + +cc_library( + name = "image", + srcs = ["Image.cpp"], + hdrs = ["Image.h"], + deps = [ + ":color", + ], +) + +cc_library( + name = "intersection", + srcs = ["Intersection.cpp"], + hdrs = ["Intersection.h"], + deps = [ + ":color", + ":ray", + ":vector", + "//raytracer/objects:object", + "//raytracer/materials:material", + ], +) + +cc_library( + name = "light", + srcs = ["Light.cpp"], + hdrs = ["Light.h"], + deps = [ + ":vector", + ], +) + +cc_library( + name = "ray", + srcs = ["Ray.cpp"], + hdrs = ["Ray.h"], + deps = [ + ":vector", + ], +) + +cc_library( + name = "vector", + srcs = ["Vector.cpp"], + hdrs = ["Vector.h"], +) diff --git a/src/Boundaries.cpp b/raytracer/Boundaries.cpp similarity index 100% rename from src/Boundaries.cpp rename to raytracer/Boundaries.cpp diff --git a/src/Boundaries.h b/raytracer/Boundaries.h similarity index 100% rename from src/Boundaries.h rename to raytracer/Boundaries.h diff --git a/src/Camera.cpp b/raytracer/Camera.cpp similarity index 100% rename from src/Camera.cpp rename to raytracer/Camera.cpp diff --git a/src/Camera.h b/raytracer/Camera.h similarity index 100% rename from src/Camera.h rename to raytracer/Camera.h diff --git a/src/Color.cpp b/raytracer/Color.cpp similarity index 100% rename from src/Color.cpp rename to raytracer/Color.cpp diff --git a/src/Color.h b/raytracer/Color.h similarity index 100% rename from src/Color.h rename to raytracer/Color.h diff --git a/src/Image.cpp b/raytracer/Image.cpp similarity index 100% rename from src/Image.cpp rename to raytracer/Image.cpp diff --git a/src/Image.h b/raytracer/Image.h similarity index 100% rename from src/Image.h rename to raytracer/Image.h diff --git a/src/Intersection.cpp b/raytracer/Intersection.cpp similarity index 100% rename from src/Intersection.cpp rename to raytracer/Intersection.cpp diff --git a/src/Intersection.h b/raytracer/Intersection.h similarity index 93% rename from src/Intersection.h rename to raytracer/Intersection.h index e9dce60..2c061e5 100644 --- a/src/Intersection.h +++ b/raytracer/Intersection.h @@ -2,11 +2,11 @@ #define __INTERSECTION_H__ #include -#include "Vector.h" -#include "Object.h" #include "Color.h" #include "Ray.h" -#include "Material.h" +#include "Vector.h" +#include "materials/Material.h" +#include "objects/Object.h" class Intersection { public: diff --git a/src/Light.cpp b/raytracer/Light.cpp similarity index 100% rename from src/Light.cpp rename to raytracer/Light.cpp diff --git a/src/Light.h b/raytracer/Light.h similarity index 100% rename from src/Light.h rename to raytracer/Light.h diff --git a/src/Ray.cpp b/raytracer/Ray.cpp similarity index 100% rename from src/Ray.cpp rename to raytracer/Ray.cpp diff --git a/src/Ray.h b/raytracer/Ray.h similarity index 100% rename from src/Ray.h rename to raytracer/Ray.h diff --git a/src/RayTracer.cpp b/raytracer/RayTracer.cpp similarity index 85% rename from src/RayTracer.cpp rename to raytracer/RayTracer.cpp index e42af1c..7931b9e 100644 --- a/src/RayTracer.cpp +++ b/raytracer/RayTracer.cpp @@ -1,24 +1,23 @@ #include -#include "RayTracer.h" + +#include "BSP.h" #include "Image.h" -#include "Object.h" -#include "Sphere.h" -#include "Triangle.h" #include "Intersection.h" #include "Light.h" -#include "Air.h" -#include "ShinyColor.h" -#include "FlatColor.h" -#include "Checkerboard.h" -#include "Marble.h" -#include "Wood.h" -#include "Glass.h" -#include "NormalMap.h" -#include "Turbulence.h" -#include "CrissCross.h" -#include "BSP.h" - -using namespace std; +#include "RayTracer.h" +#include "materials/Air.h" +#include "materials/Checkerboard.h" +#include "materials/CrissCross.h" +#include "materials/FlatColor.h" +#include "materials/Glass.h" +#include "materials/Marble.h" +#include "materials/NormalMap.h" +#include "materials/ShinyColor.h" +#include "materials/Turbulence.h" +#include "materials/Wood.h" +#include "objects/Object.h" +#include "objects/Sphere.h" +#include "objects/Triangle.h" RayTracer::RayTracer(int width_, int height_, int maxReflections_, int superSamples_, int depthComplexity_) : width(width_), height(height_), @@ -27,18 +26,18 @@ RayTracer::RayTracer(int width_, int height_, int maxReflections_, int superSamp startingMaterial(new Air()) {} RayTracer::~RayTracer() { - for (vector::iterator itr = objects.begin(); itr < objects.end(); itr++) { + for (std::vector::iterator itr = objects.begin(); itr < objects.end(); itr++) { delete *itr; } - for (vector::iterator itr = lights.begin(); itr < lights.end(); itr++) { + for (std::vector::iterator itr = lights.begin(); itr < lights.end(); itr++) { delete *itr; } delete startingMaterial; } -void RayTracer::traceRays(string fileName) { +void RayTracer::traceRays(std::string fileName) { int columnsCompleted = 0; camera.calculateWUV(); Image image(width, height); @@ -55,7 +54,7 @@ void RayTracer::traceRays(string fileName) { // Update percent complete. columnsCompleted++; float percentage = columnsCompleted/(float)width * 100; - cout << '\r' << (int)percentage << '%'; + std::cout << '\r' << (int)percentage << '%'; fflush(stdout); for (int y = 0; y < height; y++) { @@ -63,8 +62,8 @@ void RayTracer::traceRays(string fileName) { } } - cout << "\rDone!" << endl; - cout << "Rays cast: " << raysCast << endl; + std::cout << "\rDone!" << std::endl; + std::cout << "Rays cast: " << raysCast << std::endl; image.WriteTga(fileName.c_str(), false); } @@ -156,7 +155,7 @@ Color RayTracer::getDiffuseAndSpecularLighting(const Intersection& intersection, Color diffuseColor(0.0, 0.0, 0.0); Color specularColor(0.0, 0.0, 0.0); - for (vector::iterator itr = lights.begin(); itr < lights.end(); itr++) { + for (std::vector::iterator itr = lights.begin(); itr < lights.end(); itr++) { Light* light = *itr; Vector lightOffset = light->position - intersection.intersection; double lightDistance = lightOffset.length(); @@ -228,7 +227,7 @@ Color RayTracer::getReflectiveRefractiveLighting(const Intersection& intersectio * Don't perform lighting if the object is not reflective or refractive or we have * hit our recursion limit. */ - if (reflectivity == NOT_REFLECTIVE && endRefractiveIndex == NOT_REFRACTIVE || + if ((reflectivity == NOT_REFLECTIVE && endRefractiveIndex == NOT_REFRACTIVE) || reflectionsRemaining <= 0) { return Color(); } @@ -298,7 +297,7 @@ Vector RayTracer::refractVector(const Vector& normal, const Vector& incident, double sinT2 = n * n * (1.0 - cosI * cosI); if (sinT2 > 1.0) { - cerr << "Bad refraction vector!" << endl; + std::cerr << "Bad refraction vector!" << std::endl; exit(EXIT_FAILURE); } @@ -310,8 +309,8 @@ Vector RayTracer::reflectVector(Vector vector, Vector normal) { return normal * 2 * vector.dot(normal) - vector; } -void RayTracer::readScene(istream& in) { - string type; +void RayTracer::readScene(std::istream& in) { + std::string type; in >> type; @@ -320,7 +319,7 @@ void RayTracer::readScene(istream& in) { // Ignore comment lines. getline(in, type); } else if (type.compare("model") == 0) { - string model; + std::string model; int size; Vector translate; Material* material; @@ -382,7 +381,7 @@ void RayTracer::readScene(istream& in) { } else if (type.compare("cameraScreenWidth") == 0) { in >> camera.screenWidth; } else { - cerr << "Type not found: " << type << endl; + std::cerr << "Type not found: " << type << std::endl; exit(EXIT_FAILURE); } @@ -393,20 +392,20 @@ void RayTracer::readScene(istream& in) { bsp = new BSP(0, 'x', objects); } -void RayTracer::readModel(string model, int size, Vector translate, Material* material) { - string type; - vector vertices; +void RayTracer::readModel(std::string model, int size, Vector translate, Material* material) { + std::string type; + std::vector vertices; Vector centerOffset; double minX, maxX, minY, maxY, minZ, maxZ; double offX = 0.0, offY = 0.0, offZ = 0.0, scale = 0.0; - cout << model; + std::cout << model; - ifstream in; - in.open(model.c_str(), ifstream::in); + std::ifstream in; + in.open(model.c_str(), std::ifstream::in); if (in.fail()) { - cerr << "Failed opening model file" << endl; + std::cerr << "Failed opening model file" << std::endl; exit(EXIT_FAILURE); } @@ -419,13 +418,13 @@ void RayTracer::readModel(string model, int size, Vector translate, Material* ma in >> index; in >> v.x >> v.y >> v.z; - minX = min(minX, v.x); - minY = min(minY, v.y); - minZ = min(minZ, v.z); + minX = std::min(minX, v.x); + minY = std::min(minY, v.y); + minZ = std::min(minZ, v.z); - maxX = max(maxX, v.x); - maxY = max(maxY, v.y); - maxZ = max(maxZ, v.z); + maxX = std::max(maxX, v.x); + maxY = std::max(maxY, v.y); + maxZ = std::max(maxZ, v.z); vertices.push_back(v); } else if (type.compare("Face") == 0) { @@ -467,9 +466,9 @@ void RayTracer::readModel(string model, int size, Vector translate, Material* ma /** * Parses the input stream and makes a new Material. */ -Material* RayTracer::readMaterial(istream& in) { +Material* RayTracer::readMaterial(std::istream& in) { Material* material; - string type; + std::string type; in >> type; if (type.compare("FlatColor") == 0) { @@ -495,7 +494,7 @@ Material* RayTracer::readMaterial(istream& in) { // scene parsing problems below. return material; } else { - cerr << "Material not found: " << type << endl; + std::cerr << "Material not found: " << type << std::endl; exit(EXIT_FAILURE); } @@ -504,8 +503,8 @@ Material* RayTracer::readMaterial(istream& in) { return material; } -NormalMap* RayTracer::readNormalMap(istream& in) { - string type; +NormalMap* RayTracer::readNormalMap(std::istream& in) { + std::string type; in >> type; if (type.compare("null") == 0) { @@ -513,28 +512,28 @@ NormalMap* RayTracer::readNormalMap(istream& in) { } else if (type.compare("NormalMap") == 0) { return new NormalMap(in); } else { - cerr << "NormalMap not found: " << type << endl; + std::cerr << "NormalMap not found: " << type << std::endl; exit(EXIT_FAILURE); } } -void RayTracer::addMaterial(istream& in) { - string materialName; +void RayTracer::addMaterial(std::istream& in) { + std::string materialName; in >> materialName; - for (string::iterator itr = materialName.begin(); itr < materialName.end(); itr++) { + for (std::string::iterator itr = materialName.begin(); itr < materialName.end(); itr++) { if (isupper(*itr)) { - cerr << "Invalid material name: " << materialName << endl; + std::cerr << "Invalid material name: " << materialName << std::endl; exit(EXIT_FAILURE); } } if (materials.count(materialName) > 0) { - cerr << "Duplicate material name: " << materialName << endl; + std::cerr << "Duplicate material name: " << materialName << std::endl; exit(EXIT_FAILURE); } Material* material = readMaterial(in); - materials.insert(pair(materialName, material)); + materials.insert(std::pair(materialName, material)); } diff --git a/src/RayTracer.h b/raytracer/RayTracer.h similarity index 100% rename from src/RayTracer.h rename to raytracer/RayTracer.h diff --git a/src/Vector.cpp b/raytracer/Vector.cpp similarity index 100% rename from src/Vector.cpp rename to raytracer/Vector.cpp diff --git a/src/Vector.h b/raytracer/Vector.h similarity index 100% rename from src/Vector.h rename to raytracer/Vector.h diff --git a/src/main.cpp b/raytracer/main.cpp similarity index 100% rename from src/main.cpp rename to raytracer/main.cpp diff --git a/src/Air.cpp b/raytracer/materials/Air.cpp similarity index 72% rename from src/Air.cpp rename to raytracer/materials/Air.cpp index 5d6e271..16d12a0 100644 --- a/src/Air.cpp +++ b/raytracer/materials/Air.cpp @@ -1,7 +1,7 @@ #include "Air.h" -#include "Vector.h" -#include "Color.h" +#include "raytracer/Vector.h" +#include "raytracer/Color.h" Color Air::getColor(Vector point) { return Color(0.0, 0.0, 0.0); diff --git a/src/Air.h b/raytracer/materials/Air.h similarity index 100% rename from src/Air.h rename to raytracer/materials/Air.h diff --git a/raytracer/materials/BUILD b/raytracer/materials/BUILD new file mode 100644 index 0000000..e7025cf --- /dev/null +++ b/raytracer/materials/BUILD @@ -0,0 +1,144 @@ +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "materials", + deps = [ + ":air", + ":checkerboard", + ":criss_cross", + ":flat_color", + ":glass", + ":marble", + ":material", + ":shiny_color", + ":turbulence", + ":wood", + ], +) + +cc_library( + name = "material", + srcs = ["Material.cpp"], + hdrs = ["Material.h"], + deps = [ + ":normal_map", + "//raytracer:color", + ], +) + +cc_library( + name = "normal_map", + srcs = ["NormalMap.cpp"], + hdrs = ["NormalMap.h"], + deps = [ + ":perlin_noise", + "//raytracer:vector", + ], +) + +cc_library( + name = "perlin_noise", + srcs = ["PerlinNoise.cpp"], + hdrs = ["PerlinNoise.h"], +) + + +cc_library( + name = "air", + srcs = ["Air.cpp"], + hdrs = ["Air.h"], + deps = [ + ":material", + "//raytracer:color", + "//raytracer:vector", + ], +) + +cc_library( + name = "criss_cross", + srcs = ["CrissCross.cpp"], + hdrs = ["CrissCross.h"], + deps = [ + ":material", + ":perlin_noise", + "//raytracer:color", + "//raytracer:vector", + ], +) + +cc_library( + name = "checkerboard", + srcs = ["Checkerboard.cpp"], + hdrs = ["Checkerboard.h"], + deps = [ + ":material", + "//raytracer:color", + "//raytracer:vector", + ], +) + +cc_library( + name = "flat_color", + srcs = ["FlatColor.cpp"], + hdrs = ["FlatColor.h"], + deps = [ + ":material", + "//raytracer:color", + "//raytracer:vector", + ], +) + +cc_library( + name = "glass", + srcs = ["Glass.cpp"], + hdrs = ["Glass.h"], + deps = [ + ":material", + "//raytracer:color", + "//raytracer:vector", + ], +) + +cc_library( + name = "marble", + srcs = ["Marble.cpp"], + hdrs = ["Marble.h"], + deps = [ + ":material", + "//raytracer:color", + "//raytracer:vector", + ], +) + +cc_library( + name = "shiny_color", + srcs = ["ShinyColor.cpp"], + hdrs = ["ShinyColor.h"], + deps = [ + ":material", + "//raytracer:color", + "//raytracer:vector", + ], +) + +cc_library( + name = "turbulence", + srcs = ["Turbulence.cpp"], + hdrs = ["Turbulence.h"], + deps = [ + ":material", + "//raytracer:color", + "//raytracer:vector", + ], +) + +cc_library( + name = "wood", + srcs = ["Wood.cpp"], + hdrs = ["Wood.h"], + deps = [ + ":material", + "//raytracer:color", + "//raytracer:vector", + ], +) diff --git a/src/Checkerboard.cpp b/raytracer/materials/Checkerboard.cpp similarity index 96% rename from src/Checkerboard.cpp rename to raytracer/materials/Checkerboard.cpp index 7db07eb..92cf0db 100644 --- a/src/Checkerboard.cpp +++ b/raytracer/materials/Checkerboard.cpp @@ -1,6 +1,6 @@ #include "Checkerboard.h" -#include "Vector.h" +#include "raytracer/Vector.h" // Offset points to move the origin which makes an ugly seam. #define POINT_OFFSET 3893343 diff --git a/src/Checkerboard.h b/raytracer/materials/Checkerboard.h similarity index 92% rename from src/Checkerboard.h rename to raytracer/materials/Checkerboard.h index 4476162..ff623a8 100644 --- a/src/Checkerboard.h +++ b/raytracer/materials/Checkerboard.h @@ -2,6 +2,7 @@ #define __CHECKERBOARD_H__ #include "Material.h" +#include "raytracer/Color.h" class Checkerboard : public Material { private: diff --git a/src/CrissCross.cpp b/raytracer/materials/CrissCross.cpp similarity index 83% rename from src/CrissCross.cpp rename to raytracer/materials/CrissCross.cpp index cb660fc..0a745c4 100644 --- a/src/CrissCross.cpp +++ b/raytracer/materials/CrissCross.cpp @@ -1,7 +1,8 @@ -#include "CrissCross.h" +#include -#include "Vector.h" -#include "Color.h" +#include "CrissCross.h" +#include "raytracer/Vector.h" +#include "raytracer/Color.h" CrissCross::CrissCross(std::istream& in) { in >> color1.r >> color1.g >> color1.b; @@ -21,19 +22,19 @@ Color CrissCross::getColor(Vector point) { double noiseCoefC = 0; for (int level = 1; level < 10; level++) { - noiseCoefA += (1.0f / level) * fabsf(perlin.noise( + noiseCoefA += (1.0f / level) * std::abs(perlin.noise( level * 0.35 * x, level * 0.05 * y, level * z )); - noiseCoefB += (1.0f / level) * fabsf(perlin.noise( + noiseCoefB += (1.0f / level) * std::abs(perlin.noise( level * x, level * 0.35 * y, level * 0.05 * z )); - noiseCoefC += (1.0f / level) * fabsf(perlin.noise( + noiseCoefC += (1.0f / level) * std::abs(perlin.noise( level * 0.05 * x, level * y, level * 0.35 * z diff --git a/src/CrissCross.h b/raytracer/materials/CrissCross.h similarity index 88% rename from src/CrissCross.h rename to raytracer/materials/CrissCross.h index 51b9735..6f6aae3 100644 --- a/src/CrissCross.h +++ b/raytracer/materials/CrissCross.h @@ -2,6 +2,8 @@ #define __CRISS_CROSS_H__ #include "Material.h" +#include "PerlinNoise.h" +#include "raytracer/Color.h" class CrissCross : public Material { private: diff --git a/src/FlatColor.cpp b/raytracer/materials/FlatColor.cpp similarity index 74% rename from src/FlatColor.cpp rename to raytracer/materials/FlatColor.cpp index fcb9b0f..6fd2366 100644 --- a/src/FlatColor.cpp +++ b/raytracer/materials/FlatColor.cpp @@ -1,7 +1,7 @@ #include "FlatColor.h" -#include "Vector.h" -#include "Color.h" +#include "raytracer/Vector.h" +#include "raytracer/Color.h" FlatColor::FlatColor(std::istream& in) { in >> color.r >> color.g >> color.b; diff --git a/src/FlatColor.h b/raytracer/materials/FlatColor.h similarity index 88% rename from src/FlatColor.h rename to raytracer/materials/FlatColor.h index cb969cf..55ef0ad 100644 --- a/src/FlatColor.h +++ b/raytracer/materials/FlatColor.h @@ -2,6 +2,7 @@ #define __FLAT_COLOR_H__ #include "Material.h" +#include "raytracer/Color.h" class FlatColor : public Material { private: diff --git a/src/Glass.cpp b/raytracer/materials/Glass.cpp similarity index 83% rename from src/Glass.cpp rename to raytracer/materials/Glass.cpp index f790910..b8f0d32 100644 --- a/src/Glass.cpp +++ b/raytracer/materials/Glass.cpp @@ -1,7 +1,7 @@ #include "Glass.h" -#include "Vector.h" -#include "Color.h" +#include "raytracer/Vector.h" +#include "raytracer/Color.h" Glass::Glass(std::istream& in) { in >> refractiveIndex; diff --git a/src/Glass.h b/raytracer/materials/Glass.h similarity index 100% rename from src/Glass.h rename to raytracer/materials/Glass.h diff --git a/src/Marble.cpp b/raytracer/materials/Marble.cpp similarity index 84% rename from src/Marble.cpp rename to raytracer/materials/Marble.cpp index 573ddb7..580494f 100644 --- a/src/Marble.cpp +++ b/raytracer/materials/Marble.cpp @@ -1,7 +1,8 @@ -#include "Marble.h" +#include -#include "Vector.h" -#include "Color.h" +#include "Marble.h" +#include "raytracer/Color.h" +#include "raytracer/Vector.h" Marble::Marble(std::istream& in) { in >> color1.r >> color1.g >> color1.b; @@ -18,7 +19,7 @@ Color Marble::getColor(Vector point) { double noiseCoef = 0; for (int level = 1; level < 10; level ++) { - noiseCoef += (1.0f / level) * fabsf(perlin.noise( + noiseCoef += (1.0f / level) * std::abs(perlin.noise( level * 0.05 * x, level * 0.15 * y, level * 0.05 * z diff --git a/src/Marble.h b/raytracer/materials/Marble.h similarity index 87% rename from src/Marble.h rename to raytracer/materials/Marble.h index 3304e6d..113b24b 100644 --- a/src/Marble.h +++ b/raytracer/materials/Marble.h @@ -2,6 +2,8 @@ #define __MARBLE_H__ #include "Material.h" +#include "PerlinNoise.h" +#include "raytracer/Color.h" class Marble : public Material { private: diff --git a/src/Material.cpp b/raytracer/materials/Material.cpp similarity index 100% rename from src/Material.cpp rename to raytracer/materials/Material.cpp diff --git a/src/Material.h b/raytracer/materials/Material.h similarity index 93% rename from src/Material.h rename to raytracer/materials/Material.h index 51fd926..04fe911 100644 --- a/src/Material.h +++ b/raytracer/materials/Material.h @@ -8,8 +8,6 @@ #include #include -#include "Color.h" -#include "PerlinNoise.h" class Vector; class Color; @@ -20,6 +18,8 @@ class Material { NormalMap* normalMap; public: + virtual ~Material() = 0; + void setNormalMap(NormalMap* normalMap_) { normalMap = normalMap_; } virtual Color getColor(Vector) = 0; diff --git a/src/NormalMap.cpp b/raytracer/materials/NormalMap.cpp similarity index 100% rename from src/NormalMap.cpp rename to raytracer/materials/NormalMap.cpp diff --git a/src/NormalMap.h b/raytracer/materials/NormalMap.h similarity index 90% rename from src/NormalMap.h rename to raytracer/materials/NormalMap.h index e6f69a9..1dda3c1 100644 --- a/src/NormalMap.h +++ b/raytracer/materials/NormalMap.h @@ -2,8 +2,9 @@ #define __NORMAL_MAP_H__ #include -#include "Vector.h" + #include "PerlinNoise.h" +#include "raytracer/Vector.h" class NormalMap { private: diff --git a/src/PerlinNoise.cpp b/raytracer/materials/PerlinNoise.cpp similarity index 100% rename from src/PerlinNoise.cpp rename to raytracer/materials/PerlinNoise.cpp diff --git a/src/PerlinNoise.h b/raytracer/materials/PerlinNoise.h similarity index 100% rename from src/PerlinNoise.h rename to raytracer/materials/PerlinNoise.h diff --git a/src/ShinyColor.cpp b/raytracer/materials/ShinyColor.cpp similarity index 85% rename from src/ShinyColor.cpp rename to raytracer/materials/ShinyColor.cpp index f681d31..92b910c 100644 --- a/src/ShinyColor.cpp +++ b/raytracer/materials/ShinyColor.cpp @@ -1,7 +1,7 @@ #include "ShinyColor.h" -#include "Vector.h" -#include "Color.h" +#include "raytracer/Vector.h" +#include "raytracer/Color.h" ShinyColor::ShinyColor(std::istream& in) { in >> color.r >> color.g >> color.b; diff --git a/src/ShinyColor.h b/raytracer/materials/ShinyColor.h similarity index 91% rename from src/ShinyColor.h rename to raytracer/materials/ShinyColor.h index 03e1f86..2a89684 100644 --- a/src/ShinyColor.h +++ b/raytracer/materials/ShinyColor.h @@ -2,6 +2,7 @@ #define __SHINY_COLOR_H__ #include "Material.h" +#include "raytracer/Color.h" class ShinyColor : public Material { public: diff --git a/src/Turbulence.cpp b/raytracer/materials/Turbulence.cpp similarity index 84% rename from src/Turbulence.cpp rename to raytracer/materials/Turbulence.cpp index 3f8c4eb..930acdd 100644 --- a/src/Turbulence.cpp +++ b/raytracer/materials/Turbulence.cpp @@ -1,7 +1,8 @@ -#include "Turbulence.h" +#include -#include "Vector.h" -#include "Color.h" +#include "Turbulence.h" +#include "raytracer/Color.h" +#include "raytracer/Vector.h" Turbulence::Turbulence(std::istream& in) { in >> color1.r >> color1.g >> color1.b; @@ -18,7 +19,7 @@ Color Turbulence::getColor(Vector point) { double noiseCoef = 0; for (int level = 1; level < 10; level ++) { - noiseCoef += (1.0f / level) * fabsf(perlin.noise( + noiseCoef += (1.0f / level) * std::abs(perlin.noise( level * 0.05 * x, level * 0.05 * y, level * 0.05 * z diff --git a/src/Turbulence.h b/raytracer/materials/Turbulence.h similarity index 88% rename from src/Turbulence.h rename to raytracer/materials/Turbulence.h index 6fa144c..3b25222 100644 --- a/src/Turbulence.h +++ b/raytracer/materials/Turbulence.h @@ -2,6 +2,8 @@ #define __TURBULENCE_H__ #include "Material.h" +#include "PerlinNoise.h" +#include "raytracer/Color.h" class Turbulence : public Material { private: diff --git a/src/Wood.cpp b/raytracer/materials/Wood.cpp similarity index 90% rename from src/Wood.cpp rename to raytracer/materials/Wood.cpp index 360afe7..df4b4c9 100644 --- a/src/Wood.cpp +++ b/raytracer/materials/Wood.cpp @@ -1,7 +1,7 @@ #include "Wood.h" -#include "Vector.h" -#include "Color.h" +#include "raytracer/Vector.h" +#include "raytracer/Color.h" Wood::Wood(std::istream& in) { in >> color1.r >> color1.g >> color1.b; diff --git a/src/Wood.h b/raytracer/materials/Wood.h similarity index 87% rename from src/Wood.h rename to raytracer/materials/Wood.h index 1dd8f63..8931a5a 100644 --- a/src/Wood.h +++ b/raytracer/materials/Wood.h @@ -2,6 +2,8 @@ #define __WOOD_H__ #include "Material.h" +#include "PerlinNoise.h" +#include "raytracer/Color.h" class Wood : public Material { private: diff --git a/raytracer/objects/BUILD b/raytracer/objects/BUILD new file mode 100644 index 0000000..9dc5b21 --- /dev/null +++ b/raytracer/objects/BUILD @@ -0,0 +1,42 @@ +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "objects", + deps = [ + ":object", + ":sphere", + ":triangle", + ], +) + +cc_library( + name = "object", + srcs = ["Object.cpp"], + hdrs = ["Object.h"], +) + +cc_library( + name = "sphere", + srcs = ["Sphere.cpp"], + hdrs = ["Sphere.h"], + deps = [ + ":object", + "//raytracer:boundaries", + "//raytracer:intersection", + "//raytracer:ray", + "//raytracer:vector", + "//raytracer/materials:material", + ], +) + +cc_library( + name = "triangle", + srcs = ["Triangle.cpp"], + hdrs = ["Triangle.h"], + deps = [ + ":object", + "//raytracer:boundaries", + "//raytracer:vector", + "//raytracer:intersection", + ], +) diff --git a/src/Object.cpp b/raytracer/objects/Object.cpp similarity index 100% rename from src/Object.cpp rename to raytracer/objects/Object.cpp diff --git a/src/Object.h b/raytracer/objects/Object.h similarity index 91% rename from src/Object.h rename to raytracer/objects/Object.h index 81f9239..9c71927 100644 --- a/src/Object.h +++ b/raytracer/objects/Object.h @@ -10,6 +10,7 @@ class Ray; */ class Object { public: + virtual ~Object() = 0; virtual Intersection intersect(Ray) = 0; virtual Boundaries getBounds() = 0; }; diff --git a/src/Sphere.cpp b/raytracer/objects/Sphere.cpp similarity index 96% rename from src/Sphere.cpp rename to raytracer/objects/Sphere.cpp index b2e4c1e..fd38ed7 100644 --- a/src/Sphere.cpp +++ b/raytracer/objects/Sphere.cpp @@ -1,7 +1,8 @@ -#include "Sphere.h" -#include "Material.h" #include +#include "Sphere.h" +#include "raytracer/materials/Material.h" + Intersection Sphere::intersect(Ray ray) { Vector deltap = ray.origin - center; double a = ray.direction.dot(ray.direction); diff --git a/src/Sphere.h b/raytracer/objects/Sphere.h similarity index 82% rename from src/Sphere.h rename to raytracer/objects/Sphere.h index a5b0f40..2a469bf 100644 --- a/src/Sphere.h +++ b/raytracer/objects/Sphere.h @@ -2,11 +2,11 @@ #define __SPHERE_H__ #include -#include "Vector.h" -#include "Ray.h" -#include "Intersection.h" #include "Object.h" -#include "Boundaries.h" +#include "raytracer/Boundaries.h" +#include "raytracer/Intersection.h" +#include "raytracer/Ray.h" +#include "raytracer/Vector.h" class Material; diff --git a/src/Triangle.cpp b/raytracer/objects/Triangle.cpp similarity index 96% rename from src/Triangle.cpp rename to raytracer/objects/Triangle.cpp index d83ddf8..42f7380 100644 --- a/src/Triangle.cpp +++ b/raytracer/objects/Triangle.cpp @@ -1,7 +1,8 @@ #include #include + #include "Triangle.h" -#include "Material.h" +#include "raytracer/materials/Material.h" Intersection Triangle::intersect(Ray ray) { Vector e1, e2, h, s, q, normal; diff --git a/src/Triangle.h b/raytracer/objects/Triangle.h similarity index 87% rename from src/Triangle.h rename to raytracer/objects/Triangle.h index 6decac7..b09c647 100644 --- a/src/Triangle.h +++ b/raytracer/objects/Triangle.h @@ -3,11 +3,12 @@ #include #include -#include "Vector.h" -#include "Ray.h" -#include "Intersection.h" + #include "Object.h" -#include "Boundaries.h" +#include "raytracer/Boundaries.h" +#include "raytracer/Intersection.h" +#include "raytracer/Ray.h" +#include "raytracer/Vector.h" class Material; diff --git a/src/Makefile b/src/Makefile deleted file mode 100644 index 0fe34c5..0000000 --- a/src/Makefile +++ /dev/null @@ -1,88 +0,0 @@ -CC = g++ -CFLAGS = -O3 -Wall -fopenmp - -ALL_OBJECT_FILES = main.o RayTracer.o Image.o Ray.o Vector.o Sphere.o Triangle.o Intersection.o Object.o Color.o Light.o Camera.o Material.o Glass.o Air.o FlatColor.o ShinyColor.o Wood.o Turbulence.o Marble.o CrissCross.o Checkerboard.o PerlinNoise.o NormalMap.o Boundaries.o BSP.o - -RayTracer: $(ALL_OBJECT_FILES) - $(CC) $(CFLAGS) $(ALL_OBJECT_FILES) -o RayTracer - -RayTracer.o: RayTracer.cpp RayTracer.h Vector.h Image.h Object.h Sphere.h Triangle.h Intersection.h Light.h - $(CC) $(CFLAGS) RayTracer.cpp -c -o RayTracer.o - -main.o: main.cpp RayTracer.h - $(CC) $(CFLAGS) main.cpp -c -o main.o - -Image.o: Image.cpp Image.h Color.h - $(CC) $(CFLAGS) Image.cpp -c -o Image.o - -Ray.o: Ray.cpp Ray.h Vector.h - $(CC) $(CFLAGS) Ray.cpp -c -o Ray.o - -Vector.o: Vector.cpp Vector.h - $(CC) $(CFLAGS) Vector.cpp -c -o Vector.o - -Sphere.o: Sphere.cpp Sphere.h Ray.h Vector.h Object.h Intersection.h - $(CC) $(CFLAGS) Sphere.cpp -c -o Sphere.o - -Triangle.o: Triangle.cpp Triangle.h Ray.h Vector.h Object.h Intersection.h - $(CC) $(CFLAGS) Triangle.cpp -c -o Triangle.o - -Intersection.o: Intersection.cpp Intersection.h Vector.h - $(CC) $(CFLAGS) Intersection.cpp -c -o Intersection.o - -Object.o: Object.cpp Object.h - $(CC) $(CFLAGS) Object.cpp -c -o Object.o - -Color.o: Color.cpp Color.h - $(CC) $(CFLAGS) Color.cpp -c -o Color.o - -Light.o: Light.cpp Light.h Vector.h - $(CC) $(CFLAGS) Light.cpp -c -o Light.o - -Camera.o: Camera.cpp Camera.h - $(CC) $(CFLAGS) Camera.cpp -c -o Camera.o - -Material.o: Material.cpp Material.h PerlinNoise.o - $(CC) $(CFLAGS) Material.cpp -c -o Material.o - -ShinyColor.o: ShinyColor.cpp ShinyColor.h Material.h Vector.h Color.h - $(CC) $(CFLAGS) ShinyColor.cpp -c -o ShinyColor.o - -Glass.o: Glass.cpp Glass.h Material.h Vector.h Color.h - $(CC) $(CFLAGS) Glass.cpp -c -o Glass.o - -FlatColor.o: FlatColor.cpp FlatColor.h Material.h Vector.h Color.h - $(CC) $(CFLAGS) FlatColor.cpp -c -o FlatColor.o - -Air.o: Air.cpp Air.h Material.h Vector.h Color.h - $(CC) $(CFLAGS) Air.cpp -c -o Air.o - -Wood.o: Wood.cpp Wood.h Material.h Vector.h Color.h - $(CC) $(CFLAGS) Wood.cpp -c -o Wood.o - -Turbulence.o: Turbulence.cpp Turbulence.h Material.h Vector.h Color.h - $(CC) $(CFLAGS) Turbulence.cpp -c -o Turbulence.o - -CrissCross.o: CrissCross.cpp CrissCross.h Material.h Vector.h Color.h - $(CC) $(CFLAGS) CrissCross.cpp -c -o CrissCross.o - -Marble.o: Marble.cpp Marble.h Material.h Vector.h Color.h - $(CC) $(CFLAGS) Marble.cpp -c -o Marble.o - -Checkerboard.o: Checkerboard.cpp Checkerboard.h Material.h Vector.h Color.h - $(CC) $(CFLAGS) Checkerboard.cpp -c -o Checkerboard.o - -NormalMap.o: NormalMap.cpp NormalMap.h Vector.h PerlinNoise.h - $(CC) $(CFLAGS) NormalMap.cpp -c -o NormalMap.o - -PerlinNoise.o: PerlinNoise.h PerlinNoise.cpp - $(CC) $(CFLAGS) PerlinNoise.cpp -c -o PerlinNoise.o - -Boundaries.o: Boundaries.h Boundaries.cpp - $(CC) $(CFLAGS) Boundaries.cpp -c -o Boundaries.o - -BSP.o: BSP.h BSP.cpp - $(CC) $(CFLAGS) BSP.cpp -c -o BSP.o - -clean: - rm -rf *.o diff --git a/src/runAndOpenAll.sh b/src/runAndOpenAll.sh deleted file mode 100755 index 2a775d7..0000000 --- a/src/runAndOpenAll.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash - -# Runs RayTracer on every scene file in scenes and opens the resulting images. - -make - -SUPER_SAMPLES=1 -DEPTH_COMPLEXITY=5 - -cd ../scenes -scenes=`ls *.scn` -for scene in $scenes -do - sceneName=`echo $scene | sed 's/\..*//'` - outFile=$sceneName - outFile+="_$SUPER_SAMPLES" - outFile+="_$DEPTH_COMPLEXITY" - outFile+=".tga" - - ../src/RayTracer $scene $SUPER_SAMPLES $DEPTH_COMPLEXITY $outFile - echo $outFile # So you can easily get output files in a list. -done - diff --git a/tools/bazel.rc b/tools/bazel.rc new file mode 100644 index 0000000..07d7822 --- /dev/null +++ b/tools/bazel.rc @@ -0,0 +1,4 @@ +# In lieu of a proper CROSSTOOL, specify some default cflags. +build --copt -O3 +build --copt -Wall +build --copt -Werror