From 66a329c5913176015852fb1276aaa839c2965d7a Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Sun, 13 Oct 2013 11:00:51 +1100 Subject: [PATCH] Initial commit of transform module --- src/cgmath/transform.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/cgmath/transform.rs diff --git a/src/cgmath/transform.rs b/src/cgmath/transform.rs new file mode 100644 index 0000000..5e30dac --- /dev/null +++ b/src/cgmath/transform.rs @@ -0,0 +1,40 @@ +// Copyright 2013 The CGMath Developers. For a full listing of the authors, +// refer to the AUTHORS file at the top-level directory of this distribution. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +pub trait Transform { + fn transform_vec(&self, point: Point3) -> Point3; + fn transform_point(&self, point: Point3) -> Point3; + fn transform_ray(&self, ray: Ray3) -> Ray3; +} + +/// A homogeneous transformation matrix. +pub struct AffineMatrix3 { + mat: Mat4, +} + +/// A transformation in three dimensions consisting of a rotation, +/// displacement vector and scale amount. +pub struct Transform3 { + rot: R, + disp: Vec3, + scale: S, +} + +impl> Transform3 { + #[inline] + pub fn new(rot: R, disp: Vec3, scale: S) -> Transform3 { + Transform3 { rot: rot, disp: disp, scale: S } + } +}