Newer
Older
#include "material/BackgroundMaterial.h"
#include "material/DiffuseMaterial.h"
#include "sampling/Image.h"
#include "sampling/Scene.h"
#include "shape/CirclePlane.h"
#include "shape/LightSingleGroup.h"
#include "shape/RectanglePlane.h"
#include "shape/ShapeSingleGroup.h"
#include "testing/Testing.h"
#include "tools/Mat4.h"
using namespace material;
using namespace util;
using namespace test;
using namespace cam;
using namespace shapes;
using namespace std;
cout << "Start" << endl;
// Image img = Image (100, 100);
Mat4 ident;
#if true
Mat4 camm = rotate(Vec3(1, 0, 0), -30) * rotate(Vec3(0, 1, 0), -45) *
translate(Vec3(0, 3, 2));
#else
Mat4 camm = rotate(Vec3(1, 0, 0), -90) * rotate(Vec3(1, 0, 0), 0) *
translate(Vec3(0, 3, 0));
#endif
Image sky_image = readImage("textures/moonlit_golf_4k.hdr");
auto skysphere = make_shared<SkySphere>(
SkySphere(make_shared<Image>(sky_image), sky_image));
group.add(skysphere);
auto floor = make_shared<RectanglePlane>(
1000.0f, 1000.0f, false, make_shared<DiffuseMaterial>(Vec3(0.9)));
group.add(ShapeSingleGroup(translate(Vec3(0, -1, 0)), floor));
std::ifstream roo("Tower_Base.obj");
TriangleMesh rook(roo,
make_shared<DiffuseMaterial>(Vec3(0.1f, 0.9f, 0.1f)));
group.add(ShapeSingleGroup(translate(Vec3(6, 0, -2)),
make_shared<TriangleMesh>(rook)));
auto red_sphere = make_shared<Sphere>(
1.0f, make_shared<DiffuseMaterial>(Vec3(0.9f, 0.1f, 0.1f)));
group.add(ShapeSingleGroup(translate(Vec3(2, 0, -2)), red_sphere));
auto green_sphere = make_shared<Sphere>(
1.0f, make_shared<DiffuseMaterial>(Vec3(0.1f, 0.9f, 0.1f)));
// group.add(ShapeSingleGroup(translate(Vec3(4, 0, -2)), green_sphere));
std::vector<std::shared_ptr<Light>> lights = {skysphere};
clock_t clkStart;
clock_t clkFinish;
cout << "Start render" << endl;
clkStart = clock();
clkFinish = clock();
cout << "Start imaging" << endl;
writeBmp("results/aaa.bmp", img);
cout << "End" << endl;
std::cout << clkFinish - clkStart;
} else if (false) {
// test::vec3_test();
// test::mat4_test();
// test::ray_test();
// test::shape_test();
test::axisalignedboundingbox_test();
} else {
TriangleMesh mesh(is, nullptr);
cout << "triangles: " << mesh.triangles.size() << endl;
cout << "leaves: " << mesh.leaves.size() << endl;
cout << "hierarchy: " << mesh.hierarchy.size() << endl;
for (auto hier : mesh.hierarchy) {
cout << "{" << hier.left << " " << hier.right << " "
<< hier.leaves_i << " " << hier.leaves_size << "}" << endl;
}