Added gallery.
@@ -1,6 +1,6 @@
|
||||
-ansi
|
||||
-std=c++11
|
||||
-pedantic
|
||||
-Wall
|
||||
-DGLM_FORCE_RADIANS
|
||||
-DUSE_CPP11_RANDOM
|
||||
-fopenmp
|
||||
-std=c++11
|
||||
|
After Width: | Height: | Size: 210 KiB |
After Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 117 KiB |
After Width: | Height: | Size: 251 KiB |
BIN
Gallery/montecarlo_furnace_test_samples_1000_time_1m_3s.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
Gallery/montecarlo_samples_100000_exposure_-2_time_235_m_17s.png
Normal file
After Width: | Height: | Size: 289 KiB |
BIN
Gallery/montecarlo_samples_10000_exposure_-3_time_24m_24s.png
Normal file
After Width: | Height: | Size: 284 KiB |
BIN
Gallery/montecarlo_samples_1000_exposure_-2_time_26m_33s.png
Normal file
After Width: | Height: | Size: 595 KiB |
After Width: | Height: | Size: 1.4 MiB |
BIN
Gallery/montecarlo_samples_5000_exposure_-0.5_time_19m_3s.png
Normal file
After Width: | Height: | Size: 508 KiB |
BIN
Gallery/whitted_samples_100_time_18s.png
Normal file
After Width: | Height: | Size: 111 KiB |
2
Makefile
@@ -6,7 +6,7 @@ OBJECTS = main.o sampling.o camera.o environment.o disk.o plane.o sphere.o \
|
||||
spot_light.o sphere_area_light.o disk_area_light.o scene.o tracer.o \
|
||||
path_tracer.o whitted_tracer.o rgbe.o kd_tree.o photon_tracer.o
|
||||
DEPENDS = $(OBJECTS:.o=.d)
|
||||
CXXFLAGS = -std=c++11 -pedantic -Wall -DGLM_FORCE_RADIANS -fopenmp -D_USE_CPP11_RANDOM #-DENABLE_KD_TREE
|
||||
CXXFLAGS = -std=c++11 -pedantic -Wall -DGLM_FORCE_RADIANS -fopenmp -DUSE_CPP11_RANDOM #-DENABLE_KD_TREE
|
||||
LDLIBS = -lfreeimage -ljson_spirit
|
||||
|
||||
.PHONY: all
|
||||
|
@@ -2,6 +2,8 @@
|
||||
#ifndef HSA_BRDF_HPP
|
||||
#define HSA_BRDF_HPP
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
#include "phong_brdf.hpp"
|
||||
|
||||
using glm::normalize;
|
||||
|
@@ -118,9 +118,16 @@ vec3 PhotonTracer::trace_ray(Ray & r, Scene * s, unsigned int rec_level) const {
|
||||
#else
|
||||
m_photon_map.find_by_distance(photons, i_pos, n, m_h_radius, 1000);
|
||||
#endif
|
||||
|
||||
while(photons.size() == 0 && radius < 5.0) {
|
||||
radius *= 2;
|
||||
#ifdef ENABLE_KD_TREE
|
||||
vmin = Vec3(i_pos.x - m_h_radius, i_pos.y - m_h_radius, i_pos.z - m_h_radius);
|
||||
vmax = Vec3(i_pos.x + m_h_radius, i_pos.y + m_h_radius, i_pos.z + m_h_radius);
|
||||
photons = m_photon_map.findInRange(vmin, vmax);
|
||||
#else
|
||||
m_photon_map.find_by_distance(photons, i_pos, n, m_h_radius, 1000);
|
||||
#endif
|
||||
}
|
||||
|
||||
radius = m_h_radius;
|
||||
@@ -129,11 +136,17 @@ vec3 PhotonTracer::trace_ray(Ray & r, Scene * s, unsigned int rec_level) const {
|
||||
#else
|
||||
m_caustics_map.find_by_distance(caustics, i_pos, n, m_h_radius, 1000);
|
||||
#endif
|
||||
|
||||
while(caustics.size() == 0 && radius < 5.0) {
|
||||
radius *= 2;
|
||||
#ifdef ENABLE_KD_TREE
|
||||
vmin = Vec3(i_pos.x - m_h_radius, i_pos.y - m_h_radius, i_pos.z - m_h_radius);
|
||||
vmax = Vec3(i_pos.x + m_h_radius, i_pos.y + m_h_radius, i_pos.z + m_h_radius);
|
||||
photons = m_caustics_map.findInRange(vmin, vmax);
|
||||
#else
|
||||
m_caustics_map.find_by_distance(caustics, i_pos, n, m_h_radius, 1000);
|
||||
#endif
|
||||
}
|
||||
//photons.insert(photons.end(), caustics.begin(), caustics.end());
|
||||
|
||||
for (Photon p : photons) {
|
||||
p.getColor(red, green, blue);
|
||||
|
11
sampling.cpp
@@ -1,5 +1,4 @@
|
||||
#ifdef _USE_CPP11_RANDOM
|
||||
#warning "Using C++11 random number generators."
|
||||
#ifdef USE_CPP11_RANDOM
|
||||
#include <random>
|
||||
#include <chrono>
|
||||
#include <functional>
|
||||
@@ -13,7 +12,7 @@
|
||||
|
||||
#include "sampling.hpp"
|
||||
|
||||
#ifdef _USE_CPP11_RANDOM
|
||||
#ifdef USE_CPP11_RANDOM
|
||||
using std::uniform_real_distribution;
|
||||
using std::mt19937;
|
||||
using std::bind;
|
||||
@@ -29,7 +28,7 @@ const float PDF = (1.0f / (2.0f * pi<float>()));
|
||||
|
||||
static bool seeded = false;
|
||||
|
||||
#ifdef _USE_CPP11_RANDOM
|
||||
#ifdef USE_CPP11_RANDOM
|
||||
static uniform_real_distribution<float> dist(0, 1);
|
||||
static mt19937 engine;
|
||||
static auto generator = bind(dist, engine);
|
||||
@@ -37,14 +36,14 @@ static auto generator = bind(dist, engine);
|
||||
|
||||
float random01() {
|
||||
if (!seeded) {
|
||||
#ifdef _USE_CPP11_RANDOM
|
||||
#ifdef USE_CPP11_RANDOM
|
||||
engine.seed(std::chrono::system_clock::now().time_since_epoch().count());
|
||||
#else
|
||||
srand(time(NULL));
|
||||
#endif
|
||||
seeded = true;
|
||||
}
|
||||
#ifdef _USE_CPP11_RANDOM
|
||||
#ifdef USE_CPP11_RANDOM
|
||||
return generator();
|
||||
#else
|
||||
return static_cast<float>(rand()) / RAND_MAX;
|
||||
|