* Features [13/20] - [X] Perspective projection - [X] Ray-sphere intersection - [-] Ray-plane and derived intersections - [X] Ray-plane - [X] Ray-disk - [ ] Ray-triangle - [ ] Ray-box - [ ] Ray-mesh intersection - [ ] Octree mesh - [X] Directional lights - [X] Point lights - [X] Spotlights - [ ] Area lights - [ ] Sphere lights - [ ] Box/planar lights - [X] Phong shading - [X] Specular reflections - [X] Transmission - [X] Scene description input files (JSON) - [X] Indirect illumination - [ ] Glossy reflections - [X] Image based lighting - [X] HDR light probes for IBL - [X] Tone mapping - [ ] Texture mapping - [ ] Photon mapping * Junk #+BEGIN_SRC c++ void scene_1(vector
& vf, vector & vl, Environment * & e, Camera * c) { Sphere * s; Plane * p; Disk * d; DirectionalLight * l; e = new Environment(NULL, false, vec3(0.7f, 0.4f, 0.05f)); s = new Sphere(1.0f, 1.0f, -2.0f, 0.5f); s->m_mat->m_diffuse = vec3(1.0f, 0.0f, 0.0f); vf.push_back(static_cast
(s)); s = new Sphere(-1.0f, 1.0f, -2.0f, 0.5f); s->m_mat->m_diffuse = vec3(0.0f, 1.0f, 0.0f); vf.push_back(static_cast
(s)); s = new Sphere(1.0f, -1.0f, -2.0f, 0.5f); s->m_mat->m_diffuse = vec3(0.0f, 0.0f, 1.0f); vf.push_back(static_cast
(s)); s = new Sphere(-1.0f, -1.0f, -2.0f, 0.5f); s->m_mat->m_diffuse = vec3(1.0f, 0.0f, 1.0f); vf.push_back(static_cast
(s)); s = new Sphere(0.0f, 0.0f, -2.0f, 1.0f); s->m_mat->m_diffuse = vec3(1.0f, 1.0f, 0.0f); vf.push_back(static_cast
(s)); p = new Plane(vec3(0.0f, -1.5f, 0.0f), vec3(0.0f, 1.0f, 0.0f)); p->m_mat->m_diffuse = vec3(1.0f, 0.5f, 0.4f); vf.push_back(static_cast
(p)); s = new Sphere(-1.5f, 0.0f, -2.0f, 0.5f); s->m_mat->m_diffuse = vec3(1.0f, 1.0f, 1.0f); s->m_mat->m_rho = 0.3f; vf.push_back(static_cast
(s)); s = new Sphere(1.5f, 0.0f, -2.0f, 0.5f); s->m_mat->m_diffuse = vec3(1.0f, 1.0f, 1.0f); s->m_mat->m_rho = 0.08f; s->m_mat->m_refract = true; s->m_mat->m_ref_index = 1.1f; vf.push_back(static_cast
(s)); s = new Sphere(0.0f, 1.5f, -2.0f, 0.5f); s->m_mat->m_diffuse = vec3(1.0f, 1.0f, 1.0f); s->m_mat->m_rho = 0.5f; vf.push_back(static_cast
(s)); s = new Sphere(0.0f, 0.0f, -1.0f, 0.25f); s->m_mat->m_diffuse = vec3(1.0f, 1.0f, 1.0f); s->m_mat->m_rho = 0.1f; vf.push_back(static_cast
(s)); d = new Disk(vec3(-0.0f, -0.0f, -0.5f), vec3(0.0f, 0.0f, 0.1f), 0.25f); d->m_mat->m_diffuse = vec3(1.0f, 0.0f, 0.0f); d->m_mat->m_rho = 0.3f; d->m_mat->m_refract = true; d->m_mat->m_ref_index = 1.33f; vf.push_back(static_cast
(d)); l = new DirectionalLight(); l->m_position = normalize(vec3(1.0f, 1.0f, 1.0f)); l->m_diffuse = vec3(0.0f, 1.0f, 1.0f); vl.push_back(static_cast(l)); l = new DirectionalLight(); l->m_position = normalize(vec3(-1.0f, 1.0f, 1.0f)); l->m_diffuse = vec3(1.0f, 1.0f, 0.0f); vl.push_back(static_cast(l)); l = new DirectionalLight(); l->m_position = normalize(vec3(0.0f, 1.0f, -1.0f)); l->m_diffuse = vec3(1.0f, 0.0f, 1.0f); vl.push_back(static_cast(l)); } #+END_SRC