1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #include <embree3/rtcore.h>
- #include <cstdio>
- #include <limits>
- #include <iostream>
- #include <OBJ_Loader.h>
- #include <bmp.hpp>
- #include "scene.hpp"
- #include "camera.hpp"
- #include <time.hpp>
- #include <lodepng.h>
- #include <algorithm>
- #include <Eigen/Geometry>
- using std::printf;
- void errorFunction(void* userPtr, enum RTCError error, const char* str){
- printf("error %d: %s\n", error, str);
- }
- RTCDevice initializeDevice(){
- RTCDevice device = rtcNewDevice("threads=24,user_threads=24");
- if (!device)
- printf("error %d: cannot create device\n", rtcGetDeviceError(NULL));
- rtcSetDeviceErrorFunction(device, errorFunction, NULL);
- return device;
- }
- int main(){
- using namespace Eigen;
- RTCDevice dev = initializeDevice();
- scene scene(dev);
- objl::Loader ajax;
- objl::Loader quad;
- ajax.LoadFile("ajax.obj");
- quad.LoadFile("quad.obj");
- objl::Mesh ajax_mesh = ajax.LoadedMeshes[0];
- objl::Mesh quad_mesh = quad.LoadedMeshes[0];
- Matrix4f trf;
- trf << 1,0,0,0,
- 0,1.5,0,0,
- 0,0,1,0,
- 0,0,0,1;
- unsigned aji = scene.add_object(ajax_mesh, trf, false);
- scene.added_objects[scene.geom_id_to_object_index_map.find(aji)->second]->mat.m_bsdf = std::make_unique<microfacet_bsdf>(0.1);
- trf << 40,0,0,0,
- 0,1,0,-1.5,
- 0,0,4,0,
- 0,0,0,1;
- scene.add_object(quad_mesh, trf, false);
- //scene.add_sphere(Vector3f(-1.5,0,0),0.5, true);
- scene.pointlight.push_back(pointlight{Eigen::Vector3f(2,0,0), Eigen::Vector3f(1,1,0)});
- scene.build();
- camera cam(Vector3f(0, 0.6, 2.4),Vector3f(0,0,0), Vector3f(0,1,0));
- sampler simp;
- size_t n = 500;
- auto t1 = nanoTime();
- auto x = cam.get_image(scene, n, simp);
- auto t2 = nanoTime();
- std::cout << (t2 - t1) / 1000 / 1000.0 << " miliseconds\n";
- std::vector<unsigned char> lodepng_image(x.size() * 4);
- for(size_t i = 0;i < x.size();i++){
- lodepng_image[i * 4] = (unsigned char)(std::min(x[x.size() - i - 1].x() * 256,255.f));
- lodepng_image[i * 4 + 1] = (unsigned char)(std::min(x[x.size() - i - 1].y() * 256,255.f));
- lodepng_image[i * 4 + 2] = (unsigned char)(std::min(x[x.size() - i - 1].z() * 256,255.f));
- lodepng_image[i * 4 + 3] = 255;
- }
- lodepng::encode("bild.png", lodepng_image, n, n);
- //drawbmp("bild.bmp", x, n, n);
-
- //std::cout << (rayhit.ray.tfar) << "\n";
- //std::cout << (rayhit.hit.Ng_x) << "\n";
- return 0;
- }
|