Blender V2.61 - r43446
|
00001 00004 /* 00005 This source file is part of GIMPACT Library. 00006 00007 For the latest info, see http://gimpact.sourceforge.net/ 00008 00009 Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371. 00010 email: projectileman@yahoo.com 00011 00012 00013 This software is provided 'as-is', without any express or implied warranty. 00014 In no event will the authors be held liable for any damages arising from the use of this software. 00015 Permission is granted to anyone to use this software for any purpose, 00016 including commercial applications, and to alter it and redistribute it freely, 00017 subject to the following restrictions: 00018 00019 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. 00020 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 00021 3. This notice may not be removed or altered from any source distribution. 00022 */ 00023 00024 00025 #ifndef GIMPACT_MASS_UTIL_H 00026 #define GIMPACT_MASS_UTIL_H 00027 00028 #include "LinearMath/btTransform.h" 00029 00030 00031 00032 SIMD_FORCE_INLINE btVector3 gim_inertia_add_transformed( 00033 const btVector3 & source_inertia, const btVector3 & added_inertia, const btTransform & transform) 00034 { 00035 btMatrix3x3 rotatedTensor = transform.getBasis().scaled(added_inertia) * transform.getBasis().transpose(); 00036 00037 btScalar x2 = transform.getOrigin()[0]; 00038 x2*= x2; 00039 btScalar y2 = transform.getOrigin()[1]; 00040 y2*= y2; 00041 btScalar z2 = transform.getOrigin()[2]; 00042 z2*= z2; 00043 00044 btScalar ix = rotatedTensor[0][0]*(y2+z2); 00045 btScalar iy = rotatedTensor[1][1]*(x2+z2); 00046 btScalar iz = rotatedTensor[2][2]*(x2+y2); 00047 00048 return btVector3(source_inertia[0]+ix,source_inertia[1]+iy,source_inertia[2] + iz); 00049 } 00050 00051 SIMD_FORCE_INLINE btVector3 gim_get_point_inertia(const btVector3 & point, btScalar mass) 00052 { 00053 btScalar x2 = point[0]*point[0]; 00054 btScalar y2 = point[1]*point[1]; 00055 btScalar z2 = point[2]*point[2]; 00056 return btVector3(mass*(y2+z2),mass*(x2+z2),mass*(x2+y2)); 00057 } 00058 00059 00060 #endif //GIMPACT_MESH_SHAPE_H