writing normals to IQM, but they're backwards
parent
e23bf0af59
commit
ce8f114998
47
src/main.rs
47
src/main.rs
|
@ -59,9 +59,9 @@ fn main () {
|
|||
let pos_slice = &buffer [pos_offset..(pos_offset + pos.count () * 4 * 3)];
|
||||
|
||||
let norm = prim.get (&gltf::Semantic::Normals).unwrap ();
|
||||
let pos_view = pos.view ().unwrap ();
|
||||
let pos_offset = pos.offset () + pos_view.offset ();
|
||||
let pos_slice = &buffer [pos_offset..(pos_offset + pos.count () * 4 * 3)];
|
||||
let norm_view = norm.view ().unwrap ();
|
||||
let norm_offset = norm.offset () + norm_view.offset ();
|
||||
let norm_slice = &buffer [norm_offset..(norm_offset + norm.count () * 4 * 3)];
|
||||
|
||||
let first_vertex = vertexes.len ();
|
||||
|
||||
|
@ -95,6 +95,13 @@ fn main () {
|
|||
pos_slice [i * 4 + 3],
|
||||
]);
|
||||
|
||||
let read_norm_coord = |i| f32::from_le_bytes ([
|
||||
norm_slice [i * 4 + 0],
|
||||
norm_slice [i * 4 + 1],
|
||||
norm_slice [i * 4 + 2],
|
||||
norm_slice [i * 4 + 3],
|
||||
]);
|
||||
|
||||
let read_pos = move |i| {
|
||||
let i = usize::try_from (i).unwrap ();
|
||||
m.transform_point3 (Vec3::new (
|
||||
|
@ -104,6 +111,15 @@ fn main () {
|
|||
))
|
||||
};
|
||||
|
||||
let read_norm = move |i| {
|
||||
let i = usize::try_from (i).unwrap ();
|
||||
m.transform_vector3 (Vec3::new (
|
||||
read_norm_coord (i * 3 + 0),
|
||||
read_norm_coord (i * 3 + 1),
|
||||
read_norm_coord (i * 3 + 2),
|
||||
))
|
||||
};
|
||||
|
||||
let verts = [
|
||||
read_pos (idxs [0]),
|
||||
read_pos (idxs [2]),
|
||||
|
@ -117,8 +133,14 @@ fn main () {
|
|||
tri_start + 2,
|
||||
]);
|
||||
|
||||
for v in verts {
|
||||
vertexes.push (v.to_array ());
|
||||
for i in [idxs [0], idxs [2], idxs [1]] {
|
||||
let pos = read_pos (i);
|
||||
let norm = read_norm (i);
|
||||
|
||||
vertexes.push (iqm::Vertex {
|
||||
position: pos.to_array (),
|
||||
normal: norm.to_array (),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -242,14 +264,14 @@ fn main () {
|
|||
|
||||
// Vertex position
|
||||
|
||||
for t in &vertexes {
|
||||
for x in t {
|
||||
f.write_all (&(f32::to_le_bytes (*x))).unwrap ();
|
||||
for v in &vertexes {
|
||||
for x in v.position {
|
||||
f.write_all (&(f32::to_le_bytes (x))).unwrap ();
|
||||
}
|
||||
}
|
||||
|
||||
for t in &vertexes {
|
||||
for x in [0.0, 0.0, 1.0] {
|
||||
for v in &vertexes {
|
||||
for x in v.normal {
|
||||
f.write_all (&(f32::to_le_bytes (x))).unwrap ();
|
||||
}
|
||||
}
|
||||
|
@ -294,7 +316,8 @@ mod iqm {
|
|||
vertex: [u32; 3],
|
||||
}
|
||||
|
||||
struct Vertex {
|
||||
position: [f32; 3],
|
||||
pub struct Vertex {
|
||||
pub position: [f32; 3],
|
||||
pub normal: [f32; 3],
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue