Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void fill_map(int height, int width, int start, int stop, vector<pixel>& bitmap) {
- pixel ray_coord = { 0, 0, 0 };
- float pi = atan(-1.0);
- float z = -1;
- #pragma omp parallel for
- for (int i = start; i < stop; i++) {
- for (int j = 0; j < width; j++) {
- float x = (2 * (i + 0.5) / (float)width - 1) * tan(pi / 3) * width / (float)height;
- float y = -(2 * (j + 0.5) / (float)height - 1) * tan(pi / 3);
- pixel vec = { x, y, z };
- pixel direction = normalize(vec);
- pixel pix = unitize(cast_ray(ray_coord, direction));
- bitmap[j + i * width] = pix;
- }
- }
- }
- void render(string filename, int height = 768, int width = 1024) {
- vector<pixel> bitmap(width*height);
- thread t_1(std::bind(&Scene::fill_map, this, height, width, 0, int(height/8), ref(bitmap)));
- thread t_2(std::bind(&Scene::fill_map, this, height, width, int(height/8), int(height/8*2), ref(bitmap)));
- thread t_3(std::bind(&Scene::fill_map, this, height, width, int(height/8*2), int(height / 8 * 3), ref(bitmap)));
- thread t_4(std::bind(&Scene::fill_map, this, height, width, int(height/8*3), int(height / 8 * 4), ref(bitmap)));
- thread t_5(std::bind(&Scene::fill_map, this, height, width, int(height / 8 * 4), int(height / 8 * 5), ref(bitmap)));
- thread t_6(std::bind(&Scene::fill_map, this, height, width, int(height / 8 * 5), int(height / 8 * 6), ref(bitmap)));
- thread t_7(std::bind(&Scene::fill_map, this, height, width, int(height / 8 * 6), int(height / 8 * 7), ref(bitmap)));
- thread t_8(std::bind(&Scene::fill_map, this, height, width, int(height / 8 * 7), height, ref(bitmap)));
- //fill_map(height, width, 0, height, bitmap);
- t_1.join();
- t_2.join();
- t_3.join();
- t_4.join();
- t_5.join();
- t_6.join();
- t_7.join();
- t_8.join();
- SaveBMP(filename.c_str(), bitmap, width, height);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement