Add a `translate` method to 3D transforms

This commit is contained in:
Patrick Walton 2019-07-11 14:57:51 -07:00
parent bcac119324
commit 3f91206d57
3 changed files with 10 additions and 11 deletions

View File

@ -155,13 +155,10 @@ impl CameraTransform3D {
pub fn to_transform(&self) -> Transform4F { pub fn to_transform(&self) -> Transform4F {
let mut transform = Transform4F::from_rotation(self.yaw, self.pitch, 0.0); let mut transform = Transform4F::from_rotation(self.yaw, self.pitch, 0.0);
transform *= Transform4F::from_uniform_scale(2.0 * self.scale); transform *= Transform4F::from_uniform_scale(2.0 * self.scale);
transform *=
Transform4F::from_translation(self.position * Vector4F::new(-1.0, -1.0, -1.0, 1.0));
// Flip Y. // Flip Y, and translate.
transform *= Transform4F::from_scale(Vector4F::new(1.0, -1.0, 1.0, 1.0)); let offset = self.position * Vector4F::new(-1.0, -1.0, -1.0, 1.0);
transform * Transform4F::from_scale(Vector4F::new(1.0, -1.0, 1.0, 1.0)).translate(offset)
transform
} }
} }

View File

@ -220,6 +220,11 @@ impl Transform4F {
} }
} }
#[inline]
pub fn translate(&self, translation: Vector4F) -> Transform4F {
Transform4F::from_translation(translation) * *self
}
#[inline] #[inline]
pub fn transform_point(&self, point: Vector4F) -> Vector4F { pub fn transform_point(&self, point: Vector4F) -> Vector4F {
let term0 = self.c0 * F32x4::splat(point.x()); let term0 = self.c0 * F32x4::splat(point.x());

View File

@ -471,11 +471,8 @@ where
fn tile_transform(&self) -> Transform4F { fn tile_transform(&self) -> Transform4F {
let draw_viewport = self.draw_viewport().size().to_f32(); let draw_viewport = self.draw_viewport().size().to_f32();
let scale = F32x2::new(2.0 / draw_viewport.x(), -2.0 / draw_viewport.y()); let scale = F32x2::new(2.0 / draw_viewport.x(), -2.0 / draw_viewport.y());
let transform = Transform4F::from_scale(Vector4F::new(2.0 / draw_viewport.x(), let scale = Vector4F::new(2.0 / draw_viewport.x(), -2.0 / draw_viewport.y(), 1.0, 1.0);
-2.0 / draw_viewport.y(), Transform4F::from_scale(scale).translate(Vector4F::new(-1.0, 1.0, 0.0, 1.0))
1.0,
1.0));
Transform4F::from_translation(Vector4F::new(-1.0, 1.0, 0.0, 1.0)) * transform
} }
fn draw_alpha_tiles(&mut self, count: u32) { fn draw_alpha_tiles(&mut self, count: u32) {