Fix tree creation
This commit is contained in:
parent
5317bd895b
commit
f44716e2c4
4 changed files with 38 additions and 15 deletions
15
.vscode/launch.json
vendored
15
.vscode/launch.json
vendored
|
@ -7,23 +7,20 @@
|
||||||
{
|
{
|
||||||
"type": "lldb",
|
"type": "lldb",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "Debug",
|
"name": "Debug executable 'rustray'",
|
||||||
"cargo": {
|
"cargo": {
|
||||||
"args": [
|
"args": [
|
||||||
"build"
|
"build",
|
||||||
|
"--bin=rustray",
|
||||||
|
"--package=rustray"
|
||||||
],
|
],
|
||||||
"filter": {
|
"filter": {
|
||||||
"name": "rust_opengl",
|
"name": "rustray",
|
||||||
"kind": "bin"
|
"kind": "bin"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"linux": {
|
|
||||||
"env": {
|
|
||||||
"RUST_BACKTRACE": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"args": [],
|
"args": [],
|
||||||
"cwd": "${workspaceRoot}"
|
"cwd": "${workspaceFolder}"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -8,3 +8,4 @@ authors = ["hodasemi <michaelh.95@t-online.de>"]
|
||||||
cgmath = "*"
|
cgmath = "*"
|
||||||
utilities = { git = "https://gitlab.com/hodasemi/utilities.git" }
|
utilities = { git = "https://gitlab.com/hodasemi/utilities.git" }
|
||||||
image = "*"
|
image = "*"
|
||||||
|
rand = "*"
|
||||||
|
|
|
@ -57,7 +57,21 @@ impl<'a> AccelerationData<'a> {
|
||||||
|
|
||||||
discovered[v] = true;
|
discovered[v] = true;
|
||||||
|
|
||||||
println!("{}\n{:?}", v, self.data[v]);
|
print_aabb(v, self.data[v]);
|
||||||
|
|
||||||
|
let left_child = self.data[v].left_child;
|
||||||
|
if left_child != -1 {
|
||||||
|
if !discovered[left_child as usize] {
|
||||||
|
stack.push(left_child as usize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let right_child = self.data[v].right_child;
|
||||||
|
if right_child != -1 {
|
||||||
|
if !discovered[right_child as usize] {
|
||||||
|
stack.push(right_child as usize);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,12 +136,12 @@ impl<'a> AccelerationData<'a> {
|
||||||
let next_level_count = (current_level_count as f32 / 2.0).ceil() as u32;
|
let next_level_count = (current_level_count as f32 / 2.0).ceil() as u32;
|
||||||
let next_level_start = start_index + current_level_count;
|
let next_level_start = start_index + current_level_count;
|
||||||
|
|
||||||
for i in next_level_start..(next_level_start + next_level_count) {
|
for i in 0..next_level_count {
|
||||||
let mut aabb = AABB::new();
|
let mut aabb = AABB::new();
|
||||||
|
|
||||||
let index = (start_index + i * 2) as usize;
|
let index = (start_index + i * 2) as usize;
|
||||||
|
|
||||||
if i == (next_level_count + next_level_start - 1) && odd {
|
if i == (next_level_count - 1) && odd {
|
||||||
aabb.bounds[0] = data[index].bounds[0];
|
aabb.bounds[0] = data[index].bounds[0];
|
||||||
aabb.bounds[1] = data[index].bounds[1];
|
aabb.bounds[1] = data[index].bounds[1];
|
||||||
aabb.left_child = index as isize;
|
aabb.left_child = index as isize;
|
||||||
|
@ -142,7 +156,7 @@ impl<'a> AccelerationData<'a> {
|
||||||
data[0] = aabb;
|
data[0] = aabb;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
data[i as usize] = aabb;
|
data[(next_level_start + i) as usize] = aabb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,3 +177,7 @@ impl<'a> AccelerationData<'a> {
|
||||||
Vector3::new(v0.x.max(v1.x), v0.y.max(v1.y), v0.z.max(v1.z))
|
Vector3::new(v0.x.max(v1.x), v0.y.max(v1.y), v0.z.max(v1.z))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn print_aabb(index: usize, aabb: AABB) {
|
||||||
|
println!("({}):\t{:?}", index, aabb);
|
||||||
|
}
|
||||||
|
|
11
src/main.rs
11
src/main.rs
|
@ -1,5 +1,6 @@
|
||||||
use cgmath::{vec2, vec3, Vector3};
|
use cgmath::{vec2, vec3, Vector3};
|
||||||
|
|
||||||
|
use crate::rand::Rng;
|
||||||
use image::ImageBuffer;
|
use image::ImageBuffer;
|
||||||
use utilities::prelude::*;
|
use utilities::prelude::*;
|
||||||
|
|
||||||
|
@ -20,7 +21,11 @@ fn generate_grid(width: u32, height: u32) -> Vec<Triangle> {
|
||||||
|
|
||||||
for y in 0..height {
|
for y in 0..height {
|
||||||
for x in 0..width {
|
for x in 0..width {
|
||||||
let color = vec3(1.0, 0.0, 0.0);
|
let color = vec3(
|
||||||
|
rand::thread_rng().gen_range(0.0, 1.0),
|
||||||
|
rand::thread_rng().gen_range(0.0, 1.0),
|
||||||
|
rand::thread_rng().gen_range(0.0, 1.0),
|
||||||
|
);
|
||||||
|
|
||||||
grid.push(Triangle::new(
|
grid.push(Triangle::new(
|
||||||
Vertex::new(vec3(x as f32, y as f32, 0.0), vec2(0.0, 0.0)),
|
Vertex::new(vec3(x as f32, y as f32, 0.0), vec2(0.0, 0.0)),
|
||||||
|
@ -42,7 +47,7 @@ fn generate_grid(width: u32, height: u32) -> Vec<Triangle> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let input_data = generate_grid(3, 3);
|
let input_data = generate_grid(5, 5);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
let camera = Camera::new(
|
let camera = Camera::new(
|
||||||
|
@ -74,6 +79,8 @@ fn debug_raytracer_camera(dim_x: u32, dim_y: u32, camera: &Camera, data: &[Trian
|
||||||
|
|
||||||
let acceleration_data = AccelerationData::create_tree(data, 8);
|
let acceleration_data = AccelerationData::create_tree(data, 8);
|
||||||
|
|
||||||
|
acceleration_data.print_tree();
|
||||||
|
|
||||||
for (x, y, pixel) in imgbuf.enumerate_pixels_mut() {
|
for (x, y, pixel) in imgbuf.enumerate_pixels_mut() {
|
||||||
let ray = camera.primary_ray(x, dim_y - y, dim_x, dim_y);
|
let ray = camera.primary_ray(x, dim_y - y, dim_x, dim_y);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue