diff options
author | Timo Lotterbach <timo.lotterbach@bmw-carit.de> | 2014-01-31 13:42:10 +0100 |
---|---|---|
committer | Timo Lotterbach <timo.lotterbach@bmw-carit.de> | 2014-01-31 13:42:10 +0100 |
commit | 11968937b90d4cf3f84edcb4bad1e7b84a6fb061 (patch) | |
tree | 890fbb1dbe7a02d103ae89ac5605bd5e256c13d3 /ivi-layermanagement-examples/EGLWLMockNavigation/src/IlmMatrix.cpp | |
parent | 70833645706d167b351e1b0f65bfe8ec3da1efe9 (diff) | |
download | wayland-ivi-extension-11968937b90d4cf3f84edcb4bad1e7b84a6fb061.tar.gz |
removed obsolete code and build scripts
- removed LayerSceneDescriptionExample
- removed LayerManagerUtils
- removed config project
- updated build system
Signed-off-by: Timo Lotterbach <timo.lotterbach@bmw-carit.de>
Diffstat (limited to 'ivi-layermanagement-examples/EGLWLMockNavigation/src/IlmMatrix.cpp')
-rw-r--r-- | ivi-layermanagement-examples/EGLWLMockNavigation/src/IlmMatrix.cpp | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/ivi-layermanagement-examples/EGLWLMockNavigation/src/IlmMatrix.cpp b/ivi-layermanagement-examples/EGLWLMockNavigation/src/IlmMatrix.cpp new file mode 100644 index 0000000..5e50b6c --- /dev/null +++ b/ivi-layermanagement-examples/EGLWLMockNavigation/src/IlmMatrix.cpp @@ -0,0 +1,257 @@ +/*************************************************************************** +* +* Copyright 2010,2011 BMW Car IT GmbH +* +* +* 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. +* +* This file incorporates work covered by the following copyright and +* permission notice: +* +* Oolong Engine for the iPhone / iPod touch +* Copyright (c) 2007-2008 Wolfgang Engel http://code.google.com/p/oolongengine/ +* +* This software is provided 'as-is', without any express or implied warranty. +* In no event will the authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, +* including commercial applications, and to alter it and redistribute it freely, +* subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that +* you wrote the original software. If you use this software in a product, an +* acknowledgment in the product documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented +* as being the original software. +* 3. This notice may not be removed or altered from any source distribution. +****************************************************************************/ +#include "IlmMatrix.h" +#include <math.h> + +#define ILM_PI 3.14159265 + +#define degToRad(deg) ((deg) * ILM_PI / 180.0f) +#define radToDeg(rad) ((rad) * 180.0f / ILM_PI) + +void IlmMatrixIdentity(IlmMatrix &mOut) +{ + mOut.f[0] = 1.0f; + mOut.f[1] = 0.0f; + mOut.f[2] = 0.0f; + mOut.f[3] = 0.0f; + + mOut.f[4] = 0.0f; + mOut.f[5] = 1.0f; + mOut.f[6] = 0.0f; + mOut.f[7] = 0.0f; + + mOut.f[8] = 0.0f; + mOut.f[9] = 0.0f; + mOut.f[10] = 1.0f; + mOut.f[11] = 0.0f; + + mOut.f[12] = 0.0f; + mOut.f[13] = 0.0f; + mOut.f[14] = 0.0f; + mOut.f[15] = 1.0f; +} + +void IlmMatrixMultiply(IlmMatrix &mOut, const IlmMatrix &mA, const IlmMatrix &mB) +{ + IlmMatrix mRet; + + mRet.f[0] = mA.f[0] * mB.f[0] + mA.f[1] * mB.f[4] + mA.f[2] * mB.f[8] + mA.f[3] * mB.f[12]; + mRet.f[1] = mA.f[0] * mB.f[1] + mA.f[1] * mB.f[5] + mA.f[2] * mB.f[9] + mA.f[3] * mB.f[13]; + mRet.f[2] = mA.f[0] * mB.f[2] + mA.f[1] * mB.f[6] + mA.f[2] * mB.f[10] + mA.f[3] * mB.f[14]; + mRet.f[3] = mA.f[0] * mB.f[3] + mA.f[1] * mB.f[7] + mA.f[2] * mB.f[11] + mA.f[3] * mB.f[15]; + + mRet.f[4] = mA.f[4] * mB.f[0] + mA.f[5] * mB.f[4] + mA.f[6] * mB.f[8] + mA.f[7] * mB.f[12]; + mRet.f[5] = mA.f[4] * mB.f[1] + mA.f[5] * mB.f[5] + mA.f[6] * mB.f[9] + mA.f[7] * mB.f[13]; + mRet.f[6] = mA.f[4] * mB.f[2] + mA.f[5] * mB.f[6] + mA.f[6] * mB.f[10] + mA.f[7] * mB.f[14]; + mRet.f[7] = mA.f[4] * mB.f[3] + mA.f[5] * mB.f[7] + mA.f[6] * mB.f[11] + mA.f[7] * mB.f[15]; + + mRet.f[8] = mA.f[8] * mB.f[0] + mA.f[9] * mB.f[4] + mA.f[10] * mB.f[8] + mA.f[11] * mB.f[12]; + mRet.f[9] = mA.f[8] * mB.f[1] + mA.f[9] * mB.f[5] + mA.f[10] * mB.f[9] + mA.f[11] * mB.f[13]; + mRet.f[10] = mA.f[8] * mB.f[2] + mA.f[9] * mB.f[6] + mA.f[10] * mB.f[10] + mA.f[11] * mB.f[14]; + mRet.f[11] = mA.f[8] * mB.f[3] + mA.f[9] * mB.f[7] + mA.f[10] * mB.f[11] + mA.f[11] * mB.f[15]; + + mRet.f[12] = mA.f[12] * mB.f[0] + mA.f[13] * mB.f[4] + mA.f[14] * mB.f[8] + mA.f[15] * mB.f[12]; + mRet.f[13] = mA.f[12] * mB.f[1] + mA.f[13] * mB.f[5] + mA.f[14] * mB.f[9] + mA.f[15] * mB.f[13]; + mRet.f[14] = mA.f[12] * mB.f[2] + mA.f[13] * mB.f[6] + mA.f[14] * mB.f[10] + mA.f[15] * mB.f[14]; + mRet.f[15] = mA.f[12] * mB.f[3] + mA.f[13] * mB.f[7] + mA.f[14] * mB.f[11] + mA.f[15] * mB.f[15]; + + mOut = mRet; +} + +void IlmMatrixTranslation(IlmMatrix &mOut, const float X, const float Y, const float Z) +{ + mOut.f[0] = 1.0f; + mOut.f[1] = 0.0f; + mOut.f[2] = 0.0f; + mOut.f[3] = 0.0f; + + mOut.f[4] = 0.0f; + mOut.f[5] = 1.0f; + mOut.f[6] = 0.0f; + mOut.f[7] = 0.0f; + + mOut.f[8] = 0.0f; + mOut.f[9] = 0.0f; + mOut.f[10] = 1.0f; + mOut.f[11] = 0.0f; + + mOut.f[12] = X; + mOut.f[13] = Y; + mOut.f[14] = Z; + mOut.f[15] = 1.0f; +} + +void IlmMatrixScaling(IlmMatrix &mOut, const float X, const float Y, const float Z) +{ + mOut.f[0] = X; + mOut.f[1] = 0.0f; + mOut.f[2] = 0.0f; + mOut.f[3] = 0.0f; + + mOut.f[4] = 0.0f; + mOut.f[5] = Y; + mOut.f[6] = 0.0f; + mOut.f[7] = 0.0f; + + mOut.f[8] = 0.0f; + mOut.f[9] = 0.0f; + mOut.f[10] = Z; + mOut.f[11] = 0.0f; + + mOut.f[12] = 0.0f; + mOut.f[13] = 0.0f; + mOut.f[14] = 0.0f; + mOut.f[15] = 1.0f; +} + +void IlmMatrixRotateX(IlmMatrix &mOut, const float angle) +{ + // Precompute cos and sin + float fCosine = (float)cos(degToRad(angle)); + float fSine = (float)sin(degToRad(angle)); + + // Create the trigonometric matrix corresponding to X Rotation + mOut.f[0] = 1.0f; + mOut.f[1] = 0.0f; + mOut.f[2] = 0.0f; + mOut.f[3] = 0.0f; + + mOut.f[4] = 0.0f; + mOut.f[5] = fCosine; + mOut.f[6] = -fSine; + mOut.f[7] = 0.0f; + + mOut.f[8] = 0.0f; + mOut.f[9] = fSine; + mOut.f[10] = fCosine; + mOut.f[11] = 0.0f; + + mOut.f[12] = 0.0f; + mOut.f[13] = 0.0f; + mOut.f[14] = 0.0f; + mOut.f[15] = 1.0f; +} + +void IlmMatrixRotateY(IlmMatrix &mOut, const float angle) +{ + // Precompute cos and sin + float fCosine = (float)cos(degToRad(angle)); + float fSine = (float)sin(degToRad(angle)); + + // Create the trigonometric matrix corresponding to Y Rotation + mOut.f[0] = fCosine; + mOut.f[1] = 0.0f; + mOut.f[2] = fSine; + mOut.f[3] = 0.0f; + + mOut.f[4] = 0.0f; + mOut.f[5] = 1.0f; + mOut.f[6] = 0.0f; + mOut.f[7] = 0.0f; + + mOut.f[8] = -fSine; + mOut.f[9] = 0.0f; + mOut.f[10] = fCosine; + mOut.f[11] = 0.0f; + + mOut.f[12] = 0.0f; + mOut.f[13] = 0.0f; + mOut.f[14] = 0.0f; + mOut.f[15] = 1.0f; +} + +void IlmMatrixRotateZ(IlmMatrix &mOut, const float angle) +{ + // Precompute cos and sin + float fCosine = (float)cos(degToRad(angle)); + float fSine = (float)sin(degToRad(angle)); + + // Create the trigonometric matrix corresponding to Z Rotation + mOut.f[0] = fCosine; + mOut.f[1] = -fSine; + mOut.f[2] = 0.0f; + mOut.f[3] = 0.0f; + + mOut.f[4] = fSine; + mOut.f[5] = fCosine; + mOut.f[6] = 0.0f; + mOut.f[7] = 0.0f; + + mOut.f[8] = 0.0f; + mOut.f[9] = 0.0f; + mOut.f[10] = 1.0f; + mOut.f[11] = 0.0f; + + mOut.f[12] = 0.0f; + mOut.f[13] = 0.0f; + mOut.f[14] = 0.0f; + mOut.f[15] = 1.0f; +} + +void IlmMatrixProjection(IlmMatrix &mOut, const float fov, const float near, const float far, const float aspect) +{ + // Precompute borders for projection + float range = near * tan(degToRad(fov) / 2.0); + float left = -range * aspect; + float right = range * aspect; + float bottom = -range; + float top = range; + + // Column 1 + mOut.f[0] = 2 * near / (right - left); + mOut.f[1] = 0.0; + mOut.f[2] = 0.0; + mOut.f[3] = 0.0; + + // Column 2 + mOut.f[4] = 0.0; + mOut.f[5] = 2 * near / (top - bottom); + mOut.f[6] = 0.0; + mOut.f[7] = 0.0; + + // Column 3 + mOut.f[8] = 0.0; + mOut.f[9] = 0.0; + mOut.f[10] = -(far + near) / (far - near); + mOut.f[11] = -1; + + // Column 4 + mOut.f[12] = 0.0; + mOut.f[13] = 0.0; + mOut.f[14] = -(2 * far * near) / (far - near); + mOut.f[15] = 0.0; +} |