Visualization Library v1.0.3A lightweight C++ OpenGL middleware for 2D/3D graphics |
[Download] [Tutorials] [All Classes] [Grouped Classes] |
00001 /**************************************************************************************/ 00002 /* */ 00003 /* Visualization Library */ 00004 /* http://visualizationlibrary.org */ 00005 /* */ 00006 /* Copyright (c) 2005-2010, Michele Bosi */ 00007 /* All rights reserved. */ 00008 /* */ 00009 /* Redistribution and use in source and binary forms, with or without modification, */ 00010 /* are permitted provided that the following conditions are met: */ 00011 /* */ 00012 /* - Redistributions of source code must retain the above copyright notice, this */ 00013 /* list of conditions and the following disclaimer. */ 00014 /* */ 00015 /* - Redistributions in binary form must reproduce the above copyright notice, this */ 00016 /* list of conditions and the following disclaimer in the documentation and/or */ 00017 /* other materials provided with the distribution. */ 00018 /* */ 00019 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND */ 00020 /* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED */ 00021 /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ 00022 /* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR */ 00023 /* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */ 00024 /* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ 00025 /* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */ 00026 /* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */ 00027 /* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ 00028 /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ 00029 /* */ 00030 /**************************************************************************************/ 00031 00032 #include <vlCore/Transform.hpp> 00033 #include <vlCore/GlobalSettings.hpp> 00034 #include <vlCore/VisualizationLibrary.hpp> 00035 #include <vlCore/Log.hpp> 00036 #include <algorithm> 00037 #include <set> 00038 00039 using namespace vl; 00040 00041 //----------------------------------------------------------------------------- 00042 // Transform 00043 //----------------------------------------------------------------------------- 00044 Transform::~Transform() 00045 { 00046 #if 0 00047 if (!mChildren.empty()) 00048 Log::warning("Transform::~Transform(): a Transform with children is being destroyed! One or more Transforms will be orphaned.\n"); 00049 #endif 00050 00051 for(size_t i=0; i<mChildren.size(); ++i) 00052 { 00053 mChildren[i]->mParent = NULL; 00054 mChildren[i]->setLocalMatrix( mChildren[i]->worldMatrix() ); 00055 } 00056 } 00057 //----------------------------------------------------------------------------- 00058 void Transform::translate(real x, real y, real z) 00059 { 00060 setLocalMatrix( mat4::getTranslation(x,y,z)*localMatrix() ); 00061 } 00062 //----------------------------------------------------------------------------- 00063 void Transform::translate(const vec3& t) 00064 { 00065 setLocalMatrix( mat4::getTranslation(t)*localMatrix() ); 00066 } 00067 //----------------------------------------------------------------------------- 00068 void Transform::scale(real x, real y, real z) 00069 { 00070 setLocalMatrix( mat4::getScaling(x,y,z)*localMatrix() ); 00071 } 00072 //----------------------------------------------------------------------------- 00073 void Transform::rotate(real degrees, real x, real y, real z) 00074 { 00075 setLocalMatrix( mat4::getRotation(degrees,x,y,z)*localMatrix() ); 00076 } 00077 //----------------------------------------------------------------------------- 00078 void Transform::rotate(const vec3& from, const vec3& to) 00079 { 00080 setLocalMatrix( mat4::getRotation(from,to)*localMatrix() ); 00081 } 00082 //----------------------------------------------------------------------------- 00083 void Transform::preMultiply(const mat4& m) 00084 { 00085 setLocalMatrix( m*localMatrix() ); 00086 } 00087 //----------------------------------------------------------------------------- 00088 void Transform::postMultiply(const mat4& m) 00089 { 00090 setLocalMatrix( localMatrix()*m ); 00091 } 00092 //-----------------------------------------------------------------------------