Add a `translate` method to 3D transforms
This commit is contained in:
parent
bcac119324
commit
3f91206d57
|
@ -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
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue