Skip to content

Commit

Permalink
Decrement index number on parsing
Browse files Browse the repository at this point in the history
Wavefront OBJ uses 1-based index, but rust uses 0-based index number

1.  Decrement index number on parsing
2.  Update testcodes
  • Loading branch information
simnalamburt committed Feb 21, 2015
1 parent 2999583 commit ad3aafd
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 53 deletions.
15 changes: 10 additions & 5 deletions src/raw/object.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
//! Parses `.obj` format which stores 3D mesh data

use std::str::FromStr;
use std::io::BufRead;
use std::collections::{HashMap, VecMap};
use std::simd::f32x4;
Expand Down Expand Up @@ -94,6 +95,8 @@ pub fn parse_obj<T: BufRead>(input: T) -> ObjResult<RawObj> {
"p" => unimplemented!(),
"l" => unimplemented!(),
"f" => {
use std::num::Int;

if args.len() < 3 { unimplemented!() }
let mut args = args.iter();
let first = args.next().unwrap();
Expand Down Expand Up @@ -121,11 +124,13 @@ pub fn parse_obj<T: BufRead>(input: T) -> ObjResult<RawObj> {
}

polygons.push(m! {
P [p] => (n(p))
PT [p, t] => (n(p), n(t))
PN [p, "", u] => (n(p), n(u))
PTN [p, t, u] => (n(p), n(t), n(u))
P [p] => (i(p))
PT [p, t] => (i(p), i(t))
PN [p, "", u] => (i(p), i(u))
PTN [p, t, u] => (i(p), i(t), i(u))
});

fn i<T: FromStr + Int>(input: &str) -> T { n::<T>(input) - Int::one() }
}
"curv" => unimplemented!(),
"curv2" => unimplemented!(),
Expand Down Expand Up @@ -184,7 +189,7 @@ pub fn parse_obj<T: BufRead>(input: T) -> ObjResult<RawObj> {
_ => error!(UnexpectedStatement, "Received unknown statement")
}

fn n<T: ::std::str::FromStr>(input: &str) -> T {
fn n<T: FromStr>(input: &str) -> T {
match input.parse() {
Ok(number) => number,
Err(_)=> unimplemented!()
Expand Down
3 changes: 3 additions & 0 deletions tests/obj.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,7 @@ fn dome() {
assert_eq!(obj.name, Some("Dome".to_string()));
assert_eq!(obj.vertices[0], v!(-0.382683, 0.923880, 0.000000));
assert_eq!(obj.vertices[1], v!(-0.707107, 0.707107, 0.000000));
assert_eq!(obj.indices[0], 3);
assert_eq!(obj.indices[1], 2);
assert_eq!(obj.indices[2], 6);
}
96 changes: 48 additions & 48 deletions tests/raw-obj.rs
Original file line number Diff line number Diff line change
Expand Up @@ -147,12 +147,12 @@ fn cube() {

test! {
obj.polygons {
PT vec![ (1, 1), (2, 2), (3, 3), (4, 4) ]
PT vec![ (5, 5), (8, 6), (7, 7), (6, 8) ]
PT vec![ (1, 9), (5, 10), (6, 8), (2, 2) ]
PT vec![ (2, 2), (6, 8), (7, 7), (3, 3) ]
PT vec![ (3, 3), (7, 7), (8, 11), (4, 12) ]
PT vec![ (5, 5), (1, 13), (4, 14), (8, 6) ]
PT vec![ (0, 0), (1, 1), (2, 2), (3, 3) ]
PT vec![ (4, 4), (7, 5), (6, 6), (5, 7) ]
PT vec![ (0, 8), (4, 9), (5, 7), (1, 1) ]
PT vec![ (1, 1), (5, 7), (6, 6), (2, 2) ]
PT vec![ (2, 2), (6, 6), (7, 10), (3, 11) ]
PT vec![ (4, 4), (0, 12), (3, 13), (7, 5) ]
}
};

Expand Down Expand Up @@ -234,68 +234,68 @@ fn dome() {

test! {
obj.polygons {
P vec!(4, 3, 7)
P vec!(3, 2, 6)
P vec!(1, 5, 6)
P vec!(7, 11, 12)
P vec!(2, 1, 5)
P vec!(0, 4, 5)
P vec!(6, 10, 11)
P vec!(5, 9, 10)
P vec!(11, 16, 17)
P vec!(11, 10, 15)
P vec!(4, 8, 9)
P vec!(10, 15, 16)
P vec!(10, 9, 14)
P vec!(16, 20, 21)
P vec!(9, 8, 13)
P vec!(15, 19, 20)
P vec!(14, 18, 19)
P vec!(20, 24, 25)
P vec!(20, 19, 23)
P vec!(18, 22, 23)
P vec!(24, 28, 29)
P vec!(24, 23, 27)
P vec!(13, 17, 18)
P vec!(19, 23, 24)
P vec!(19, 18, 22)
P vec!(17, 21, 22)
P vec!(23, 27, 28)
P vec!(23, 22, 26)
P vec!(28, 32, 33)
P vec!(28, 27, 31)
P vec!(22, 21, 25)
P vec!(27, 31, 32)
P vec!(27, 26, 30)
P vec!(1, 13, 5)
P vec!(5, 13, 9)
P vec!(9, 13, 14)
P vec!(14, 13, 18)
P vec!(18, 13, 22)
P vec!(22, 13, 26)
P vec!(26, 13, 30)
P vec!(32, 3, 4)
P vec!(26, 25, 29)
P vec!(0, 12, 4)
P vec!(4, 12, 8)
P vec!(8, 12, 13)
P vec!(13, 12, 17)
P vec!(17, 12, 21)
P vec!(21, 12, 25)
P vec!(25, 12, 29)
P vec!(31, 2, 3)
P vec!(30, 1, 2)
P vec!(30, 13, 1)
P vec!(8, 4, 7)
P vec!(29, 0, 1)
P vec!(29, 12, 0)
P vec!(7, 3, 6)
P vec!(2, 1, 6)
P vec!(8, 7, 12)
P vec!(6, 2, 5)
P vec!(1, 0, 5)
P vec!(7, 6, 11)
P vec!(6, 5, 10)
P vec!(12, 11, 17)
P vec!(16, 11, 15)
P vec!(5, 4, 9)
P vec!(11, 10, 16)
P vec!(15, 10, 14)
P vec!(17, 16, 21)
P vec!(14, 9, 13)
P vec!(16, 15, 20)
P vec!(15, 14, 19)
P vec!(21, 20, 25)
P vec!(24, 20, 23)
P vec!(19, 18, 23)
P vec!(25, 24, 29)
P vec!(28, 24, 27)
P vec!(14, 13, 18)
P vec!(20, 19, 24)
P vec!(23, 19, 22)
P vec!(18, 17, 22)
P vec!(24, 23, 28)
P vec!(27, 23, 26)
P vec!(29, 28, 33)
P vec!(32, 28, 31)
P vec!(26, 22, 25)
P vec!(28, 27, 32)
P vec!(31, 27, 30)
P vec!(33, 32, 4)
P vec!(30, 26, 29)
P vec!(32, 31, 3)
P vec!(31, 30, 2)
P vec!(33, 4, 8)
P vec!(29, 33, 25)
P vec!(12, 17, 21)
P vec!(12, 33, 8)
P vec!(33, 21, 25)
P vec!(21, 33, 12)
P vec!(30, 29, 1)
P vec!(32, 3, 7)
P vec!(28, 32, 24)
P vec!(11, 16, 20)
P vec!(11, 32, 7)
P vec!(32, 20, 24)
P vec!(20, 32, 11)
}
};

Expand Down

0 comments on commit ad3aafd

Please sign in to comment.