1 /* Copyright Jukka Jyl�nki
2
3    Licensed under the Apache License, Version 2.0 (the "License");
4    you may not use this file except in compliance with the License.
5    You may obtain a copy of the License at
6
7        http://www.apache.org/licenses/LICENSE-2.0
8
9    Unless required by applicable law or agreed to in writing, software
10    distributed under the License is distributed on an "AS IS" BASIS,
11    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12    See the License for the specific language governing permissions and
13    limitations under the License. */
14
15 /** @file CoordinateAxisConvention.h
16         @author Jukka Jyl�nki
17         @brief */
18 #pragma once
19
20 #include "float3x3.h"
21 #include "float3x4.h"
22 #include "float4x4.h"
23 #include "float3.h"
24 /*
25 struct PositiveX
26 {
27         static float3 Pick(const float3x3 &m) { return m.Column(0); }
28         static float3 Pick(const float3x4 &m) { return m.Column(0); }
29         static float3 Pick(const float4x4 &m) { return m.Column3(0); }
30 };
31
32 struct NegativeX
33 {
34         static float3 Pick(const float3x3 &m) { return -m.Column(0); }
35         static float3 Pick(const float3x4 &m) { return -m.Column(0); }
36         static float3 Pick(const float4x4 &m) { return -m.Column3(0); }
37 };
38
39 struct PositiveY
40 {
41         static float3 Pick(const float3x3 &m) { return m.Column(1); }
42         static float3 Pick(const float3x4 &m) { return m.Column(1); }
43         static float3 Pick(const float4x4 &m) { return m.Column3(1); }
44 };
45
46 struct NegativeY
47 {
48         static float3 Pick(const float3x3 &m) { return -m.Column(1); }
49         static float3 Pick(const float3x4 &m) { return -m.Column(1); }
50         static float3 Pick(const float4x4 &m) { return -m.Column3(1); }
51 };
52
53 struct PositiveZ
54 {
55         static float3 Pick(const float3x3 &m) { return m.Column(2); }
56         static float3 Pick(const float3x4 &m) { return m.Column(2); }
57         static float3 Pick(const float4x4 &m) { return m.Column3(2); }
58 };
59
60 struct NegativeZ
61 {
62         static float3 Pick(const float3x3 &m) { return -m.Column(2); }
63         static float3 Pick(const float3x4 &m) { return -m.Column(2); }
64         static float3 Pick(const float4x4 &m) { return -m.Column3(2); }
65 };
66
67 /// For more information about coordinate axis conventions, and handedness,
68 /// see http://msdn.microsoft.com/en-us/library/bb204853(VS.85).aspx .
69 template<typename ForwardAxis, typename RightAxis, typename UpAxis>
70 struct CoordinateAxisConvention
71 {
72         template<typename Matrix> static float3 Right(const Matrix &m) { return RightAxis::Pick(m); }
73         template<typename Matrix> static float3 Up(const Matrix &m) { return UpAxis::Pick(m); }
74         template<typename Matrix> static float3 Forward(const Matrix &m) { return ForwardAxis::Pick(m); }
75 };
76
77 /// This is the default coordinate axis convention used by the math classes. This convention
78 /// is a left-handed coordinate system.
79 typedef CoordinateAxisConvention<PositiveX, PositiveY, PositiveZ> XposRight_YposUp_ZposForward;
80 */

Go back to previous page