Begin implementing obj rotation
This commit is contained in:
parent
637abb06ad
commit
fd9cbea2f6
1 changed files with 45 additions and 31 deletions
76
src/main.rs
76
src/main.rs
|
@ -290,24 +290,38 @@ fn from_obj(path: &str) -> HittableList {
|
||||||
let material = Arc::new(Metal::new(&Color::new(0.7, 0.6, 0.5), 0.0));
|
let material = Arc::new(Metal::new(&Color::new(0.7, 0.6, 0.5), 0.0));
|
||||||
//let material = Arc::new(Rainbow::new());
|
//let material = Arc::new(Rainbow::new());
|
||||||
|
|
||||||
|
let rotate_obj = 0; // rotate clockwise, 0: 0, 1: 90, 2: 180, 3: 270
|
||||||
|
|
||||||
let cornell_box = tobj::load_obj(path, &tobj::OFFLINE_RENDERING_LOAD_OPTIONS);
|
let cornell_box = tobj::load_obj(path, &tobj::OFFLINE_RENDERING_LOAD_OPTIONS);
|
||||||
let (models, materials) = cornell_box.expect("Failed to load OBJ file");
|
let (models, materials) = cornell_box.expect("Failed to load OBJ file");
|
||||||
let materials = materials.expect("Failed to load MTL file");
|
let materials = materials.expect("Failed to load MTL file");
|
||||||
|
|
||||||
|
let mut new_x = 0;
|
||||||
|
let mut new_y = 1;
|
||||||
|
let mut new_z = 2;
|
||||||
|
|
||||||
|
match rotate_obj {
|
||||||
|
1 => {
|
||||||
|
new_x = 0;
|
||||||
|
new_y = 2;
|
||||||
|
new_z = 1;
|
||||||
|
},
|
||||||
|
2 => {
|
||||||
|
new_x = 0;
|
||||||
|
new_y = 2;
|
||||||
|
new_z = 1;
|
||||||
|
},
|
||||||
|
3 => {
|
||||||
|
new_x = 0;
|
||||||
|
new_y = 2;
|
||||||
|
new_z = 1;
|
||||||
|
},
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
|
||||||
for (i, m) in models.iter().enumerate() {
|
for (i, m) in models.iter().enumerate() {
|
||||||
let mesh = &m.mesh;
|
let mesh = &m.mesh;
|
||||||
|
|
||||||
/* Mesh vector lengths
|
|
||||||
println!("positions: {}", mesh.positions.len());
|
|
||||||
println!("vertex_color: {}", mesh.vertex_color.len());
|
|
||||||
println!("normals: {}", mesh.normals.len());
|
|
||||||
println!("texcoords: {}", mesh.texcoords.len());
|
|
||||||
println!("indices: {}", mesh.indices.len());
|
|
||||||
println!("face_arities: {}", mesh.face_arities.len());
|
|
||||||
println!("texcoord_indices: {}", mesh.texcoord_indices.len());
|
|
||||||
println!("normal_indices: {}", mesh.normal_indices.len());
|
|
||||||
*/
|
|
||||||
|
|
||||||
let mut next_face = 0;
|
let mut next_face = 0;
|
||||||
for f in 0..mesh.face_arities.len() {
|
for f in 0..mesh.face_arities.len() {
|
||||||
let end = next_face + mesh.face_arities[f] as usize;
|
let end = next_face + mesh.face_arities[f] as usize;
|
||||||
|
@ -318,25 +332,25 @@ fn from_obj(path: &str) -> HittableList {
|
||||||
|
|
||||||
for v in 0..mesh.indices.len() / 3 {
|
for v in 0..mesh.indices.len() / 3 {
|
||||||
let index_a = mesh.indices[3 * v] as usize;
|
let index_a = mesh.indices[3 * v] as usize;
|
||||||
let index_b = mesh.indices[3 * v + 2] as usize;
|
let index_b = mesh.indices[3 * v + 1] as usize;
|
||||||
let index_c = mesh.indices[3 * v + 1] as usize;
|
let index_c = mesh.indices[3 * v + 2] as usize;
|
||||||
let index_normal_a = mesh.normal_indices[3 * v] as usize;
|
let index_normal_a = mesh.normal_indices[3 * v] as usize;
|
||||||
let index_normal_b = mesh.normal_indices[3 * v + 1] as usize;
|
let index_normal_b = mesh.normal_indices[3 * v + 1] as usize;
|
||||||
let index_normal_c = mesh.normal_indices[3 * v + 2] as usize;
|
let index_normal_c = mesh.normal_indices[3 * v + 2] as usize;
|
||||||
|
|
||||||
let normal_avg = Vec3::unit_vector(
|
let normal_avg = Vec3::unit_vector(
|
||||||
Vec3::new(
|
Vec3::new(
|
||||||
mesh.positions[3 * index_normal_a] as f64,
|
mesh.positions[3 * index_normal_a + new_x] as f64,
|
||||||
mesh.positions[3 * index_normal_a + 2] as f64,
|
mesh.positions[3 * index_normal_a + new_y] as f64,
|
||||||
mesh.positions[3 * index_normal_a + 1] as f64,
|
mesh.positions[3 * index_normal_a + new_z] as f64,
|
||||||
) + Vec3::new(
|
) + Vec3::new(
|
||||||
mesh.positions[3 * index_normal_b] as f64,
|
mesh.positions[3 * index_normal_b + new_x] as f64,
|
||||||
mesh.positions[3 * index_normal_b + 2] as f64,
|
mesh.positions[3 * index_normal_b + new_y] as f64,
|
||||||
mesh.positions[3 * index_normal_b + 1] as f64,
|
mesh.positions[3 * index_normal_b + new_z] as f64,
|
||||||
) + Vec3::new(
|
) + Vec3::new(
|
||||||
mesh.positions[3 * index_normal_c] as f64,
|
mesh.positions[3 * index_normal_c + new_x] as f64,
|
||||||
mesh.positions[3 * index_normal_c + 2] as f64,
|
mesh.positions[3 * index_normal_c + new_y] as f64,
|
||||||
mesh.positions[3 * index_normal_c + 1] as f64,
|
mesh.positions[3 * index_normal_c + new_z] as f64,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -355,19 +369,19 @@ fn from_obj(path: &str) -> HittableList {
|
||||||
|
|
||||||
world.add(Box::<Triangle>::new(Triangle::new(
|
world.add(Box::<Triangle>::new(Triangle::new(
|
||||||
Point3::new(
|
Point3::new(
|
||||||
mesh.positions[3 * index_a] as f64,
|
mesh.positions[3 * index_a + new_x] as f64,
|
||||||
mesh.positions[3 * index_a + 2] as f64,
|
mesh.positions[3 * index_a + new_y] as f64,
|
||||||
mesh.positions[3 * index_a + 1] as f64,
|
mesh.positions[3 * index_a + new_z] as f64,
|
||||||
),
|
),
|
||||||
Point3::new(
|
Point3::new(
|
||||||
mesh.positions[3 * index_b] as f64,
|
mesh.positions[3 * index_b + new_x] as f64,
|
||||||
mesh.positions[3 * index_b + 2] as f64,
|
mesh.positions[3 * index_b + new_y] as f64,
|
||||||
mesh.positions[3 * index_b + 1] as f64,
|
mesh.positions[3 * index_b + new_z] as f64,
|
||||||
),
|
),
|
||||||
Point3::new(
|
Point3::new(
|
||||||
mesh.positions[3 * index_c] as f64,
|
mesh.positions[3 * index_c + new_x] as f64,
|
||||||
mesh.positions[3 * index_c + 2] as f64,
|
mesh.positions[3 * index_c + new_y] as f64,
|
||||||
mesh.positions[3 * index_c + 1] as f64,
|
mesh.positions[3 * index_c + new_z] as f64,
|
||||||
),
|
),
|
||||||
normal_avg,
|
normal_avg,
|
||||||
material.clone(),
|
material.clone(),
|
||||||
|
|
Loading…
Reference in a new issue