Change nalgebra types in public API to arrays

This commit is contained in:
Layl 2019-05-12 20:58:11 +02:00
parent f9a5d92eab
commit dbd69b6f57
2 changed files with 14 additions and 13 deletions

View File

@ -292,8 +292,8 @@ pub unsafe fn genTangSpace<I: Geometry>(
let mut tang = Vector3::new((*pTSpace).vOs.x, (*pTSpace).vOs.y, (*pTSpace).vOs.z); let mut tang = Vector3::new((*pTSpace).vOs.x, (*pTSpace).vOs.y, (*pTSpace).vOs.z);
let mut bitang = Vector3::new((*pTSpace).vOt.x, (*pTSpace).vOt.y, (*pTSpace).vOt.z); let mut bitang = Vector3::new((*pTSpace).vOt.x, (*pTSpace).vOt.y, (*pTSpace).vOt.z);
geometry.set_tangent( geometry.set_tangent(
tang, tang.into(),
bitang, bitang.into(),
(*pTSpace).fMagS, (*pTSpace).fMagS,
(*pTSpace).fMagT, (*pTSpace).fMagT,
(*pTSpace).bOrient, (*pTSpace).bOrient,

View File

@ -1,6 +1,6 @@
mod generated; mod generated;
use nalgebra::{Point2, Point3, Vector3, Vector4}; use nalgebra::{Vector2, Vector3};
/// The interface by which mikktspace interacts with your geometry. /// The interface by which mikktspace interacts with your geometry.
pub trait Geometry { pub trait Geometry {
@ -11,19 +11,19 @@ pub trait Geometry {
fn num_vertices_of_face(&self, face: usize) -> usize; fn num_vertices_of_face(&self, face: usize) -> usize;
/// Returns the position of a vertex. /// Returns the position of a vertex.
fn position(&self, face: usize, vert: usize) -> Point3<f32>; fn position(&self, face: usize, vert: usize) -> [f32; 3];
/// Returns the normal of a vertex. /// Returns the normal of a vertex.
fn normal(&self, face: usize, vert: usize) -> Vector3<f32>; fn normal(&self, face: usize, vert: usize) -> [f32; 3];
/// Returns the texture coordinate of a vertex. /// Returns the texture coordinate of a vertex.
fn tex_coord(&self, face: usize, vert: usize) -> Point2<f32>; fn tex_coord(&self, face: usize, vert: usize) -> [f32; 2];
/// Sets a vertex' generated tangent. /// Sets a vertex' generated tangent.
fn set_tangent( fn set_tangent(
&mut self, &mut self,
tangent: Vector3<f32>, tangent: [f32; 3],
_bi_tangent: Vector3<f32>, _bi_tangent: [f32; 3],
_f_mag_s: f32, _f_mag_s: f32,
_f_mag_t: f32, _f_mag_t: f32,
bi_tangent_preserves_orientation: bool, bi_tangent_preserves_orientation: bool,
@ -35,13 +35,13 @@ pub trait Geometry {
} else { } else {
-1.0 -1.0
}; };
self.set_tangent_encoded(tangent.insert_row(3, sign), face, vert); self.set_tangent_encoded([tangent[0], tangent[1], tangent[2], sign], face, vert);
} }
/// Sets a vertex' generated tangent with the bi-tangent encoded as the W component in the /// Sets a vertex' generated tangent with the bi-tangent encoded as the W component in the
/// tangent. The W component marks if the bi-tangent is flipped. This will only be called if /// tangent. The W component marks if the bi-tangent is flipped. This will only be called if
/// `set_tangent` is not implemented. /// `set_tangent` is not implemented.
fn set_tangent_encoded(&mut self, _tangent: Vector4<f32>, _face: usize, _vert: usize) {} fn set_tangent_encoded(&mut self, _tangent: [f32; 4], _face: usize, _vert: usize) {}
} }
/// Default (recommended) Angular Threshold is 180 degrees, which means threshold disabled. /// Default (recommended) Angular Threshold is 180 degrees, which means threshold disabled.
@ -51,17 +51,18 @@ pub fn generate_tangents_default<I: Geometry>(geometry: &mut I) -> bool {
fn get_position<I: Geometry>(geometry: &mut I, index: usize) -> Vector3<f32> { fn get_position<I: Geometry>(geometry: &mut I, index: usize) -> Vector3<f32> {
let (face, vert) = index_to_face_vert(index); let (face, vert) = index_to_face_vert(index);
geometry.position(face, vert).coords geometry.position(face, vert).into()
} }
fn get_tex_coord<I: Geometry>(geometry: &mut I, index: usize) -> Vector3<f32> { fn get_tex_coord<I: Geometry>(geometry: &mut I, index: usize) -> Vector3<f32> {
let (face, vert) = index_to_face_vert(index); let (face, vert) = index_to_face_vert(index);
geometry.tex_coord(face, vert).coords.insert_row(2, 1.0) let tex_coord: Vector2<f32> = geometry.tex_coord(face, vert).into();
tex_coord.insert_row(2, 1.0)
} }
fn get_normal<I: Geometry>(geometry: &mut I, index: usize) -> Vector3<f32> { fn get_normal<I: Geometry>(geometry: &mut I, index: usize) -> Vector3<f32> {
let (face, vert) = index_to_face_vert(index); let (face, vert) = index_to_face_vert(index);
geometry.normal(face, vert) geometry.normal(face, vert).into()
} }
fn index_to_face_vert(index: usize) -> (usize, usize) { fn index_to_face_vert(index: usize) -> (usize, usize) {