-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathelongatedspherescene.cpp
More file actions
65 lines (51 loc) · 2.28 KB
/
elongatedspherescene.cpp
File metadata and controls
65 lines (51 loc) · 2.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include "Canvas.h"
#include "Color.h"
#include "MathUtils.h"
#include "RayCaster.h"
#include "Sphere.h"
#include "Lights.h"
using Vector3f = Eigen::Vector3f;
using Vector4f = Eigen::Vector4f;
using Matrix4f = Eigen::Matrix4f;
int main() {
std::cout << "Running simple ray caster" << std::endl;
Sphere floor = Sphere();
floor.material.color = Color(1.0f, 0.9f, 0.9f);
floor.material.specular = 0.0f;
floor.set_transform(Transform::scale(10.0f, 0.01f, 10.0f));
Sphere left_wall = Sphere();
left_wall.material = floor.material;
left_wall.set_transform(Transform::translate(0.0f, 0.0f, 5.0f) * Transform::rotate_y(-M_PI / 4.0f) * Transform::rotate_x(M_PI / 2.0f) * Transform::scale(10.0f, 0.01f, 10.0f));
Sphere right_wall = Sphere();
right_wall.material = floor.material;
right_wall.set_transform(Transform::translate(0.0f, 0.0f, 5.0f) * Transform::rotate_y(M_PI / 4.0f) * Transform::rotate_x(M_PI / 2.0f) * Transform::scale(10.0f, 0.01f, 10.0f));
Sphere middle = Sphere();
middle.material.color = Color(0.1f, 1.0f, 0.5f);
middle.material.diffuse = 0.7f;
middle.material.specular = 0.3f;
middle.set_transform(Transform::translate(-0.5f, 1.0f, 0.5f));
Sphere right = Sphere();
right.material.color = Color(0.5f, 1.0f, 0.1f);
right.material.diffuse = 0.7f;
right.material.specular = 0.3f;
right.set_transform(Transform::translate(1.5f, 0.5f, -0.5f) * Transform::scale(0.5f, 0.5f, 0.5f));
Sphere left = Sphere();
left.material.color = Color(1.0f, 0.8f, 0.1f);
left.material.diffuse = 0.7f;
left.material.specular = 0.3f;
left.set_transform(Transform::translate(-1.5f, 0.33f, -0.75f) * Transform::scale(0.33f, 0.33f, 0.33f));
World world;
world.add_object(floor);
world.add_object(left_wall);
world.add_object(right_wall);
world.add_object(middle);
world.add_object(right);
world.add_object(left);
world.add_light(PointLight(create_point(-10.0f, 10.0f, -10.0f), Color(1.0f, 1.0f, 1.0f)));
Camera camera(500, 250, M_PI / 3.0f);
camera.transform = Transform::view_transform(create_point(0.0f, 1.5f, -5.0f), create_point(0.0f, 1.0f, 0.0f), create_vector(0.0f, 1.0f, 0.0f));
Canvas canvas = render(camera, world);
canvas.save_to_file("test.ppm");
return 0;
}