diff --git a/btgui/GwenOpenGLTest/Apple/premake4.lua b/btgui/GwenOpenGLTest/Apple/premake4.lua index b2f3ba578..62cacb75b 100644 --- a/btgui/GwenOpenGLTest/Apple/premake4.lua +++ b/btgui/GwenOpenGLTest/Apple/premake4.lua @@ -41,9 +41,9 @@ "../../../../bullet2/LinearMath/btConvexHullComputer.h", "../../../../bullet2/LinearMath/btSerializer.cpp", "../../../../bullet2/LinearMath/btSerializer.h", - "../../../../bullet2/LinearMath/btAlignedAllocator.cpp", - "../../../../bullet2/LinearMath/btQuickprof.cpp", - "../../../../bullet2/LinearMath/btQuickprof.h", + "../../../../bullet2/LinearMath/b3AlignedAllocator.cpp", + "../../../../bullet2/LinearMath/b3Quickprof.cpp", + "../../../../bullet2/LinearMath/b3Quickprof.h", "../**.cpp", "../**.h", } diff --git a/btgui/GwenOpenGLTest/premake4.lua b/btgui/GwenOpenGLTest/premake4.lua index 24d642207..dfaefd378 100644 --- a/btgui/GwenOpenGLTest/premake4.lua +++ b/btgui/GwenOpenGLTest/premake4.lua @@ -39,9 +39,9 @@ "../OpenGLTrueTypeFont/opengl_fontstashcallbacks.h", "../../src/BulletGeometry/btConvexHullComputer.cpp", "../../src/BulletGeometry/btConvexHullComputer.h", - "../../src/BulletCommon/btAlignedAllocator.cpp", - "../../src/BulletCommon/btQuickprof.cpp", - "../../src/BulletCommon/btQuickprof.h", + "../../src/BulletCommon/b3AlignedAllocator.cpp", + "../../src/BulletCommon/b3Quickprof.cpp", + "../../src/BulletCommon/b3Quickprof.h", "**.cpp", "**.h", } diff --git a/btgui/OpenGLTrueTypeFont/main.cpp b/btgui/OpenGLTrueTypeFont/main.cpp index 75a3e55e6..b95dbb184 100644 --- a/btgui/OpenGLTrueTypeFont/main.cpp +++ b/btgui/OpenGLTrueTypeFont/main.cpp @@ -32,9 +32,9 @@ subject to the following restrictions: #include "opengl_fontstashcallbacks.h" -#include "BulletCommon/btQuickprof.h" -#include "BulletCommon/btQuaternion.h" -#include "BulletCommon/CommandLineArgs.h" +#include "BulletCommon/b3Quickprof.h" +#include "BulletCommon/b3Quaternion.h" +#include "BulletCommon/b3CommandLineArgs.h" #include "../OpenGLWindow/LoadShader.h" extern char OpenSansData[]; bool printStats = false; @@ -295,7 +295,7 @@ void Usage() int main(int argc, char* argv[]) { GLint err; - CommandLineArgs args(argc,argv); + b3CommandLineArgs args(argc,argv); if (args.CheckCmdLineFlag("help")) { diff --git a/btgui/OpenGLTrueTypeFont/premake4.lua b/btgui/OpenGLTrueTypeFont/premake4.lua index 1532a82f9..e4d3aed08 100644 --- a/btgui/OpenGLTrueTypeFont/premake4.lua +++ b/btgui/OpenGLTrueTypeFont/premake4.lua @@ -23,9 +23,9 @@ "../FontFiles/OpenSans.cpp", "../OpenGLWindow/LoadShader.cpp", "../OpenGLWindow/LoadShader.h", - "../../src/BulletCommon/btAlignedAllocator.cpp", - "../../src/BulletCommon/btQuickprof.cpp", - "../../src/BulletCommon/btQuickprof.h" , + "../../src/BulletCommon/b3AlignedAllocator.cpp", + "../../src/BulletCommon/b3Quickprof.cpp", + "../../src/BulletCommon/b3Quickprof.h" , "fontstash.cpp", "fontstash.h", "opengl_fontstashcallbacks.cpp", diff --git a/btgui/OpenGLWindow/GLInstanceGraphicsShape.h b/btgui/OpenGLWindow/GLInstanceGraphicsShape.h index 4985944c4..02e097cd9 100644 --- a/btgui/OpenGLWindow/GLInstanceGraphicsShape.h +++ b/btgui/OpenGLWindow/GLInstanceGraphicsShape.h @@ -1,7 +1,7 @@ #ifndef GL_INSTANCE_GRAPHICS_SHAPE_H #define GL_INSTANCE_GRAPHICS_SHAPE_H -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedObjectArray.h" struct GLInstanceVertex { @@ -11,9 +11,9 @@ struct GLInstanceVertex }; struct GLInstanceGraphicsShape { - btAlignedObjectArray* m_vertices; + b3AlignedObjectArray* m_vertices; int m_numvertices; - btAlignedObjectArray* m_indices; + b3AlignedObjectArray* m_indices; int m_numIndices; float m_scaling[4]; }; diff --git a/btgui/OpenGLWindow/GLInstanceRendererInternalData.h b/btgui/OpenGLWindow/GLInstanceRendererInternalData.h index 669f58adc..8d3a3e67a 100644 --- a/btgui/OpenGLWindow/GLInstanceRendererInternalData.h +++ b/btgui/OpenGLWindow/GLInstanceRendererInternalData.h @@ -2,15 +2,15 @@ #define GL_INSTANCE_RENDERER_INTERNAL_DATA_H #include "OpenGLInclude.h" -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedObjectArray.h" struct GLInstanceRendererInternalData { - btAlignedObjectArray m_instance_positions_ptr; - btAlignedObjectArray m_instance_quaternion_ptr; - btAlignedObjectArray m_instance_colors_ptr; - btAlignedObjectArray m_instance_scale_ptr; + b3AlignedObjectArray m_instance_positions_ptr; + b3AlignedObjectArray m_instance_quaternion_ptr; + b3AlignedObjectArray m_instance_colors_ptr; + b3AlignedObjectArray m_instance_scale_ptr; int m_vboSize; GLuint m_vbo; diff --git a/btgui/OpenGLWindow/GLInstancingRenderer.cpp b/btgui/OpenGLWindow/GLInstancingRenderer.cpp index 86b9f9fde..b7813a025 100644 --- a/btgui/OpenGLWindow/GLInstancingRenderer.cpp +++ b/btgui/OpenGLWindow/GLInstancingRenderer.cpp @@ -22,10 +22,10 @@ subject to the following restrictions: //#include "DemoSettings.h" #include #include -#include "BulletCommon/btVector3.h" -#include "BulletCommon/btQuaternion.h" -#include "BulletCommon/btQuickprof.h" -#include "BulletCommon/btMatrix3x3.h" +#include "BulletCommon/b3Vector3.h" +#include "BulletCommon/b3Quaternion.h" +#include "BulletCommon/b3Quickprof.h" +#include "BulletCommon/b3Matrix3x3.h" #include "LoadShader.h" @@ -91,10 +91,10 @@ struct InternalDataRenderer : public GLInstanceRendererInternalData { - btVector3 m_cameraPosition; - btVector3 m_cameraTargetPosition; + b3Vector3 m_cameraPosition; + b3Vector3 m_cameraTargetPosition; float m_cameraDistance; - btVector3 m_cameraUp; + b3Vector3 m_cameraUp; float m_azi; float m_ele; @@ -106,8 +106,8 @@ struct InternalDataRenderer : public GLInstanceRendererInternalData GLuint m_defaultTexturehandle; InternalDataRenderer() : - m_cameraPosition(btVector3(0,0,0)), - m_cameraTargetPosition(btVector3(15,2,-24)), + m_cameraPosition(b3Vector3(0,0,0)), + m_cameraTargetPosition(b3Vector3(15,2,-24)), m_cameraDistance(150), m_cameraUp(0,1,0), m_azi(100.f),//135.f), @@ -131,7 +131,7 @@ struct InternalDataRenderer : public GLInstanceRendererInternalData } else { m_cameraDistance -= deltay*0.1; - //btVector3 fwd = m_cameraTargetPosition-m_cameraPosition; + //b3Vector3 fwd = m_cameraTargetPosition-m_cameraPosition; //fwd.normalize(); //m_cameraTargetPosition += fwd*deltay*0.1; } @@ -139,8 +139,8 @@ struct InternalDataRenderer : public GLInstanceRendererInternalData { if (btFabs(deltax)>btFabs(deltay)) { - btVector3 fwd = m_cameraTargetPosition-m_cameraPosition; - btVector3 side = m_cameraUp.cross(fwd); + b3Vector3 fwd = m_cameraTargetPosition-m_cameraPosition; + b3Vector3 side = m_cameraUp.cross(fwd); side.normalize(); m_cameraTargetPosition += side * deltax*0.1; @@ -952,11 +952,11 @@ void btCreateFrustum( -void btCreateLookAt(const btVector3& eye, const btVector3& center,const btVector3& up, GLfloat result[16]) +void btCreateLookAt(const b3Vector3& eye, const b3Vector3& center,const b3Vector3& up, GLfloat result[16]) { - btVector3 f = (center - eye).normalized(); - btVector3 u = up.normalized(); - btVector3 s = (f.cross(u)).normalized(); + b3Vector3 f = (center - eye).normalized(); + b3Vector3 u = up.normalized(); + b3Vector3 s = (f.cross(u)).normalized(); u = s.cross(f); result[0*4+0] = s.getX(); @@ -996,25 +996,25 @@ void GLInstancingRenderer::updateCamera() // m_azi=m_azi+0.01; - btScalar rele = m_data->m_ele * btScalar(0.01745329251994329547);// rads per deg - btScalar razi = m_data->m_azi * btScalar(0.01745329251994329547);// rads per deg + b3Scalar rele = m_data->m_ele * b3Scalar(0.01745329251994329547);// rads per deg + b3Scalar razi = m_data->m_azi * b3Scalar(0.01745329251994329547);// rads per deg - btQuaternion rot(m_data->m_cameraUp,razi); + b3Quaternion rot(m_data->m_cameraUp,razi); - btVector3 eyePos(0,0,0); + b3Vector3 eyePos(0,0,0); eyePos[m_forwardAxis] = -m_data->m_cameraDistance; - btVector3 forward(eyePos[0],eyePos[1],eyePos[2]); + b3Vector3 forward(eyePos[0],eyePos[1],eyePos[2]); if (forward.length2() < SIMD_EPSILON) { forward.setValue(1.f,0.f,0.f); } - btVector3 right = m_data->m_cameraUp.cross(forward); - btQuaternion roll(right,-rele); + b3Vector3 right = m_data->m_cameraUp.cross(forward); + b3Quaternion roll(right,-rele); - eyePos = btMatrix3x3(rot) * btMatrix3x3(roll) * eyePos; + eyePos = b3Matrix3x3(rot) * b3Matrix3x3(roll) * eyePos; m_data->m_cameraPosition[0] = eyePos.getX(); m_data->m_cameraPosition[1] = eyePos.getY(); @@ -1024,10 +1024,10 @@ void GLInstancingRenderer::updateCamera() if (m_glutScreenWidth == 0 && m_glutScreenHeight == 0) return; - btScalar aspect; - btVector3 extents; + b3Scalar aspect; + b3Vector3 extents; - aspect = m_glutScreenWidth / (btScalar)m_glutScreenHeight; + aspect = m_glutScreenWidth / (b3Scalar)m_glutScreenHeight; extents.setValue(aspect * 1.0f, 1.0f,0); @@ -1037,8 +1037,8 @@ void GLInstancingRenderer::updateCamera() extents *= m_data->m_cameraDistance; - //btVector3 lower = m_data->m_cameraTargetPosition - extents; - //btVector3 upper = m_data->m_cameraTargetPosition + extents; + //b3Vector3 lower = m_data->m_cameraTargetPosition - extents; + //b3Vector3 upper = m_data->m_cameraTargetPosition + extents; //gluOrtho2D(lower.x, upper.x, lower.y, upper.y); //glTranslatef(100,210,0); } else @@ -1085,7 +1085,7 @@ void GLInstancingRenderer::setCameraPitch(float pitch) void GLInstancingRenderer::setCameraTargetPosition(float cameraPos[4]) { - m_data->m_cameraTargetPosition = btVector3(cameraPos[0],cameraPos[1],cameraPos[2]); + m_data->m_cameraTargetPosition = b3Vector3(cameraPos[0],cameraPos[1],cameraPos[2]); } void GLInstancingRenderer::getCameraTargetPosition(float cameraPos[4]) const @@ -1108,18 +1108,18 @@ void GLInstancingRenderer::getMouseDirection(float* dir, int x, int y) float bottom = -1.f; float nearPlane = 1.f; float tanFov = (top-bottom)*0.5f / nearPlane; - float fov = btScalar(2.0) * btAtan(tanFov); + float fov = b3Scalar(2.0) * btAtan(tanFov); - btVector3 rayFrom = m_data->m_cameraPosition; - btVector3 rayForward = (m_data->m_cameraTargetPosition-m_data->m_cameraPosition); + b3Vector3 rayFrom = m_data->m_cameraPosition; + b3Vector3 rayForward = (m_data->m_cameraTargetPosition-m_data->m_cameraPosition); rayForward.normalize(); float farPlane = 10000.f; rayForward*= farPlane; - btVector3 rightOffset; - btVector3 vertical = m_data->m_cameraUp; + b3Vector3 rightOffset; + b3Vector3 vertical = m_data->m_cameraUp; - btVector3 hor; + b3Vector3 hor; hor = rayForward.cross(vertical); hor.normalize(); vertical = hor.cross(rayForward); @@ -1131,21 +1131,21 @@ void GLInstancingRenderer::getMouseDirection(float* dir, int x, int y) hor *= 2.f * farPlane * tanfov; vertical *= 2.f * farPlane * tanfov; - btScalar aspect; + b3Scalar aspect; - aspect = m_glutScreenWidth / (btScalar)m_glutScreenHeight; + aspect = m_glutScreenWidth / (b3Scalar)m_glutScreenHeight; hor*=aspect; - btVector3 rayToCenter = rayFrom + rayForward; - btVector3 dHor = hor * 1.f/float(m_glutScreenWidth); - btVector3 dVert = vertical * 1.f/float(m_glutScreenHeight); + b3Vector3 rayToCenter = rayFrom + rayForward; + b3Vector3 dHor = hor * 1.f/float(m_glutScreenWidth); + b3Vector3 dVert = vertical * 1.f/float(m_glutScreenHeight); - btVector3 rayTo = rayToCenter - 0.5f * hor + 0.5f * vertical; - rayTo += btScalar(x) * dHor; - rayTo -= btScalar(y) * dVert; + b3Vector3 rayTo = rayToCenter - 0.5f * hor + 0.5f * vertical; + rayTo += b3Scalar(x) * dHor; + rayTo -= b3Scalar(y) * dVert; dir[0] = rayTo[0]; dir[1] = rayTo[1]; diff --git a/btgui/OpenGLWindow/GLInstancingRenderer.h b/btgui/OpenGLWindow/GLInstancingRenderer.h index d26145d08..e103bdd73 100644 --- a/btgui/OpenGLWindow/GLInstancingRenderer.h +++ b/btgui/OpenGLWindow/GLInstancingRenderer.h @@ -16,7 +16,7 @@ subject to the following restrictions: #ifndef GL_INSTANCING_RENDERER_H #define GL_INSTANCING_RENDERER_H -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedObjectArray.h" void btDefaultMouseButtonCallback( int button, int state, float x, float y); void btDefaultMouseMoveCallback( float x, float y); @@ -32,7 +32,7 @@ enum class GLInstancingRenderer { - btAlignedObjectArray m_graphicsInstances; + b3AlignedObjectArray m_graphicsInstances; int m_maxNumObjectCapacity; int m_maxShapeCapacityInBytes; diff --git a/btgui/OpenGLWindow/Win32OpenGLWindow.cpp b/btgui/OpenGLWindow/Win32OpenGLWindow.cpp index 35d189834..57ca3639c 100644 --- a/btgui/OpenGLWindow/Win32OpenGLWindow.cpp +++ b/btgui/OpenGLWindow/Win32OpenGLWindow.cpp @@ -18,7 +18,7 @@ subject to the following restrictions: #include "OpenGLInclude.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" #include "Win32InternalWindowData.h" #include diff --git a/btgui/OpenGLWindow/Win32Window.cpp b/btgui/OpenGLWindow/Win32Window.cpp index f9d3b8605..3d8b272d7 100644 --- a/btgui/OpenGLWindow/Win32Window.cpp +++ b/btgui/OpenGLWindow/Win32Window.cpp @@ -17,7 +17,7 @@ subject to the following restrictions: #include "Win32Window.h" #include "OpenGLInclude.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" #include static InternalData2* sData = 0; diff --git a/btgui/OpenGLWindow/gwenWindow.cpp b/btgui/OpenGLWindow/gwenWindow.cpp index 224f16f29..88b7c1337 100644 --- a/btgui/OpenGLWindow/gwenWindow.cpp +++ b/btgui/OpenGLWindow/gwenWindow.cpp @@ -19,7 +19,7 @@ #include "Gwen/Controls/TabControl.h" #include "Gwen/Controls/ListBox.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "GwenOpenGL3CoreRenderer.h" #include "GLPrimitiveRenderer.h" diff --git a/btgui/OpenGLWindow/main.cpp b/btgui/OpenGLWindow/main.cpp index 6882504ea..9f4142e32 100644 --- a/btgui/OpenGLWindow/main.cpp +++ b/btgui/OpenGLWindow/main.cpp @@ -37,10 +37,10 @@ extern char OpenSansData[]; #include "renderscene.h" -#include "BulletCommon/btQuickprof.h" -#include "BulletCommon/btQuaternion.h" +#include "BulletCommon/b3Quickprof.h" +#include "BulletCommon/b3Quaternion.h" -#include "BulletCommon/CommandLineArgs.h" +#include "BulletCommon/b3CommandLineArgs.h" #include "../OpenGLTrueTypeFont/fontstash.h" #include "../OpenGLTrueTypeFont/opengl_fontstashcallbacks.h" @@ -240,7 +240,7 @@ sth_stash* initFont(GLPrimitiveRenderer* primRender) int main(int argc, char* argv[]) { - CommandLineArgs args(argc,argv); + b3CommandLineArgs args(argc,argv); if (args.CheckCmdLineFlag("help")) { diff --git a/btgui/OpenGLWindow/premake4.lua b/btgui/OpenGLWindow/premake4.lua index ad5085bd0..97bb3dc72 100644 --- a/btgui/OpenGLWindow/premake4.lua +++ b/btgui/OpenGLWindow/premake4.lua @@ -43,9 +43,9 @@ "../OpenGLTrueTypeFont/opengl_fontstashcallbacks.h", "../../src/BulletGeometry/btConvexHullComputer.cpp", "../../src/BulletGeometry/btConvexHullComputer.h", - "../../src/BulletCommon/btAlignedAllocator.cpp", - "../../src/BulletCommon/btQuickprof.cpp", - "../../src/BulletCommon/btQuickprof.h" + "../../src/BulletCommon/b3AlignedAllocator.cpp", + "../../src/BulletCommon/b3Quickprof.cpp", + "../../src/BulletCommon/b3Quickprof.h" } if os.is("Windows") then diff --git a/btgui/OpenGLWindow/renderscene.cpp b/btgui/OpenGLWindow/renderscene.cpp index 42e9cb547..d2a4b0767 100644 --- a/btgui/OpenGLWindow/renderscene.cpp +++ b/btgui/OpenGLWindow/renderscene.cpp @@ -15,9 +15,9 @@ bool keepStaticObjects = false; #include "renderscene.h" #include "GLInstancingRenderer.h" -//#include "LinearMath/btQuickprof.h" -#include "BulletCommon/btQuaternion.h" -#include "BulletCommon/btMatrix3x3.h" +//#include "LinearMath/b3Quickprof.h" +#include "BulletCommon/b3Quaternion.h" +#include "BulletCommon/b3Matrix3x3.h" //#include "../opencl/gpu_rigidbody_pipeline/b3ConvexUtility.h" #include "ShapeData.h" ///work-in-progress @@ -49,7 +49,7 @@ struct InstanceGroup // Bullet::btCollisionShapeData* m_shape; int m_collisionShapeIndex; -// btAlignedObjectArray m_rigidBodies; +// b3AlignedObjectArray m_rigidBodies; }; @@ -57,50 +57,50 @@ struct InstanceGroup #define MY_UNITSPHERE_POINTS 42 -static btVector3 sUnitSpherePoints[MY_UNITSPHERE_POINTS] = +static b3Vector3 sUnitSpherePoints[MY_UNITSPHERE_POINTS] = { - btVector3(btScalar(0.000000) , btScalar(-0.000000),btScalar(-1.000000)), - btVector3(btScalar(0.723608) , btScalar(-0.525725),btScalar(-0.447219)), - btVector3(btScalar(-0.276388) , btScalar(-0.850649),btScalar(-0.447219)), - btVector3(btScalar(-0.894426) , btScalar(-0.000000),btScalar(-0.447216)), - btVector3(btScalar(-0.276388) , btScalar(0.850649),btScalar(-0.447220)), - btVector3(btScalar(0.723608) , btScalar(0.525725),btScalar(-0.447219)), - btVector3(btScalar(0.276388) , btScalar(-0.850649),btScalar(0.447220)), - btVector3(btScalar(-0.723608) , btScalar(-0.525725),btScalar(0.447219)), - btVector3(btScalar(-0.723608) , btScalar(0.525725),btScalar(0.447219)), - btVector3(btScalar(0.276388) , btScalar(0.850649),btScalar(0.447219)), - btVector3(btScalar(0.894426) , btScalar(0.000000),btScalar(0.447216)), - btVector3(btScalar(-0.000000) , btScalar(0.000000),btScalar(1.000000)), - btVector3(btScalar(0.425323) , btScalar(-0.309011),btScalar(-0.850654)), - btVector3(btScalar(-0.162456) , btScalar(-0.499995),btScalar(-0.850654)), - btVector3(btScalar(0.262869) , btScalar(-0.809012),btScalar(-0.525738)), - btVector3(btScalar(0.425323) , btScalar(0.309011),btScalar(-0.850654)), - btVector3(btScalar(0.850648) , btScalar(-0.000000),btScalar(-0.525736)), - btVector3(btScalar(-0.525730) , btScalar(-0.000000),btScalar(-0.850652)), - btVector3(btScalar(-0.688190) , btScalar(-0.499997),btScalar(-0.525736)), - btVector3(btScalar(-0.162456) , btScalar(0.499995),btScalar(-0.850654)), - btVector3(btScalar(-0.688190) , btScalar(0.499997),btScalar(-0.525736)), - btVector3(btScalar(0.262869) , btScalar(0.809012),btScalar(-0.525738)), - btVector3(btScalar(0.951058) , btScalar(0.309013),btScalar(0.000000)), - btVector3(btScalar(0.951058) , btScalar(-0.309013),btScalar(0.000000)), - btVector3(btScalar(0.587786) , btScalar(-0.809017),btScalar(0.000000)), - btVector3(btScalar(0.000000) , btScalar(-1.000000),btScalar(0.000000)), - btVector3(btScalar(-0.587786) , btScalar(-0.809017),btScalar(0.000000)), - btVector3(btScalar(-0.951058) , btScalar(-0.309013),btScalar(-0.000000)), - btVector3(btScalar(-0.951058) , btScalar(0.309013),btScalar(-0.000000)), - btVector3(btScalar(-0.587786) , btScalar(0.809017),btScalar(-0.000000)), - btVector3(btScalar(-0.000000) , btScalar(1.000000),btScalar(-0.000000)), - btVector3(btScalar(0.587786) , btScalar(0.809017),btScalar(-0.000000)), - btVector3(btScalar(0.688190) , btScalar(-0.499997),btScalar(0.525736)), - btVector3(btScalar(-0.262869) , btScalar(-0.809012),btScalar(0.525738)), - btVector3(btScalar(-0.850648) , btScalar(0.000000),btScalar(0.525736)), - btVector3(btScalar(-0.262869) , btScalar(0.809012),btScalar(0.525738)), - btVector3(btScalar(0.688190) , btScalar(0.499997),btScalar(0.525736)), - btVector3(btScalar(0.525730) , btScalar(0.000000),btScalar(0.850652)), - btVector3(btScalar(0.162456) , btScalar(-0.499995),btScalar(0.850654)), - btVector3(btScalar(-0.425323) , btScalar(-0.309011),btScalar(0.850654)), - btVector3(btScalar(-0.425323) , btScalar(0.309011),btScalar(0.850654)), - btVector3(btScalar(0.162456) , btScalar(0.499995),btScalar(0.850654)) + b3Vector3(b3Scalar(0.000000) , b3Scalar(-0.000000),b3Scalar(-1.000000)), + b3Vector3(b3Scalar(0.723608) , b3Scalar(-0.525725),b3Scalar(-0.447219)), + b3Vector3(b3Scalar(-0.276388) , b3Scalar(-0.850649),b3Scalar(-0.447219)), + b3Vector3(b3Scalar(-0.894426) , b3Scalar(-0.000000),b3Scalar(-0.447216)), + b3Vector3(b3Scalar(-0.276388) , b3Scalar(0.850649),b3Scalar(-0.447220)), + b3Vector3(b3Scalar(0.723608) , b3Scalar(0.525725),b3Scalar(-0.447219)), + b3Vector3(b3Scalar(0.276388) , b3Scalar(-0.850649),b3Scalar(0.447220)), + b3Vector3(b3Scalar(-0.723608) , b3Scalar(-0.525725),b3Scalar(0.447219)), + b3Vector3(b3Scalar(-0.723608) , b3Scalar(0.525725),b3Scalar(0.447219)), + b3Vector3(b3Scalar(0.276388) , b3Scalar(0.850649),b3Scalar(0.447219)), + b3Vector3(b3Scalar(0.894426) , b3Scalar(0.000000),b3Scalar(0.447216)), + b3Vector3(b3Scalar(-0.000000) , b3Scalar(0.000000),b3Scalar(1.000000)), + b3Vector3(b3Scalar(0.425323) , b3Scalar(-0.309011),b3Scalar(-0.850654)), + b3Vector3(b3Scalar(-0.162456) , b3Scalar(-0.499995),b3Scalar(-0.850654)), + b3Vector3(b3Scalar(0.262869) , b3Scalar(-0.809012),b3Scalar(-0.525738)), + b3Vector3(b3Scalar(0.425323) , b3Scalar(0.309011),b3Scalar(-0.850654)), + b3Vector3(b3Scalar(0.850648) , b3Scalar(-0.000000),b3Scalar(-0.525736)), + b3Vector3(b3Scalar(-0.525730) , b3Scalar(-0.000000),b3Scalar(-0.850652)), + b3Vector3(b3Scalar(-0.688190) , b3Scalar(-0.499997),b3Scalar(-0.525736)), + b3Vector3(b3Scalar(-0.162456) , b3Scalar(0.499995),b3Scalar(-0.850654)), + b3Vector3(b3Scalar(-0.688190) , b3Scalar(0.499997),b3Scalar(-0.525736)), + b3Vector3(b3Scalar(0.262869) , b3Scalar(0.809012),b3Scalar(-0.525738)), + b3Vector3(b3Scalar(0.951058) , b3Scalar(0.309013),b3Scalar(0.000000)), + b3Vector3(b3Scalar(0.951058) , b3Scalar(-0.309013),b3Scalar(0.000000)), + b3Vector3(b3Scalar(0.587786) , b3Scalar(-0.809017),b3Scalar(0.000000)), + b3Vector3(b3Scalar(0.000000) , b3Scalar(-1.000000),b3Scalar(0.000000)), + b3Vector3(b3Scalar(-0.587786) , b3Scalar(-0.809017),b3Scalar(0.000000)), + b3Vector3(b3Scalar(-0.951058) , b3Scalar(-0.309013),b3Scalar(-0.000000)), + b3Vector3(b3Scalar(-0.951058) , b3Scalar(0.309013),b3Scalar(-0.000000)), + b3Vector3(b3Scalar(-0.587786) , b3Scalar(0.809017),b3Scalar(-0.000000)), + b3Vector3(b3Scalar(-0.000000) , b3Scalar(1.000000),b3Scalar(-0.000000)), + b3Vector3(b3Scalar(0.587786) , b3Scalar(0.809017),b3Scalar(-0.000000)), + b3Vector3(b3Scalar(0.688190) , b3Scalar(-0.499997),b3Scalar(0.525736)), + b3Vector3(b3Scalar(-0.262869) , b3Scalar(-0.809012),b3Scalar(0.525738)), + b3Vector3(b3Scalar(-0.850648) , b3Scalar(0.000000),b3Scalar(0.525736)), + b3Vector3(b3Scalar(-0.262869) , b3Scalar(0.809012),b3Scalar(0.525738)), + b3Vector3(b3Scalar(0.688190) , b3Scalar(0.499997),b3Scalar(0.525736)), + b3Vector3(b3Scalar(0.525730) , b3Scalar(0.000000),b3Scalar(0.850652)), + b3Vector3(b3Scalar(0.162456) , b3Scalar(-0.499995),b3Scalar(0.850654)), + b3Vector3(b3Scalar(-0.425323) , b3Scalar(-0.309011),b3Scalar(0.850654)), + b3Vector3(b3Scalar(-0.425323) , b3Scalar(0.309011),b3Scalar(0.850654)), + b3Vector3(b3Scalar(0.162456) , b3Scalar(0.499995),b3Scalar(0.850654)) }; @@ -114,7 +114,7 @@ void createSceneProgrammatically(GLInstancingRenderer& renderer) int tetraShapeIndex = -1; float position[4]={0,0,0,0}; - btQuaternion born(btVector3(1,0,0),SIMD_PI*0.25*0.5); + b3Quaternion born(b3Vector3(1,0,0),SIMD_PI*0.25*0.5); float orn[4] = {0,0,0,1}; // float rotOrn[4] = {born.getX(),born.getY(),born.getZ(),born.getW()};// diff --git a/demo/donttouch/GpuDemo.cpp b/demo/donttouch/GpuDemo.cpp index b4d790c85..067d0cd72 100644 --- a/demo/donttouch/GpuDemo.cpp +++ b/demo/donttouch/GpuDemo.cpp @@ -23,7 +23,7 @@ subject to the following restrictions: #define START_POS_Y 10 #define START_POS_Z -3 -#include "LinearMath/btVector3.h" +#include "LinearMath/b3Vector3.h" #include "GpuDemo.h" //#include "GlutStuff.h" @@ -41,7 +41,7 @@ subject to the following restrictions: #include "BulletDynamics/Dynamics/btRigidBody.h" #include "LinearMath/btDefaultMotionState.h" -#include "LinearMath/btQuickprof.h" +#include "LinearMath/b3Quickprof.h" #include //printf debugging @@ -90,7 +90,7 @@ void GpuDemo::clientMoveAndDisplay() -btAlignedObjectArray vertices; +b3AlignedObjectArray vertices; void EmptyDemo::setupScene(const ConstructionInfo& ci) { @@ -107,7 +107,7 @@ void SpheresDemo::setupScene(const ConstructionInfo& ci) m_collisionShapes.push_back(sphere); /// Create Dynamic Objects - btTransform startTransform; + b3Transform startTransform; startTransform.setIdentity(); @@ -134,21 +134,21 @@ void SpheresDemo::setupScene(const ConstructionInfo& ci) btCollisionShape* shape = sphere; - btScalar mass = 1; + b3Scalar mass = 1; if (!ci.m_useConcaveMesh && k==0) mass = k==0? 0.f : 1.f; //rigidbody is dynamic if and only if mass is non zero, otherwise static bool isDynamic = (mass != 0.f); - btVector3 localInertia(0,0,0); + b3Vector3 localInertia(0,0,0); if (isDynamic) shape->calculateLocalInertia(mass,localInertia); - startTransform.setOrigin(SCALING*btVector3( - btScalar(gapX*i + start_x), - btScalar(ci.gapY*k + start_y), - btScalar(gapZ*j + start_z))); + startTransform.setOrigin(SCALING*b3Vector3( + b3Scalar(gapX*i + start_x), + b3Scalar(ci.gapY*k + start_y), + b3Scalar(gapZ*j + start_z))); //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects @@ -164,24 +164,24 @@ void SpheresDemo::setupScene(const ConstructionInfo& ci) } { - btVector3 planeNormal(0,1,0); - btScalar planeConstant=0; + b3Vector3 planeNormal(0,1,0); + b3Scalar planeConstant=0; btCollisionShape* shape = new btStaticPlaneShape(planeNormal,planeConstant); - //btBoxShape* plane = new btBoxShape(btVector3(100,1,100)); + //btBoxShape* plane = new btBoxShape(b3Vector3(100,1,100)); //plane->initializePolyhedralFeatures(); //btSphereShape* shape = new btSphereShape(1000); - btScalar mass(0.); + b3Scalar mass(0.); //rigidbody is dynamic if and only if mass is non zero, otherwise static bool isDynamic = (mass != 0.f); - btVector3 localInertia(0,0,0); - btTransform groundTransform; + b3Vector3 localInertia(0,0,0); + b3Transform groundTransform; groundTransform.setIdentity(); - groundTransform.setRotation(btQuaternion(btVector3(1,0,0),0.3)); - groundTransform.setOrigin(btVector3(0,0,0)); + groundTransform.setRotation(b3Quaternion(b3Vector3(1,0,0),0.3)); + groundTransform.setOrigin(b3Vector3(0,0,0)); //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects btDefaultMotionState* myMotionState = new btDefaultMotionState(groundTransform); @@ -198,18 +198,18 @@ void SpheresDemo::setupScene(const ConstructionInfo& ci) void GpuCompoundDemo::setupScene(const ConstructionInfo& ci) { btCollisionShape* groundShape =0; -// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); +// btCollisionShape* groundShape = new btStaticPlaneShape(b3Vector3(0,1,0),50); if (ci.m_useConcaveMesh) { btTriangleMesh* meshInterface = new btTriangleMesh(); - btAlignedObjectArray concaveVertices; - concaveVertices.push_back(btVector3(0,-20,0)); - concaveVertices.push_back(btVector3(80,10,80)); - concaveVertices.push_back(btVector3(80,10,-80)); - concaveVertices.push_back(btVector3(-80,10,-80)); - concaveVertices.push_back(btVector3(-80,10,80)); + b3AlignedObjectArray concaveVertices; + concaveVertices.push_back(b3Vector3(0,-20,0)); + concaveVertices.push_back(b3Vector3(80,10,80)); + concaveVertices.push_back(b3Vector3(80,10,-80)); + concaveVertices.push_back(b3Vector3(-80,10,-80)); + concaveVertices.push_back(b3Vector3(-80,10,80)); meshInterface->addTriangle(concaveVertices[0],concaveVertices[1],concaveVertices[2],true); meshInterface->addTriangle(concaveVertices[0],concaveVertices[2],concaveVertices[3],true); @@ -217,33 +217,33 @@ void GpuCompoundDemo::setupScene(const ConstructionInfo& ci) meshInterface->addTriangle(concaveVertices[0],concaveVertices[4],concaveVertices[1],true); #if 0 - groundShape = new btBvhTriangleMeshShape(meshInterface,true);//btStaticPlaneShape(btVector3(0,1,0),50); + groundShape = new btBvhTriangleMeshShape(meshInterface,true);//btStaticPlaneShape(b3Vector3(0,1,0),50); #else - btBoxShape* shape =new btBoxShape(btVector3(btScalar(250.),btScalar(10.),btScalar(250.))); + btBoxShape* shape =new btBoxShape(b3Vector3(b3Scalar(250.),b3Scalar(10.),b3Scalar(250.))); shape->initializePolyhedralFeatures(); groundShape = shape; #endif } else { - groundShape = new btBoxShape(btVector3(btScalar(250.),btScalar(50.),btScalar(250.))); + groundShape = new btBoxShape(b3Vector3(b3Scalar(250.),b3Scalar(50.),b3Scalar(250.))); } m_collisionShapes.push_back(groundShape); - btTransform groundTransform; + b3Transform groundTransform; groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,0,0)); + groundTransform.setOrigin(b3Vector3(0,0,0)); //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: if (ci.m_useConcaveMesh) { - btScalar mass(0.); + b3Scalar mass(0.); //rigidbody is dynamic if and only if mass is non zero, otherwise static bool isDynamic = (mass != 0.f); - btVector3 localInertia(0,0,0); + b3Vector3 localInertia(0,0,0); if (isDynamic) groundShape->calculateLocalInertia(mass,localInertia); @@ -261,15 +261,15 @@ void GpuCompoundDemo::setupScene(const ConstructionInfo& ci) //create a few dynamic rigidbodies // Re-using the same collision is better for memory usage and performance - //vertices.push_back(btVector3(0,1,0)); - vertices.push_back(btVector3(1,1,1)); - vertices.push_back(btVector3(1,1,-1)); - vertices.push_back(btVector3(-1,1,-1)); - vertices.push_back(btVector3(-1,1,1)); - vertices.push_back(btVector3(1,-1,1)); - vertices.push_back(btVector3(1,-1,-1)); - vertices.push_back(btVector3(-1,-1,-1)); - vertices.push_back(btVector3(-1,-1,1)); + //vertices.push_back(b3Vector3(0,1,0)); + vertices.push_back(b3Vector3(1,1,1)); + vertices.push_back(b3Vector3(1,1,-1)); + vertices.push_back(b3Vector3(-1,1,-1)); + vertices.push_back(b3Vector3(-1,1,1)); + vertices.push_back(b3Vector3(1,-1,1)); + vertices.push_back(b3Vector3(1,-1,-1)); + vertices.push_back(b3Vector3(-1,-1,-1)); + vertices.push_back(b3Vector3(-1,-1,1)); #if 0 btPolyhedralConvexShape* colShape = new btConvexHullShape(&vertices[0].getX(),vertices.size()); @@ -280,13 +280,13 @@ void GpuCompoundDemo::setupScene(const ConstructionInfo& ci) btPolyhedralConvexShape* colShape = new btConvexHullShape(&vertices[0].getX(),vertices.size()); colShape->initializePolyhedralFeatures(); compoundShape = new btCompoundShape(); - btTransform tr; + b3Transform tr; tr.setIdentity(); - tr.setOrigin(btVector3(0,-1,0)); + tr.setOrigin(b3Vector3(0,-1,0)); compoundShape->addChildShape(tr,colShape); - tr.setOrigin(btVector3(0,0,2)); + tr.setOrigin(b3Vector3(0,0,2)); compoundShape->addChildShape(tr,colShape); - tr.setOrigin(btVector3(2,0,0)); + tr.setOrigin(b3Vector3(2,0,0)); compoundShape->addChildShape(tr,colShape); } btCollisionShape* colShape = compoundShape; @@ -294,18 +294,18 @@ void GpuCompoundDemo::setupScene(const ConstructionInfo& ci) - btPolyhedralConvexShape* boxShape = new btBoxShape(btVector3(SCALING*1,SCALING*1,SCALING*1)); + btPolyhedralConvexShape* boxShape = new btBoxShape(b3Vector3(SCALING*1,SCALING*1,SCALING*1)); boxShape->initializePolyhedralFeatures(); - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); + //btCollisionShape* colShape = new btSphereShape(b3Scalar(1.)); m_collisionShapes.push_back(colShape); m_collisionShapes.push_back(boxShape); /// Create Dynamic Objects - btTransform startTransform; + b3Transform startTransform; startTransform.setIdentity(); @@ -334,21 +334,21 @@ void GpuCompoundDemo::setupScene(const ConstructionInfo& ci) btCollisionShape* shape = colShape; - btScalar mass = 1; + b3Scalar mass = 1; if (!ci.m_useConcaveMesh && k==0) mass = k==0? 0.f : 1.f; //rigidbody is dynamic if and only if mass is non zero, otherwise static bool isDynamic = (mass != 0.f); - btVector3 localInertia(0,0,0); + b3Vector3 localInertia(0,0,0); if (isDynamic) shape->calculateLocalInertia(mass,localInertia); - startTransform.setOrigin(SCALING*btVector3( - btScalar(startX+gapX*i + start_x), - btScalar(20+ci.gapY*k + start_y), - btScalar(startZ+gapZ*j + start_z))); + startTransform.setOrigin(SCALING*b3Vector3( + b3Scalar(startX+gapX*i + start_x), + b3Scalar(20+ci.gapY*k + start_y), + b3Scalar(startZ+gapZ*j + start_z))); //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects @@ -369,18 +369,18 @@ void GpuCompoundDemo::setupScene(const ConstructionInfo& ci) void GpuBoxDemo::setupScene(const ConstructionInfo& ci) { btCollisionShape* groundShape =0; -// btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0,1,0),50); +// btCollisionShape* groundShape = new btStaticPlaneShape(b3Vector3(0,1,0),50); if (ci.m_useConcaveMesh) { btTriangleMesh* meshInterface = new btTriangleMesh(); - btAlignedObjectArray concaveVertices; - concaveVertices.push_back(btVector3(0,-20,0)); - concaveVertices.push_back(btVector3(80,10,80)); - concaveVertices.push_back(btVector3(80,10,-80)); - concaveVertices.push_back(btVector3(-80,10,-80)); - concaveVertices.push_back(btVector3(-80,10,80)); + b3AlignedObjectArray concaveVertices; + concaveVertices.push_back(b3Vector3(0,-20,0)); + concaveVertices.push_back(b3Vector3(80,10,80)); + concaveVertices.push_back(b3Vector3(80,10,-80)); + concaveVertices.push_back(b3Vector3(-80,10,-80)); + concaveVertices.push_back(b3Vector3(-80,10,80)); meshInterface->addTriangle(concaveVertices[0],concaveVertices[1],concaveVertices[2],true); meshInterface->addTriangle(concaveVertices[0],concaveVertices[2],concaveVertices[3],true); @@ -388,33 +388,33 @@ void GpuBoxDemo::setupScene(const ConstructionInfo& ci) meshInterface->addTriangle(concaveVertices[0],concaveVertices[4],concaveVertices[1],true); #if 0 - groundShape = new btBvhTriangleMeshShape(meshInterface,true);//btStaticPlaneShape(btVector3(0,1,0),50); + groundShape = new btBvhTriangleMeshShape(meshInterface,true);//btStaticPlaneShape(b3Vector3(0,1,0),50); #else - btBoxShape* shape =new btBoxShape(btVector3(btScalar(250.),btScalar(10.),btScalar(250.))); + btBoxShape* shape =new btBoxShape(b3Vector3(b3Scalar(250.),b3Scalar(10.),b3Scalar(250.))); shape->initializePolyhedralFeatures(); groundShape = shape; #endif } else { - groundShape = new btBoxShape(btVector3(btScalar(250.),btScalar(50.),btScalar(250.))); + groundShape = new btBoxShape(b3Vector3(b3Scalar(250.),b3Scalar(50.),b3Scalar(250.))); } m_collisionShapes.push_back(groundShape); - btTransform groundTransform; + b3Transform groundTransform; groundTransform.setIdentity(); - groundTransform.setOrigin(btVector3(0,0,0)); + groundTransform.setOrigin(b3Vector3(0,0,0)); //We can also use DemoApplication::localCreateRigidBody, but for clarity it is provided here: if (ci.m_useConcaveMesh) { - btScalar mass(0.); + b3Scalar mass(0.); //rigidbody is dynamic if and only if mass is non zero, otherwise static bool isDynamic = (mass != 0.f); - btVector3 localInertia(0,0,0); + b3Vector3 localInertia(0,0,0); if (isDynamic) groundShape->calculateLocalInertia(mass,localInertia); @@ -432,15 +432,15 @@ void GpuBoxDemo::setupScene(const ConstructionInfo& ci) //create a few dynamic rigidbodies // Re-using the same collision is better for memory usage and performance - //vertices.push_back(btVector3(0,1,0)); - vertices.push_back(btVector3(1,1,1)); - vertices.push_back(btVector3(1,1,-1)); - vertices.push_back(btVector3(-1,1,-1)); - vertices.push_back(btVector3(-1,1,1)); - vertices.push_back(btVector3(1,-1,1)); - vertices.push_back(btVector3(1,-1,-1)); - vertices.push_back(btVector3(-1,-1,-1)); - vertices.push_back(btVector3(-1,-1,1)); + //vertices.push_back(b3Vector3(0,1,0)); + vertices.push_back(b3Vector3(1,1,1)); + vertices.push_back(b3Vector3(1,1,-1)); + vertices.push_back(b3Vector3(-1,1,-1)); + vertices.push_back(b3Vector3(-1,1,1)); + vertices.push_back(b3Vector3(1,-1,1)); + vertices.push_back(b3Vector3(1,-1,-1)); + vertices.push_back(b3Vector3(-1,-1,-1)); + vertices.push_back(b3Vector3(-1,-1,1)); #if 1 btPolyhedralConvexShape* colShape = new btConvexHullShape(&vertices[0].getX(),vertices.size()); @@ -451,13 +451,13 @@ void GpuBoxDemo::setupScene(const ConstructionInfo& ci) btPolyhedralConvexShape* colShape = new btConvexHullShape(&vertices[0].getX(),vertices.size()); colShape->initializePolyhedralFeatures(); compoundShape = new btCompoundShape(); - btTransform tr; + b3Transform tr; tr.setIdentity(); - tr.setOrigin(btVector3(0,-1,0)); + tr.setOrigin(b3Vector3(0,-1,0)); compoundShape->addChildShape(tr,colShape); - tr.setOrigin(btVector3(0,0,2)); + tr.setOrigin(b3Vector3(0,0,2)); compoundShape->addChildShape(tr,colShape); - tr.setOrigin(btVector3(2,0,0)); + tr.setOrigin(b3Vector3(2,0,0)); compoundShape->addChildShape(tr,colShape); } btCollisionShape* colShape = compoundShape; @@ -465,18 +465,18 @@ void GpuBoxDemo::setupScene(const ConstructionInfo& ci) - btPolyhedralConvexShape* boxShape = new btBoxShape(btVector3(SCALING*1,SCALING*1,SCALING*1)); + btPolyhedralConvexShape* boxShape = new btBoxShape(b3Vector3(SCALING*1,SCALING*1,SCALING*1)); boxShape->initializePolyhedralFeatures(); - //btCollisionShape* colShape = new btSphereShape(btScalar(1.)); + //btCollisionShape* colShape = new btSphereShape(b3Scalar(1.)); m_collisionShapes.push_back(colShape); m_collisionShapes.push_back(boxShape); /// Create Dynamic Objects - btTransform startTransform; + b3Transform startTransform; startTransform.setIdentity(); @@ -505,21 +505,21 @@ void GpuBoxDemo::setupScene(const ConstructionInfo& ci) btCollisionShape* shape = colShape; - btScalar mass = 1; + b3Scalar mass = 1; if (!ci.m_useConcaveMesh && k==0) mass = k==0? 0.f : 1.f; //rigidbody is dynamic if and only if mass is non zero, otherwise static bool isDynamic = (mass != 0.f); - btVector3 localInertia(0,0,0); + b3Vector3 localInertia(0,0,0); if (isDynamic) shape->calculateLocalInertia(mass,localInertia); - startTransform.setOrigin(SCALING*btVector3( - btScalar(startX+gapX*i + start_x), - btScalar(ci.gapY*(k+0.5) + start_y), - btScalar(startZ+gapZ*j + start_z))); + startTransform.setOrigin(SCALING*b3Vector3( + b3Scalar(startX+gapX*i + start_x), + b3Scalar(ci.gapY*(k+0.5) + start_y), + b3Scalar(startZ+gapZ*j + start_z))); //using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects @@ -541,7 +541,7 @@ void GpuDemo::initPhysics(const ConstructionInfo& ci) // setTexturing(true); //setShadows(false); -// setCameraDistance(btScalar(SCALING*250.)); +// setCameraDistance(b3Scalar(SCALING*250.)); ///collision configuration contains default setup for memory, collision setup if (ci.useOpenCL) @@ -553,7 +553,7 @@ void GpuDemo::initPhysics(const ConstructionInfo& ci) } - m_dynamicsWorld->setGravity(btVector3(0,-10,0)); + m_dynamicsWorld->setGravity(b3Vector3(0,-10,0)); ///create a few basic rigid bodies diff --git a/demo/donttouch/GpuDemo.h b/demo/donttouch/GpuDemo.h index 9aa9fa410..b3917dee7 100644 --- a/demo/donttouch/GpuDemo.h +++ b/demo/donttouch/GpuDemo.h @@ -16,7 +16,7 @@ subject to the following restrictions: #define GPU_DEMO_H -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedObjectArray.h" class btBroadphaseInterface; @@ -41,7 +41,7 @@ protected: btDynamicsWorld* m_dynamicsWorld; //keep the collision shapes, for deletion/cleanup - btAlignedObjectArray m_collisionShapes; + b3AlignedObjectArray m_collisionShapes; float getDeltaTimeInSeconds() { diff --git a/demo/donttouch/OpenGL3CoreRenderer.cpp b/demo/donttouch/OpenGL3CoreRenderer.cpp index e7dc2b213..1e388580a 100644 --- a/demo/donttouch/OpenGL3CoreRenderer.cpp +++ b/demo/donttouch/OpenGL3CoreRenderer.cpp @@ -4,7 +4,7 @@ #include "OpenGLWindow/ShapeData.h" //#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" //#include "BulletCollision/CollisionDispatch/btCollisionObject.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" /*#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h" #include "BulletCollision/CollisionShapes/btConvexPolyhedron.h" @@ -64,20 +64,20 @@ struct GraphicsShape GraphicsShape* createGraphicsShapeFromConvexHull(const btConvexPolyhedron* utilPtr) { - btAlignedObjectArray* vertices = new btAlignedObjectArray; + b3AlignedObjectArray* vertices = new b3AlignedObjectArray; { int numVertices = utilPtr->m_vertices.size(); int numIndices = 0; - btAlignedObjectArray* indicesPtr = new btAlignedObjectArray; + b3AlignedObjectArray* indicesPtr = new b3AlignedObjectArray; for (int f=0;fm_faces.size();f++) { const btFace& face = utilPtr->m_faces[f]; - btVector3 normal(face.m_plane[0],face.m_plane[1],face.m_plane[2]); + b3Vector3 normal(face.m_plane[0],face.m_plane[1],face.m_plane[2]); if (face.m_indices.size()>2) { GraphicsVertex vtx; - const btVector3& orgVertex = utilPtr->m_vertices[face.m_indices[0]]; + const b3Vector3& orgVertex = utilPtr->m_vertices[face.m_indices[0]]; vtx.xyzw[0] = orgVertex[0];vtx.xyzw[1] = orgVertex[1];vtx.xyzw[2] = orgVertex[2];vtx.xyzw[3] = 0.f; vtx.normal[0] = normal[0];vtx.normal[1] = normal[1];vtx.normal[2] = normal[2]; vtx.uv[0] = 0.5f;vtx.uv[1] = 0.5f; @@ -89,7 +89,7 @@ GraphicsShape* createGraphicsShapeFromConvexHull(const btConvexPolyhedron* utilP indicesPtr->push_back(newvtxindex0); { GraphicsVertex vtx; - const btVector3& orgVertex = utilPtr->m_vertices[face.m_indices[j]]; + const b3Vector3& orgVertex = utilPtr->m_vertices[face.m_indices[j]]; vtx.xyzw[0] = orgVertex[0];vtx.xyzw[1] = orgVertex[1];vtx.xyzw[2] = orgVertex[2];vtx.xyzw[3] = 0.f; vtx.normal[0] = normal[0];vtx.normal[1] = normal[1];vtx.normal[2] = normal[2]; vtx.uv[0] = 0.5f;vtx.uv[1] = 0.5f; @@ -100,7 +100,7 @@ GraphicsShape* createGraphicsShapeFromConvexHull(const btConvexPolyhedron* utilP { GraphicsVertex vtx; - const btVector3& orgVertex = utilPtr->m_vertices[face.m_indices[j+1]]; + const b3Vector3& orgVertex = utilPtr->m_vertices[face.m_indices[j+1]]; vtx.xyzw[0] = orgVertex[0];vtx.xyzw[1] = orgVertex[1];vtx.xyzw[2] = orgVertex[2];vtx.xyzw[3] = 0.f; vtx.normal[0] = normal[0];vtx.normal[1] = normal[1];vtx.normal[2] = normal[2]; vtx.uv[0] = 0.5f;vtx.uv[1] = 0.5f; @@ -127,8 +127,8 @@ GraphicsShape* createGraphicsShapeFromConvexHull(const btConvexPolyhedron* utilP GraphicsShape* createGraphicsShapeFromCompoundShape(btCompoundShape* compound) { GraphicsShape* gfxShape = new GraphicsShape(); - btAlignedObjectArray* vertexArray = new btAlignedObjectArray; - btAlignedObjectArray* indexArray = new btAlignedObjectArray; + b3AlignedObjectArray* vertexArray = new b3AlignedObjectArray; + b3AlignedObjectArray* indexArray = new b3AlignedObjectArray; @@ -139,7 +139,7 @@ GraphicsShape* createGraphicsShapeFromCompoundShape(btCompoundShape* compound) if (compound->getChildShape(i)->isPolyhedral()) { btPolyhedralConvexShape* convexHull = (btPolyhedralConvexShape*) compound->getChildShape(i); - btTransform tr = compound->getChildTransform(i); + b3Transform tr = compound->getChildTransform(i); const btConvexPolyhedron* polyhedron = convexHull->getConvexPolyhedron(); GraphicsShape* childGfxShape = createGraphicsShapeFromConvexHull(polyhedron); @@ -153,7 +153,7 @@ GraphicsShape* createGraphicsShapeFromCompoundShape(btCompoundShape* compound) for (int j=0;jm_numvertices;j++) { GraphicsVertex vtx; - btVector3 pos(orgVerts[j].xyzw[0],orgVerts[j].xyzw[1],orgVerts[j].xyzw[2]); + b3Vector3 pos(orgVerts[j].xyzw[0],orgVerts[j].xyzw[1],orgVerts[j].xyzw[2]); pos = tr*pos; vtx.xyzw[0] = childGfxShape->m_scaling[0]*pos.getX(); vtx.xyzw[1] = childGfxShape->m_scaling[1]*pos.getY(); @@ -163,7 +163,7 @@ GraphicsShape* createGraphicsShapeFromCompoundShape(btCompoundShape* compound) vtx.uv[0] = 0.5f; vtx.uv[1] = 0.5f; - btVector3 normal(orgVerts[j].normal[0],orgVerts[j].normal[1],orgVerts[j].normal[2]); + b3Vector3 normal(orgVerts[j].normal[0],orgVerts[j].normal[1],orgVerts[j].normal[2]); normal = tr.getBasis()*normal; vtx.normal[0] = normal.getX(); vtx.normal[1] = normal.getY(); @@ -192,12 +192,12 @@ GraphicsShape* createGraphicsShapeFromCompoundShape(btCompoundShape* compound) GraphicsShape* createGraphicsShapeFromConcaveMesh(const btBvhTriangleMeshShape* trimesh) { - btAlignedObjectArray* vertices = new btAlignedObjectArray; - btAlignedObjectArray* indicesPtr = new btAlignedObjectArray; + b3AlignedObjectArray* vertices = new b3AlignedObjectArray; + b3AlignedObjectArray* indicesPtr = new b3AlignedObjectArray; const b3StridingMeshInterface* meshInterface = trimesh->getMeshInterface(); - btVector3 trimeshScaling(1,1,1); + b3Vector3 trimeshScaling(1,1,1); for (int partId=0;partIdgetNumSubParts();partId++) { @@ -211,9 +211,9 @@ GraphicsShape* createGraphicsShapeFromConcaveMesh(const btBvhTriangleMeshShape* PHY_ScalarType indicestype = PHY_INTEGER; //PHY_ScalarType indexType=0; - btVector3 triangleVerts[3]; + b3Vector3 triangleVerts[3]; meshInterface->getLockedReadOnlyVertexIndexBase(&vertexbase,numverts, type,stride,&indexbase,indexstride,numfaces,indicestype,partId); - btVector3 aabbMin,aabbMax; + b3Vector3 aabbMin,aabbMax; for (int triangleIndex = 0 ; triangleIndex < numfaces;triangleIndex++) { @@ -226,7 +226,7 @@ GraphicsShape* createGraphicsShapeFromConcaveMesh(const btBvhTriangleMeshShape* if (type == PHY_FLOAT) { float* graphicsbase = (float*)(vertexbase+graphicsindex*stride); - triangleVerts[j] = btVector3( + triangleVerts[j] = b3Vector3( graphicsbase[0]*trimeshScaling.getX(), graphicsbase[1]*trimeshScaling.getY(), graphicsbase[2]*trimeshScaling.getZ()); @@ -234,12 +234,12 @@ GraphicsShape* createGraphicsShapeFromConcaveMesh(const btBvhTriangleMeshShape* else { double* graphicsbase = (double*)(vertexbase+graphicsindex*stride); - triangleVerts[j] = btVector3( btScalar(graphicsbase[0]*trimeshScaling.getX()), - btScalar(graphicsbase[1]*trimeshScaling.getY()), - btScalar(graphicsbase[2]*trimeshScaling.getZ())); + triangleVerts[j] = b3Vector3( b3Scalar(graphicsbase[0]*trimeshScaling.getX()), + b3Scalar(graphicsbase[1]*trimeshScaling.getY()), + b3Scalar(graphicsbase[2]*trimeshScaling.getZ())); } } - btVector3 normal = (triangleVerts[2]-triangleVerts[0]).cross(triangleVerts[1]-triangleVerts[0]); + b3Vector3 normal = (triangleVerts[2]-triangleVerts[0]).cross(triangleVerts[1]-triangleVerts[0]); normal.normalize(); GraphicsVertex vtx0,vtx1,vtx2; @@ -299,18 +299,18 @@ GraphicsShape* createGraphicsShapeFromConcaveMesh(const btBvhTriangleMeshShape* GraphicsShape* createGraphicsShapeFromWavefrontObj(objLoader* obj) { - btAlignedObjectArray* vertices = new btAlignedObjectArray; + b3AlignedObjectArray* vertices = new b3AlignedObjectArray; { // int numVertices = obj->vertexCount; // int numIndices = 0; - btAlignedObjectArray* indicesPtr = new btAlignedObjectArray; + b3AlignedObjectArray* indicesPtr = new b3AlignedObjectArray; /* for (int v=0;vvertexCount;v++) { vtx.xyzw[0] = obj->vertexList[v]->e[0]; vtx.xyzw[1] = obj->vertexList[v]->e[1]; vtx.xyzw[2] = obj->vertexList[v]->e[2]; - btVector3 n(vtx.xyzw[0],vtx.xyzw[1],vtx.xyzw[2]); + b3Vector3 n(vtx.xyzw[0],vtx.xyzw[1],vtx.xyzw[2]); if (n.length2()>SIMD_EPSILON) { n.normalize(); @@ -332,10 +332,10 @@ GraphicsShape* createGraphicsShapeFromWavefrontObj(objLoader* obj) for (int f=0;ffaceCount;f++) { obj_face* face = obj->faceList[f]; - //btVector3 normal(face.m_plane[0],face.m_plane[1],face.m_plane[2]); + //b3Vector3 normal(face.m_plane[0],face.m_plane[1],face.m_plane[2]); if (face->vertex_count>=3) { - btVector3 normal(0,1,0); + b3Vector3 normal(0,1,0); int vtxBaseIndex = vertices->size(); if (face->vertex_count<=4) @@ -366,9 +366,9 @@ GraphicsShape* createGraphicsShapeFromWavefrontObj(objLoader* obj) vtx2.uv[1] = obj->textureList[face->vertex_index[2]]->e[1]; - btVector3 v0(vtx0.xyzw[0],vtx0.xyzw[1],vtx0.xyzw[2]); - btVector3 v1(vtx1.xyzw[0],vtx1.xyzw[1],vtx1.xyzw[2]); - btVector3 v2(vtx2.xyzw[0],vtx2.xyzw[1],vtx2.xyzw[2]); + b3Vector3 v0(vtx0.xyzw[0],vtx0.xyzw[1],vtx0.xyzw[2]); + b3Vector3 v1(vtx1.xyzw[0],vtx1.xyzw[1],vtx1.xyzw[2]); + b3Vector3 v2(vtx2.xyzw[0],vtx2.xyzw[1],vtx2.xyzw[2]); normal = (v1-v0).cross(v2-v0); normal.normalize(); @@ -446,13 +446,13 @@ void graphics_from_physics(GLInstancingRenderer& renderer, bool syncTransformsOn { btCollisionObject* colObj = colObjArray[i]; - btVector3 pos = colObj->getWorldTransform().getOrigin(); - btQuaternion orn = colObj->getWorldTransform().getRotation(); + b3Vector3 pos = colObj->getWorldTransform().getOrigin(); + b3Quaternion orn = colObj->getWorldTransform().getRotation(); float position[4] = {pos.getX(),pos.getY(),pos.getZ(),0.f}; float orientation[4] = {orn.getX(),orn.getY(),orn.getZ(),orn.getW()}; float color[4] = {0,0,0,1}; - btVector3 localScaling = colObj->getCollisionShape()->getLocalScaling(); + b3Vector3 localScaling = colObj->getCollisionShape()->getLocalScaling(); if (colObj->isStaticOrKinematicObject()) @@ -476,7 +476,7 @@ void graphics_from_physics(GLInstancingRenderer& renderer, bool syncTransformsOn prevGraphicsShapeIndex = renderer.registerShape(&gfxShape->m_vertices[0],gfxShape->m_numvertices,gfxShape->m_indices,gfxShape->m_numIndices); prevShape = colObj->getCollisionShape(); - const btVector3& scaling = prevShape->getLocalScaling(); + const b3Vector3& scaling = prevShape->getLocalScaling(); localScaling[0] = scaling.getX();localScaling[1] = scaling.getY();localScaling[2] = scaling.getZ(); } else { @@ -486,7 +486,7 @@ void graphics_from_physics(GLInstancingRenderer& renderer, bool syncTransformsOn GraphicsShape* gfxShape = createGraphicsShapeFromConcaveMesh(trimesh); prevGraphicsShapeIndex = renderer.registerShape(&gfxShape->m_vertices[0],gfxShape->m_numvertices,gfxShape->m_indices,gfxShape->m_numIndices); prevShape = colObj->getCollisionShape(); - const btVector3& scaling = prevShape->getLocalScaling(); + const b3Vector3& scaling = prevShape->getLocalScaling(); localScaling[0] = scaling.getX();localScaling[1] = scaling.getY();localScaling[2] = scaling.getZ(); } else { @@ -498,7 +498,7 @@ void graphics_from_physics(GLInstancingRenderer& renderer, bool syncTransformsOn { prevGraphicsShapeIndex = renderer.registerShape(&gfxShape->m_vertices[0],gfxShape->m_numvertices,gfxShape->m_indices,gfxShape->m_numIndices); prevShape = colObj->getCollisionShape(); - const btVector3& scaling = prevShape->getLocalScaling(); + const b3Vector3& scaling = prevShape->getLocalScaling(); localScaling[0] = scaling.getX();localScaling[1] = scaling.getY();localScaling[2] = scaling.getZ(); } else { @@ -509,7 +509,7 @@ void graphics_from_physics(GLInstancingRenderer& renderer, bool syncTransformsOn if (colObj->getCollisionShape()->getShapeType()==SPHERE_SHAPE_PROXYTYPE) { btSphereShape* sphere = (btSphereShape*) colObj->getCollisionShape(); - btScalar radius = sphere->getRadius(); + b3Scalar radius = sphere->getRadius(); //btConvexHullShape* spherePoly = new btConvexHullShape( //const btConvexPolyhedron* pol = polyShape->getConvexPolyhedron(); @@ -589,7 +589,7 @@ void graphics_from_physics(GLInstancingRenderer& renderer, bool syncTransformsOn } } prevShape = sphere; - const btVector3& scaling = prevShape->getLocalScaling(); + const b3Vector3& scaling = prevShape->getLocalScaling(); //assume uniform scaling, using X component float sphereScale = radius*scaling.getX(); localScaling[0] = sphereScale; diff --git a/demo/donttouch/btGpuDynamicsWorld.cpp b/demo/donttouch/btGpuDynamicsWorld.cpp index 23c0432e8..4042c9fe2 100644 --- a/demo/donttouch/btGpuDynamicsWorld.cpp +++ b/demo/donttouch/btGpuDynamicsWorld.cpp @@ -9,7 +9,7 @@ #include "BulletCollision/CollisionShapes/btSphereShape.h" #include "BulletCollision/CollisionShapes/btStaticPlaneShape.h" -#include "LinearMath/btQuickprof.h" +#include "LinearMath/b3Quickprof.h" #ifdef _WIN32 @@ -43,7 +43,7 @@ void btGpuDynamicsWorld::exitOpenCL() -int btGpuDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps, btScalar fixedTimeStep) +int btGpuDynamicsWorld::stepSimulation( b3Scalar timeStep,int maxSubSteps, b3Scalar fixedTimeStep) { #ifndef BT_NO_PROFILE // CProfileManager::Reset(); @@ -73,10 +73,10 @@ int btGpuDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps, btSc BT_PROFILE("scatter transforms into rigidbody (CPU)"); for (int i=0;im_collisionObjects.size();i++) { - btVector3 pos; - btQuaternion orn; + b3Vector3 pos; + b3Quaternion orn; m_gpuPhysics->getObjectTransformFromCpu(&pos[0],&orn[0],i); - btTransform newTrans; + b3Transform newTrans; newTrans.setOrigin(pos); newTrans.setRotation(orn); this->m_collisionObjects[i]->setWorldTransform(newTrans); @@ -94,7 +94,7 @@ int btGpuDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps, btSc } -void btGpuDynamicsWorld::setGravity(const btVector3& gravity) +void btGpuDynamicsWorld::setGravity(const b3Vector3& gravity) { } @@ -110,8 +110,8 @@ int btGpuDynamicsWorld::findOrRegisterCollisionShape(const btCollisionShape* col btPolyhedralConvexShape* convex = (btPolyhedralConvexShape*)colShape; int numVertices=convex->getNumVertices(); - int strideInBytes=sizeof(btVector3); - btAlignedObjectArray tmpVertices; + int strideInBytes=sizeof(b3Vector3); + b3AlignedObjectArray tmpVertices; tmpVertices.resize(numVertices); for (int i=0;igetVertex(i,tmpVertices[i]); @@ -128,10 +128,10 @@ int btGpuDynamicsWorld::findOrRegisterCollisionShape(const btCollisionShape* col btBvhTriangleMeshShape* trimesh = (btBvhTriangleMeshShape*) colShape; b3StridingMeshInterface* meshInterface = trimesh->getMeshInterface(); - btAlignedObjectArray vertices; - btAlignedObjectArray indices; + b3AlignedObjectArray vertices; + b3AlignedObjectArray indices; - btVector3 trimeshScaling(1,1,1); + b3Vector3 trimeshScaling(1,1,1); for (int partId=0;partIdgetNumSubParts();partId++) { @@ -145,9 +145,9 @@ int btGpuDynamicsWorld::findOrRegisterCollisionShape(const btCollisionShape* col PHY_ScalarType indicestype = PHY_INTEGER; //PHY_ScalarType indexType=0; - btVector3 triangleVerts[3]; + b3Vector3 triangleVerts[3]; meshInterface->getLockedReadOnlyVertexIndexBase(&vertexbase,numverts, type,stride,&indexbase,indexstride,numfaces,indicestype,partId); - btVector3 aabbMin,aabbMax; + b3Vector3 aabbMin,aabbMax; for (int triangleIndex = 0 ; triangleIndex < numfaces;triangleIndex++) { @@ -160,7 +160,7 @@ int btGpuDynamicsWorld::findOrRegisterCollisionShape(const btCollisionShape* col if (type == PHY_FLOAT) { float* graphicsbase = (float*)(vertexbase+graphicsindex*stride); - triangleVerts[j] = btVector3( + triangleVerts[j] = b3Vector3( graphicsbase[0]*trimeshScaling.getX(), graphicsbase[1]*trimeshScaling.getY(), graphicsbase[2]*trimeshScaling.getZ()); @@ -168,9 +168,9 @@ int btGpuDynamicsWorld::findOrRegisterCollisionShape(const btCollisionShape* col else { double* graphicsbase = (double*)(vertexbase+graphicsindex*stride); - triangleVerts[j] = btVector3( btScalar(graphicsbase[0]*trimeshScaling.getX()), - btScalar(graphicsbase[1]*trimeshScaling.getY()), - btScalar(graphicsbase[2]*trimeshScaling.getZ())); + triangleVerts[j] = b3Vector3( b3Scalar(graphicsbase[0]*trimeshScaling.getX()), + b3Scalar(graphicsbase[1]*trimeshScaling.getY()), + b3Scalar(graphicsbase[2]*trimeshScaling.getZ())); } } vertices.push_back(triangleVerts[0]); @@ -207,7 +207,7 @@ int btGpuDynamicsWorld::findOrRegisterCollisionShape(const btCollisionShape* col { btCompoundShape* compound = (btCompoundShape*) colShape; - btAlignedObjectArray childShapes; + b3AlignedObjectArray childShapes; for (int i=0;igetNumChildShapes();i++) { @@ -215,8 +215,8 @@ int btGpuDynamicsWorld::findOrRegisterCollisionShape(const btCollisionShape* col btAssert(compound->getChildShape(i)->isPolyhedral()); btGpuChildShape child; child.m_shapeIndex = findOrRegisterCollisionShape(compound->getChildShape(i)); - btVector3 pos = compound->getChildTransform(i).getOrigin(); - btQuaternion orn = compound->getChildTransform(i).getRotation(); + b3Vector3 pos = compound->getChildTransform(i).getOrigin(); + b3Quaternion orn = compound->getChildTransform(i).getRotation(); for (int v=0;v<4;v++) { child.m_childPosition[v] = pos[v]; @@ -283,8 +283,8 @@ void btGpuDynamicsWorld::addRigidBody(btRigidBody* body) { int gpuShapeIndex= m_uniqueShapeMapping[index]; float mass = body->getInvMass() ? 1.f/body->getInvMass() : 0.f; - btVector3 pos = body->getWorldTransform().getOrigin(); - btQuaternion orn = body->getWorldTransform().getRotation(); + b3Vector3 pos = body->getWorldTransform().getOrigin(); + b3Quaternion orn = body->getWorldTransform().getRotation(); m_gpuPhysics->registerPhysicsInstance(mass,&pos.getX(),&orn.getX(),gpuShapeIndex,m_collisionObjects.size()); diff --git a/demo/donttouch/btGpuDynamicsWorld.h b/demo/donttouch/btGpuDynamicsWorld.h index 1bc00ce2a..6e782dbae 100644 --- a/demo/donttouch/btGpuDynamicsWorld.h +++ b/demo/donttouch/btGpuDynamicsWorld.h @@ -1,25 +1,25 @@ #ifndef BT_GPU_DYNAMICS_WORLD_H #define BT_GPU_DYNAMICS_WORLD_H -class btVector3; +class b3Vector3; class btRigidBody; class btCollisionObject; struct btGpuInternalData;//use this struct to avoid 'leaking' all OpenCL headers into clients code base class CLPhysicsDemo; -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedObjectArray.h" //#include "BulletDynamics/Dynamics/btDynamicsWorld.h" class btGpuDynamicsWorld //: public btDynamicsWorld { - btAlignedObjectArray m_uniqueShapes; - btAlignedObjectArray m_uniqueShapeMapping; + b3AlignedObjectArray m_uniqueShapes; + b3AlignedObjectArray m_uniqueShapeMapping; CLPhysicsDemo* m_gpuPhysics; - btVector3 m_gravity; + b3Vector3 m_gravity; bool m_once; bool initOpenCL(int preferredDeviceIndex, int preferredPlatformIndex, bool useInterop); @@ -33,7 +33,7 @@ public: virtual ~btGpuDynamicsWorld(); - virtual int stepSimulation( btScalar timeStep,int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.)); + virtual int stepSimulation( b3Scalar timeStep,int maxSubSteps=1, b3Scalar fixedTimeStep=b3Scalar(1.)/b3Scalar(60.)); virtual void synchronizeMotionStates() { @@ -42,7 +42,7 @@ public: void debugDrawWorld() {} - void setGravity(const btVector3& gravity); + void setGravity(const b3Vector3& gravity); void addRigidBody(btRigidBody* body); @@ -50,9 +50,9 @@ public: - btAlignedObjectArray& getCollisionObjectArray(); + b3AlignedObjectArray& getCollisionObjectArray(); - const btAlignedObjectArray& getCollisionObjectArray() const; + const b3AlignedObjectArray& getCollisionObjectArray() const; virtual void addAction(btActionInterface* action) { @@ -65,7 +65,7 @@ public: } - btVector3 getGravity () const + b3Vector3 getGravity () const { return m_gravity; } diff --git a/demo/gpudemo/GpuDemo.cpp b/demo/gpudemo/GpuDemo.cpp index 10da7cbf3..77e7fcfb2 100644 --- a/demo/gpudemo/GpuDemo.cpp +++ b/demo/gpudemo/GpuDemo.cpp @@ -1,6 +1,6 @@ #include "GpuDemo.h" #include "GpuDemoInternalData.h" -#include "BulletCommon/btScalar.h" +#include "BulletCommon/b3Scalar.h" #include "basic_initialize/b3OpenCLUtils.h" #include "OpenGLWindow/ShapeData.h" #include "OpenGLWindow/GLInstancingRenderer.h" diff --git a/demo/gpudemo/GpuDemo.h b/demo/gpudemo/GpuDemo.h index 4b34bf868..bbba8f18d 100644 --- a/demo/gpudemo/GpuDemo.h +++ b/demo/gpudemo/GpuDemo.h @@ -38,9 +38,9 @@ public: :useOpenCL(true), preferredOpenCLPlatformIndex(-1), preferredOpenCLDeviceIndex(-1), - arraySizeX(10), + arraySizeX(30), arraySizeY(30), - arraySizeZ(10), + arraySizeZ(30), m_useConcaveMesh(false), gapX(14.3), gapY(14.0), diff --git a/demo/gpudemo/ParticleDemo.cpp b/demo/gpudemo/ParticleDemo.cpp index 4acd71926..3308a739e 100644 --- a/demo/gpudemo/ParticleDemo.cpp +++ b/demo/gpudemo/ParticleDemo.cpp @@ -9,7 +9,7 @@ static char* particleKernelsString = #include "ParticleKernels.cl" #define INTEROPKERNEL_SRC_PATH "demo/gpudemo/ParticleKernels.cl" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" #include "OpenGLWindow/OpenGLInclude.h" #include "OpenGLWindow/GLInstanceRendererInternalData.h" #include "parallel_primitives/host/btLauncherCL.h" @@ -19,7 +19,7 @@ static char* particleKernelsString = #include "GpuDemoInternalData.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" //1000000 particles //#define NUM_PARTICLES_X 100 @@ -46,7 +46,7 @@ static char* particleKernelsString = ATTRIBUTE_ALIGNED16(struct) btSimParams { BT_DECLARE_ALIGNED_ALLOCATOR(); - btVector3 m_gravity; + b3Vector3 m_gravity; float m_worldMin[4]; float m_worldMax[4]; @@ -97,10 +97,10 @@ struct ParticleInternalData cl_mem m_clPositionBuffer; - btAlignedObjectArray m_velocitiesCPU; - btOpenCLArray* m_velocitiesGPU; + b3AlignedObjectArray m_velocitiesCPU; + btOpenCLArray* m_velocitiesGPU; - btAlignedObjectArray m_simParamCPU; + b3AlignedObjectArray m_simParamCPU; btOpenCLArray* m_simParamGPU; @@ -168,14 +168,14 @@ void ParticleDemo::setupScene(const ConstructionInfo& ci) int maxPairsSmallProxy = 32; float radius = 3.f*m_data->m_simParamCPU[0].m_particleRad; - m_data->m_broadphaseGPU = new b3GpuSapBroadphase(m_clData->m_clContext ,m_clData->m_clDevice,m_clData->m_clQueue);//overlappingPairCache,btVector3(4.f, 4.f, 4.f), 128, 128, 128,maxObjects, maxObjects, maxPairsSmallProxy, 100.f, 128, + m_data->m_broadphaseGPU = new b3GpuSapBroadphase(m_clData->m_clContext ,m_clData->m_clDevice,m_clData->m_clQueue);//overlappingPairCache,b3Vector3(4.f, 4.f, 4.f), 128, 128, 128,maxObjects, maxObjects, maxPairsSmallProxy, 100.f, 128, - /*m_data->m_broadphaseGPU = new btGridBroadphaseCl(overlappingPairCache,btVector3(radius,radius,radius), 128, 128, 128, + /*m_data->m_broadphaseGPU = new btGridBroadphaseCl(overlappingPairCache,b3Vector3(radius,radius,radius), 128, 128, 128, maxObjects, maxObjects, maxPairsSmallProxy, 100.f, 128, m_clData->m_clContext ,m_clData->m_clDevice,m_clData->m_clQueue); */ - m_data->m_velocitiesGPU = new btOpenCLArray(m_clData->m_clContext,m_clData->m_clQueue,numParticles); + m_data->m_velocitiesGPU = new btOpenCLArray(m_clData->m_clContext,m_clData->m_clQueue,numParticles); m_data->m_velocitiesCPU.resize(numParticles); for (int i=0;im_broadphaseGPU->createProxy(aabbMin,aabbMax,collidableIndex,1,1); userIndex++; diff --git a/demo/gpudemo/broadphase/PairBench.cpp b/demo/gpudemo/broadphase/PairBench.cpp index 1f11b7b43..459e0e4f5 100644 --- a/demo/gpudemo/broadphase/PairBench.cpp +++ b/demo/gpudemo/broadphase/PairBench.cpp @@ -1,8 +1,8 @@ #include "PairBench.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "OpenGLWindow/ShapeData.h" #include "OpenGLWindow/GLInstancingRenderer.h" -#include "BulletCommon/btQuaternion.h" +#include "BulletCommon/b3Quaternion.h" #include "OpenGLWindow/btgWindowInterface.h" #include "gpu_broadphase/host/b3GpuSapBroadphase.h" #include "../GpuDemoInternalData.h" @@ -187,16 +187,16 @@ void PairBench::initPhysics(const ConstructionInfo& ci) { for (int k=0;kregisterGraphicsInstance(shapeId,position,orn,color,scaling); - btVector3 aabbHalfExtents(1,1,1); + b3Vector3 aabbHalfExtents(1,1,1); - btVector3 aabbMin = position-aabbHalfExtents; - btVector3 aabbMax = position+aabbHalfExtents; + b3Vector3 aabbMin = position-aabbHalfExtents; + b3Vector3 aabbMax = position+aabbHalfExtents; m_data->m_broadphaseGPU->createProxy(aabbMin,aabbMax,index,group,mask); @@ -264,7 +264,7 @@ void PairBench::clientMoveAndDisplay() m_data->m_instancePosOrnColor->copyFromHostPointer(positions,3*numObjects,0); m_data->m_bodyTimes = new btOpenCLArray(m_clData->m_clContext,m_clData->m_clQueue); m_data->m_bodyTimes ->resize(numObjects); - btAlignedObjectArray tmp; + b3AlignedObjectArray tmp; tmp.resize(numObjects); for (int i=0;i m_handlers; + b3AlignedObjectArray m_handlers; btToggleButtonCallback m_toggleButtonCallback; btComboBoxCallback m_comboBoxCallback; diff --git a/demo/gpudemo/main_opengl3core.cpp b/demo/gpudemo/main_opengl3core.cpp index b22f61fde..be0e2dbe9 100644 --- a/demo/gpudemo/main_opengl3core.cpp +++ b/demo/gpudemo/main_opengl3core.cpp @@ -16,7 +16,7 @@ #include "OpenGLWindow/GLPrimitiveRenderer.h" #include "OpenGLWindow/GLInstancingRenderer.h" //#include "OpenGL3CoreRenderer.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" //#include "btGpuDynamicsWorld.h" #include #include @@ -61,7 +61,7 @@ enum MYCOMBOBOX1 = 1, }; -btAlignedObjectArray demoNames; +b3AlignedObjectArray demoNames; int selectedDemo = 0; GpuDemo::CreateFunc* allDemos[]= { @@ -313,7 +313,7 @@ sth_stash* initFont(GLPrimitiveRenderer* primRender) #include "OpenGLWindow/OpenGLInclude.h" -#include "BulletCommon/CommandLineArgs.h" +#include "BulletCommon/b3CommandLineArgs.h" void Usage() { @@ -383,18 +383,18 @@ void DumpSimulationTime(FILE* f) ///extern const char* g_deviceName; const char* g_deviceName = "blaat"; extern bool useNewBatchingKernel; -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" int main(int argc, char* argv[]) { - btVector3 test(1,2,3); + b3Vector3 test(1,2,3); test.x = 1; test.y = 4; printf("main start"); - CommandLineArgs args(argc,argv); + b3CommandLineArgs args(argc,argv); ParticleDemo::ConstructionInfo ci; if (args.CheckCmdLineFlag("help")) @@ -670,7 +670,7 @@ int main(int argc, char* argv[]) /*if (demo->getDynamicsWorld() && demo->getDynamicsWorld()->getNumCollisionObjects()) { BT_PROFILE("renderPhysicsWorld"); - btAlignedObjectArray arr = demo->getDynamicsWorld()->getCollisionObjectArray(); + b3AlignedObjectArray arr = demo->getDynamicsWorld()->getCollisionObjectArray(); btCollisionObject** colObjArray = &arr[0]; render.renderPhysicsWorld(demo->getDynamicsWorld()->getNumCollisionObjects(),colObjArray, syncOnly); diff --git a/demo/gpudemo/premake4.lua b/demo/gpudemo/premake4.lua index 09b6f81c8..d2aad4e8f 100644 --- a/demo/gpudemo/premake4.lua +++ b/demo/gpudemo/premake4.lua @@ -41,10 +41,10 @@ function createProject(vendor) "../ObjLoader/list.cpp", "../ObjLoader/list.h", - "../../src/BulletCommon/btAlignedAllocator.cpp", - "../../src/BulletCommon/btAlignedAllocator.h", - "../../src/BulletCommon/btQuickprof.cpp", - "../../src/BulletCommon/btQuickprof.h", + "../../src/BulletCommon/b3AlignedAllocator.cpp", + "../../src/BulletCommon/b3AlignedAllocator.h", + "../../src/BulletCommon/b3Quickprof.cpp", + "../../src/BulletCommon/b3Quickprof.h", "../../src/BulletGeometry/btConvexHullComputer.cpp", "../../src/BulletGeometry/btConvexHullComputer.h", diff --git a/demo/gpudemo/rigidbody/ConcaveScene.cpp b/demo/gpudemo/rigidbody/ConcaveScene.cpp index 1c1cd9c1a..40b4e657a 100644 --- a/demo/gpudemo/rigidbody/ConcaveScene.cpp +++ b/demo/gpudemo/rigidbody/ConcaveScene.cpp @@ -1,10 +1,10 @@ #include "ConcaveScene.h" #include "GpuRigidBodyDemo.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "OpenGLWindow/ShapeData.h" #include "OpenGLWindow/GLInstancingRenderer.h" -#include "BulletCommon/btQuaternion.h" +#include "BulletCommon/b3Quaternion.h" #include "OpenGLWindow/btgWindowInterface.h" #include "gpu_broadphase/host/b3GpuSapBroadphase.h" #include "../GpuDemoInternalData.h" @@ -17,7 +17,7 @@ #include "gpu_rigidbody/host/b3Config.h" #include "GpuRigidBodyDemoInternalData.h" #include"../../ObjLoader/objLoader.h" -#include "BulletCommon/btTransform.h" +#include "BulletCommon/b3Transform.h" #include "OpenGLWindow/GLInstanceGraphicsShape.h" #define CONCAVE_GAPX 16 @@ -27,18 +27,18 @@ GLInstanceGraphicsShape* createGraphicsShapeFromWavefrontObj(objLoader* obj) { - btAlignedObjectArray* vertices = new btAlignedObjectArray; + b3AlignedObjectArray* vertices = new b3AlignedObjectArray; { // int numVertices = obj->vertexCount; // int numIndices = 0; - btAlignedObjectArray* indicesPtr = new btAlignedObjectArray; + b3AlignedObjectArray* indicesPtr = new b3AlignedObjectArray; /* for (int v=0;vvertexCount;v++) { vtx.xyzw[0] = obj->vertexList[v]->e[0]; vtx.xyzw[1] = obj->vertexList[v]->e[1]; vtx.xyzw[2] = obj->vertexList[v]->e[2]; - btVector3 n(vtx.xyzw[0],vtx.xyzw[1],vtx.xyzw[2]); + b3Vector3 n(vtx.xyzw[0],vtx.xyzw[1],vtx.xyzw[2]); if (n.length2()>SIMD_EPSILON) { n.normalize(); @@ -60,10 +60,10 @@ GLInstanceGraphicsShape* createGraphicsShapeFromWavefrontObj(objLoader* obj) for (int f=0;ffaceCount;f++) { obj_face* face = obj->faceList[f]; - //btVector3 normal(face.m_plane[0],face.m_plane[1],face.m_plane[2]); + //b3Vector3 normal(face.m_plane[0],face.m_plane[1],face.m_plane[2]); if (face->vertex_count>=3) { - btVector3 normal(0,1,0); + b3Vector3 normal(0,1,0); int vtxBaseIndex = vertices->size(); if (face->vertex_count<=4) @@ -98,9 +98,9 @@ GLInstanceGraphicsShape* createGraphicsShapeFromWavefrontObj(objLoader* obj) vtx2.uv[1] = 0.5f;obj->textureList[face->vertex_index[2]]->e[1]; - btVector3 v0(vtx0.xyzw[0],vtx0.xyzw[1],vtx0.xyzw[2]); - btVector3 v1(vtx1.xyzw[0],vtx1.xyzw[1],vtx1.xyzw[2]); - btVector3 v2(vtx2.xyzw[0],vtx2.xyzw[1],vtx2.xyzw[2]); + b3Vector3 v0(vtx0.xyzw[0],vtx0.xyzw[1],vtx0.xyzw[2]); + b3Vector3 v1(vtx1.xyzw[0],vtx1.xyzw[1],vtx1.xyzw[2]); + b3Vector3 v2(vtx2.xyzw[0],vtx2.xyzw[1],vtx2.xyzw[2]); normal = (v1-v0).cross(v2-v0); normal.normalize(); @@ -168,7 +168,7 @@ void ConcaveScene::createConcaveMesh(const ConstructionInfo& ci) char* fileName = "data/samurai_monastry.obj"; // char* fileName = "data/teddy2_VHACD_CHs.obj"; - btVector3 shift(0,0,0);//0,230,80);//150,-100,-120); + b3Vector3 shift(0,0,0);//0,230,80);//150,-100,-120); btVector4 scaling(4,4,4,1); FILE* f = 0; @@ -202,19 +202,19 @@ void ConcaveScene::createConcaveMesh(const ConstructionInfo& ci) GLInstanceGraphicsShape* shape = createGraphicsShapeFromWavefrontObj(objData); - btAlignedObjectArray verts; + b3AlignedObjectArray verts; for (int i=0;im_numvertices;i++) { for (int j=0;j<3;j++) shape->m_vertices->at(i).xyzw[j] += shift[j]; - btVector3 vtx(shape->m_vertices->at(i).xyzw[0], + b3Vector3 vtx(shape->m_vertices->at(i).xyzw[0], shape->m_vertices->at(i).xyzw[1], shape->m_vertices->at(i).xyzw[2]); verts.push_back(vtx*scaling); } - int colIndex = m_data->m_np->registerConcaveMesh(&verts,shape->m_indices,btVector3(1,1,1)); + int colIndex = m_data->m_np->registerConcaveMesh(&verts,shape->m_indices,b3Vector3(1,1,1)); { int strideInBytes = 9*sizeof(float); @@ -225,14 +225,14 @@ void ConcaveScene::createConcaveMesh(const ConstructionInfo& ci) int shapeId = ci.m_instancingRenderer->registerShape(&shape->m_vertices->at(0).xyzw[0], shape->m_numvertices, &shape->m_indices->at(0), shape->m_numIndices); - btQuaternion orn(0,0,0,1); + b3Quaternion orn(0,0,0,1); btVector4 color(0.3,0.3,1,1.f);//0.5);//1.f { float mass = 0.f; - btVector3 position(0,0,0); + b3Vector3 position(0,0,0); int id = ci.m_instancingRenderer->registerGraphicsInstance(shapeId,position,orn,color,scaling); int pid = m_data->m_rigidBodyPipeline->registerPhysicsInstance(mass,position,orn,colIndex,index); index++; @@ -267,8 +267,8 @@ void ConcaveScene::setupScene(const ConstructionInfo& ci) { btVector4 scaling(400,0.001,400,1); int colIndex = m_data->m_np->registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); - btVector3 position(0,-2,0); - btQuaternion orn(0,0,0,1); + b3Vector3 position(0,-2,0); + b3Quaternion orn(0,0,0,1); btVector4 color(0,0,1,1); @@ -323,9 +323,9 @@ void ConcaveScene::createDynamicObjects(const ConstructionInfo& ci) { float mass = 1; - //btVector3 position(-2*ci.gapX+i*ci.gapX,25+j*ci.gapY,-2*ci.gapZ+k*ci.gapZ); - btVector3 position(-(ci.arraySizeX/2)*CONCAVE_GAPX+i*CONCAVE_GAPX,150+j*CONCAVE_GAPY,-(ci.arraySizeZ/2)*CONCAVE_GAPZ+k*CONCAVE_GAPZ); - btQuaternion orn(0,0,0,1); + //b3Vector3 position(-2*ci.gapX+i*ci.gapX,25+j*ci.gapY,-2*ci.gapZ+k*ci.gapZ); + b3Vector3 position(-(ci.arraySizeX/2)*CONCAVE_GAPX+i*CONCAVE_GAPX,150+j*CONCAVE_GAPY,-(ci.arraySizeZ/2)*CONCAVE_GAPZ+k*CONCAVE_GAPZ); + b3Quaternion orn(0,0,0,1); btVector4 color = colors[curColor]; curColor++; @@ -363,7 +363,7 @@ void ConcaveCompound2Scene::createDynamicObjects(const ConstructionInfo& ci) //char* fileName = "data/cube_offset.obj"; - btVector3 shift(0,0,0);//0,230,80);//150,-100,-120); + b3Vector3 shift(0,0,0);//0,230,80);//150,-100,-120); btVector4 scaling(1,1,1,1); FILE* f = 0; @@ -398,8 +398,8 @@ void ConcaveCompound2Scene::createDynamicObjects(const ConstructionInfo& ci) int strideInBytes = 9*sizeof(float); - btAlignedObjectArray vertexArray; - btAlignedObjectArray indexArray; + b3AlignedObjectArray vertexArray; + b3AlignedObjectArray indexArray; @@ -410,14 +410,14 @@ void ConcaveCompound2Scene::createDynamicObjects(const ConstructionInfo& ci) int index=0; int colIndex = 0; - btAlignedObjectArray vertices; + b3AlignedObjectArray vertices; int stride2 = sizeof(GLInstanceVertex); btAssert(stride2 == strideInBytes); { - btAlignedObjectArray childShapes; + b3AlignedObjectArray childShapes; int numChildShapes = objData->objectCount; @@ -435,15 +435,15 @@ void ConcaveCompound2Scene::createDynamicObjects(const ConstructionInfo& ci) //for now, only support polyhedral child shapes btGpuChildShape child; - btVector3 pos(0,0,0); - btQuaternion orn(0,0,0,1); + b3Vector3 pos(0,0,0); + b3Quaternion orn(0,0,0,1); for (int v=0;v<4;v++) { child.m_childPosition[v] = pos[v]; child.m_childOrientation[v] = orn[v]; } - btTransform tr; + b3Transform tr; tr.setIdentity(); tr.setOrigin(pos); tr.setRotation(orn); @@ -465,11 +465,11 @@ void ConcaveCompound2Scene::createDynamicObjects(const ConstructionInfo& ci) } } - btVector3 center(0,0,0); + b3Vector3 center(0,0,0); - btAlignedObjectArray tmpVertices; + b3AlignedObjectArray tmpVertices; //add transformed graphics vertices and indices - btVector3 myScaling(1,1,1);//50,50,50);//300,300,300); + b3Vector3 myScaling(1,1,1);//50,50,50);//300,300,300); for (int v=0;ve[0]*myScaling[0]; vertPos[1] = orgVert->e[1]*myScaling[1]; vertPos[2] = orgVert->e[2]*myScaling[2]; @@ -498,7 +498,7 @@ void ConcaveCompound2Scene::createDynamicObjects(const ConstructionInfo& ci) vert.normal[0]=0.f; vert.normal[1]=1.f; vert.normal[2]=0.f; - btVector3 vertPos; + b3Vector3 vertPos; vertPos[0] = orgVert->e[0]*myScaling[0]; vertPos[1] = orgVert->e[1]*myScaling[1]; vertPos[2] = orgVert->e[2]*myScaling[2]; @@ -509,7 +509,7 @@ void ConcaveCompound2Scene::createDynamicObjects(const ConstructionInfo& ci) vert.xyzw[2] = vertPos[2]; tmpVertices.push_back(vert); - btVector3 newPos = tr*vertPos; + b3Vector3 newPos = tr*vertPos; vert.xyzw[0] = newPos[0]; vert.xyzw[1] = newPos[1]; vert.xyzw[2] = newPos[2]; @@ -548,11 +548,11 @@ void ConcaveCompound2Scene::createDynamicObjects(const ConstructionInfo& ci) { float mass = 1;//j==0? 0.f : 1.f; - //btVector3 position(i*10*ci.gapX,j*ci.gapY,k*10*ci.gapZ); - btVector3 position(i*10*ci.gapX,50+j*ci.gapY,k*10*ci.gapZ); + //b3Vector3 position(i*10*ci.gapX,j*ci.gapY,k*10*ci.gapZ); + b3Vector3 position(i*10*ci.gapX,50+j*ci.gapY,k*10*ci.gapZ); - // btQuaternion orn(0,0,0,1); - btQuaternion orn(btVector3(0,0,1),1.8); + // b3Quaternion orn(0,0,0,1); + b3Quaternion orn(b3Vector3(0,0,1),1.8); btVector4 color = colors[curColor]; curColor++; @@ -577,8 +577,8 @@ void ConcaveCompoundScene::createDynamicObjects(const ConstructionInfo& ci) int numVertices = sizeof(cube_vertices)/strideInBytes; int numIndices = sizeof(cube_indices)/sizeof(int); - btAlignedObjectArray vertexArray; - btAlignedObjectArray indexArray; + b3AlignedObjectArray vertexArray; + b3AlignedObjectArray indexArray; //int shapeId = ci.m_instancingRenderer->registerShape(&cube_vertices[0],numVertices,cube_indices,numIndices); @@ -596,28 +596,28 @@ void ConcaveCompoundScene::createDynamicObjects(const ConstructionInfo& ci) int childColIndex = m_data->m_np->registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); -btVector3 childPositions[3] = { - btVector3(0,-2,0), - btVector3(0,0,0), - btVector3(0,0,2) +b3Vector3 childPositions[3] = { + b3Vector3(0,-2,0), + b3Vector3(0,0,0), + b3Vector3(0,0,2) }; - btAlignedObjectArray childShapes; + b3AlignedObjectArray childShapes; int numChildShapes = 3; for (int i=0;i vertexArray; - btAlignedObjectArray indexArray; + b3AlignedObjectArray vertexArray; + b3AlignedObjectArray indexArray; { int childColIndex = m_data->m_np->registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); - btVector3 childPositions[3] = { - btVector3(0,-2,0), - btVector3(0,0,0), - btVector3(0,0,2) + b3Vector3 childPositions[3] = { + b3Vector3(0,-2,0), + b3Vector3(0,0,0), + b3Vector3(0,0,2) }; - btAlignedObjectArray childShapes; + b3AlignedObjectArray childShapes; int numChildShapes = 3; for (int i=0;im_np->registerSphereShape(radius);//>registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); float mass = 0.f; - //btVector3 position((j&1)+i*2.2,1+j*2.,(j&1)+k*2.2); - btVector3 position(0,-41,0); + //b3Vector3 position((j&1)+i*2.2,1+j*2.,(j&1)+k*2.2); + b3Vector3 position(0,-41,0); - btQuaternion orn(0,0,0,1); + b3Quaternion orn(0,0,0,1); btVector4 color = colors[curColor]; curColor++; @@ -232,12 +232,12 @@ void GpuCompoundPlaneScene::createStaticEnvironment(const ConstructionInfo& ci) { int index=0; - btVector3 normal(0,1,0); + b3Vector3 normal(0,1,0); float constant=0.f; int colIndex = m_data->m_np->registerPlaneShape(normal,constant);//>registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); - btVector3 position(0,0,0); - btQuaternion orn(0,0,0,1); - // btQuaternion orn(btVector3(1,0,0),0.3); + b3Vector3 position(0,0,0); + b3Quaternion orn(0,0,0,1); + // b3Quaternion orn(b3Vector3(1,0,0),0.3); btVector4 color(0,0,1,1); btVector4 scaling(100,0.01,100,1); int strideInBytes = 9*sizeof(float); diff --git a/demo/gpudemo/rigidbody/GpuConvexScene.cpp b/demo/gpudemo/rigidbody/GpuConvexScene.cpp index 9fc5e0acc..2157f6a08 100644 --- a/demo/gpudemo/rigidbody/GpuConvexScene.cpp +++ b/demo/gpudemo/rigidbody/GpuConvexScene.cpp @@ -1,10 +1,10 @@ #include "GpuConvexScene.h" #include "GpuRigidBodyDemo.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "OpenGLWindow/ShapeData.h" #include "OpenGLWindow/GLInstancingRenderer.h" -#include "BulletCommon/btQuaternion.h" +#include "BulletCommon/b3Quaternion.h" #include "OpenGLWindow/btgWindowInterface.h" #include "gpu_broadphase/host/b3GpuSapBroadphase.h" #include "../GpuDemoInternalData.h" @@ -91,10 +91,10 @@ int GpuConvexScene::createDynamicsObjects2(const ConstructionInfo& ci, const flo { float mass = 1.f; - btVector3 position((j&1)+i*2.2,1+j*2.,(j&1)+k*2.2); - //btVector3 position(i*2.2,1+j*2.,k*2.2); + b3Vector3 position((j&1)+i*2.2,1+j*2.,(j&1)+k*2.2); + //b3Vector3 position(i*2.2,1+j*2.,k*2.2); - btQuaternion orn(0,0,0,1); + b3Quaternion orn(0,0,0,1); btVector4 color = colors[curColor]; curColor++; @@ -126,8 +126,8 @@ void GpuConvexScene::createStaticEnvironment(const ConstructionInfo& ci) { btVector4 scaling(400,1,400,1); int colIndex = m_data->m_np->registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); - btVector3 position(0,0,0); - btQuaternion orn(0,0,0,1); + b3Vector3 position(0,0,0); + b3Quaternion orn(0,0,0,1); btVector4 color(0,0,1,1); @@ -140,12 +140,12 @@ void GpuConvexScene::createStaticEnvironment(const ConstructionInfo& ci) void GpuConvexPlaneScene::createStaticEnvironment(const ConstructionInfo& ci) { int index=0; - btVector3 normal(0,1,0); + b3Vector3 normal(0,1,0); float constant=0.f; int colIndex = m_data->m_np->registerPlaneShape(normal,constant);//>registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); - btVector3 position(0,0,0); - btQuaternion orn(0,0,0,1); - // btQuaternion orn(btVector3(1,0,0),0.3); + b3Vector3 position(0,0,0); + b3Quaternion orn(0,0,0,1); + // b3Quaternion orn(b3Vector3(1,0,0),0.3); btVector4 color(0,0,1,1); btVector4 scaling(100,0.001,100,1); int strideInBytes = 9*sizeof(float); diff --git a/demo/gpudemo/rigidbody/GpuRigidBodyDemo.cpp b/demo/gpudemo/rigidbody/GpuRigidBodyDemo.cpp index 969c30e7d..2eb22e677 100644 --- a/demo/gpudemo/rigidbody/GpuRigidBodyDemo.cpp +++ b/demo/gpudemo/rigidbody/GpuRigidBodyDemo.cpp @@ -1,8 +1,8 @@ #include "GpuRigidBodyDemo.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "OpenGLWindow/ShapeData.h" #include "OpenGLWindow/GLInstancingRenderer.h" -#include "BulletCommon/btQuaternion.h" +#include "BulletCommon/b3Quaternion.h" #include "OpenGLWindow/btgWindowInterface.h" #include "gpu_broadphase/host/b3GpuSapBroadphase.h" #include "../GpuDemoInternalData.h" diff --git a/demo/gpudemo/rigidbody/GpuRigidBodyDemoInternalData.h b/demo/gpudemo/rigidbody/GpuRigidBodyDemoInternalData.h index 5319a8b77..9cc52693d 100644 --- a/demo/gpudemo/rigidbody/GpuRigidBodyDemoInternalData.h +++ b/demo/gpudemo/rigidbody/GpuRigidBodyDemoInternalData.h @@ -3,7 +3,7 @@ #include "basic_initialize/b3OpenCLUtils.h" #include "parallel_primitives/host/btOpenCLArray.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" struct GpuRigidBodyDemoInternalData { diff --git a/demo/gpudemo/rigidbody/GpuSphereScene.cpp b/demo/gpudemo/rigidbody/GpuSphereScene.cpp index 26b2b1287..6c3931cbb 100644 --- a/demo/gpudemo/rigidbody/GpuSphereScene.cpp +++ b/demo/gpudemo/rigidbody/GpuSphereScene.cpp @@ -1,10 +1,10 @@ #include "GpuSphereScene.h" #include "GpuRigidBodyDemo.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "OpenGLWindow/ShapeData.h" #include "OpenGLWindow/GLInstancingRenderer.h" -#include "BulletCommon/btQuaternion.h" +#include "BulletCommon/b3Quaternion.h" #include "OpenGLWindow/btgWindowInterface.h" #include "gpu_broadphase/host/b3GpuSapBroadphase.h" #include "../GpuDemoInternalData.h" @@ -85,10 +85,10 @@ void GpuSphereScene::setupScene(const ConstructionInfo& ci) int colIndex = m_data->m_np->registerSphereShape(radius);//>registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); float mass = 0.f; - //btVector3 position((j&1)+i*2.2,1+j*2.,(j&1)+k*2.2); - btVector3 position(0,0,0); + //b3Vector3 position((j&1)+i*2.2,1+j*2.,(j&1)+k*2.2); + b3Vector3 position(0,0,0); - btQuaternion orn(0,0,0,1); + b3Quaternion orn(0,0,0,1); btVector4 color = colors[curColor]; curColor++; @@ -141,11 +141,11 @@ void GpuSphereScene::setupScene(const ConstructionInfo& ci) int i=0,j=0,k=0; float mass = 0.f; - btVector3 position(0,0,0); - //btVector3 position((j&1)+i*142.2,-51+j*142.,(j&1)+k*142.2); - //btVector3 position(0,-41,0);//0,0,0);//i*radius*3,-41+j*radius*3,k*radius*3); + b3Vector3 position(0,0,0); + //b3Vector3 position((j&1)+i*142.2,-51+j*142.,(j&1)+k*142.2); + //b3Vector3 position(0,-41,0);//0,0,0);//i*radius*3,-41+j*radius*3,k*radius*3); - btQuaternion orn(0,0,0,1); + b3Quaternion orn(0,0,0,1); btVector4 color = colors[curColor]; curColor++; @@ -165,7 +165,7 @@ void GpuSphereScene::setupScene(const ConstructionInfo& ci) int shapeId = ci.m_instancingRenderer->registerShape(&cube_vertices[0],numVertices,cube_indices,numIndices); btVector4 scaling(0.5,0.5,0.5,1);//1,1,1,1);//0.1,0.1,0.1,1); int colIndex = m_data->m_np->registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); - btVector3 normal(0,-1,0); + b3Vector3 normal(0,-1,0); float constant=2; @@ -176,8 +176,8 @@ void GpuSphereScene::setupScene(const ConstructionInfo& ci) { //int colIndex = m_data->m_np->registerPlaneShape(normal,constant);//>registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling); btVector4 position(2*i,70+k*2,2*j+8,0); - //btQuaternion orn(0,0,0,1); - btQuaternion orn(btVector3(1,0,0),0.3); + //b3Quaternion orn(0,0,0,1); + b3Quaternion orn(b3Vector3(1,0,0),0.3); btVector4 color(0,0,1,1); diff --git a/opencl/gpu_broadphase/host/b3GpuSapBroadphase.cpp b/opencl/gpu_broadphase/host/b3GpuSapBroadphase.cpp index b08ba53fa..22af300fe 100644 --- a/opencl/gpu_broadphase/host/b3GpuSapBroadphase.cpp +++ b/opencl/gpu_broadphase/host/b3GpuSapBroadphase.cpp @@ -1,14 +1,14 @@ #include "b3GpuSapBroadphase.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" #include "parallel_primitives/host/btLauncherCL.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "basic_initialize/b3OpenCLUtils.h" #include "../kernels/sapKernels.h" #include "../kernels/sapFastKernels.h" -#include "BulletCommon/btMinMax.h" +#include "BulletCommon/b3MinMax.h" b3GpuSapBroadphase::b3GpuSapBroadphase(cl_context ctx,cl_device_id device, cl_command_queue q ) @@ -77,8 +77,8 @@ b3GpuSapBroadphase::~b3GpuSapBroadphase() } /// conservative test for overlap between two aabbs -static bool TestAabbAgainstAabb2(const btVector3 &aabbMin1, const btVector3 &aabbMax1, - const btVector3 &aabbMin2, const btVector3 &aabbMax2) +static bool TestAabbAgainstAabb2(const b3Vector3 &aabbMin1, const b3Vector3 &aabbMax1, + const b3Vector3 &aabbMin2, const b3Vector3 &aabbMax2) { bool overlap = true; overlap = (aabbMin1.getX() > aabbMax2.getX() || aabbMax1.getX() < aabbMin2.getX()) ? false : overlap; @@ -192,7 +192,7 @@ void b3GpuSapBroadphase::calculateOverlappingPairsHost() } } - btAlignedObjectArray hostPairs; + b3AlignedObjectArray hostPairs; { int numSmallAabbs = m_smallAabbsCPU.size(); @@ -202,8 +202,8 @@ void b3GpuSapBroadphase::calculateOverlappingPairsHost() for (int j=i+1;jgetBufferCL(),numElements); numPairs = pairCount.at(0); //printf("overlapping pairs = %d\n",numPairs); - btAlignedObjectArray hostOoverlappingPairs; + b3AlignedObjectArray hostOoverlappingPairs; btOpenCLArray tmpGpuPairs(m_context,m_queue); tmpGpuPairs.setFromOpenCLBuffer(launcher.m_arrays[1]->getBufferCL(),numPairs ); @@ -520,7 +520,7 @@ void b3GpuSapBroadphase::writeAabbsToGpu() } -void b3GpuSapBroadphase::createLargeProxy(const btVector3& aabbMin, const btVector3& aabbMax, int userPtr ,short int collisionFilterGroup,short int collisionFilterMask) +void b3GpuSapBroadphase::createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr ,short int collisionFilterGroup,short int collisionFilterMask) { int index = userPtr; b3SapAabb aabb; @@ -535,7 +535,7 @@ void b3GpuSapBroadphase::createLargeProxy(const btVector3& aabbMin, const btVec m_allAabbsCPU.push_back(aabb); } -void b3GpuSapBroadphase::createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int userPtr ,short int collisionFilterGroup,short int collisionFilterMask) +void b3GpuSapBroadphase::createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr ,short int collisionFilterGroup,short int collisionFilterMask) { int index = userPtr; b3SapAabb aabb; diff --git a/opencl/gpu_broadphase/host/b3GpuSapBroadphase.h b/opencl/gpu_broadphase/host/b3GpuSapBroadphase.h index 5f26efc8a..eba284932 100644 --- a/opencl/gpu_broadphase/host/b3GpuSapBroadphase.h +++ b/opencl/gpu_broadphase/host/b3GpuSapBroadphase.h @@ -3,7 +3,7 @@ #include "parallel_primitives/host/btOpenCLArray.h" #include "parallel_primitives/host/btFillCL.h" //btInt2 -class btVector3; +class b3Vector3; #include "parallel_primitives/host/btRadixSort32CL.h" #include "b3SapAabb.h" @@ -25,19 +25,19 @@ class b3GpuSapBroadphase class btRadixSort32CL* m_sorter; ///test for 3d SAP - btAlignedObjectArray m_sortedAxisCPU[3][2]; + b3AlignedObjectArray m_sortedAxisCPU[3][2]; int m_currentBuffer; public: btOpenCLArray m_allAabbsGPU; - btAlignedObjectArray m_allAabbsCPU; + b3AlignedObjectArray m_allAabbsCPU; btOpenCLArray m_smallAabbsGPU; - btAlignedObjectArray m_smallAabbsCPU; + b3AlignedObjectArray m_smallAabbsCPU; btOpenCLArray m_largeAabbsGPU; - btAlignedObjectArray m_largeAabbsCPU; + b3AlignedObjectArray m_largeAabbsCPU; btOpenCLArray m_overlappingPairs; @@ -55,8 +55,8 @@ class b3GpuSapBroadphase void init3dSap(); void calculateOverlappingPairsHostIncremental3Sap(); - void createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int userPtr ,short int collisionFilterGroup,short int collisionFilterMask); - void createLargeProxy(const btVector3& aabbMin, const btVector3& aabbMax, int userPtr ,short int collisionFilterGroup,short int collisionFilterMask); + void createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr ,short int collisionFilterGroup,short int collisionFilterMask); + void createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr ,short int collisionFilterGroup,short int collisionFilterMask); //call writeAabbsToGpu after done making all changes (createProxy etc) void writeAabbsToGpu(); diff --git a/opencl/gpu_broadphase/test/main.cpp b/opencl/gpu_broadphase/test/main.cpp index 90fbb52d5..b12bdfa43 100644 --- a/opencl/gpu_broadphase/test/main.cpp +++ b/opencl/gpu_broadphase/test/main.cpp @@ -16,13 +16,13 @@ subject to the following restrictions: #include #include "../basic_initialize/b3OpenCLUtils.h" #include "../host/b3GpuSapBroadphase.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" #include "parallel_primitives/host/btFillCL.h" #include "parallel_primitives/host/btBoundSearchCL.h" #include "parallel_primitives/host/btRadixSort32CL.h" #include "parallel_primitives/host/btPrefixScanCL.h" -#include "BulletCommon/CommandLineArgs.h" -#include "BulletCommon/btMinMax.h" +#include "BulletCommon/b3CommandLineArgs.h" +#include "BulletCommon/b3MinMax.h" int g_nPassed = 0; int g_nFailed = 0; @@ -76,8 +76,8 @@ inline void broadphaseTest() b3GpuSapBroadphase* sap = new b3GpuSapBroadphase(g_context,g_device,g_queue); int group=1; int mask=1; - btVector3 aabbMin(0,0,0); - btVector3 aabbMax(1,1,1); + b3Vector3 aabbMin(0,0,0); + b3Vector3 aabbMax(1,1,1); int usrPtr = 1; sap->createProxy(aabbMin,aabbMax,usrPtr,group,mask); @@ -105,7 +105,7 @@ int main(int argc, char** argv) int preferredDeviceIndex = -1; int preferredPlatformIndex = -1; - CommandLineArgs args(argc, argv); + b3CommandLineArgs args(argc, argv); args.GetCmdLineArgument("deviceId", preferredDeviceIndex); args.GetCmdLineArgument("platformId", preferredPlatformIndex); diff --git a/opencl/gpu_broadphase/test/premake4.lua b/opencl/gpu_broadphase/test/premake4.lua index 7803cf673..f88090e1a 100644 --- a/opencl/gpu_broadphase/test/premake4.lua +++ b/opencl/gpu_broadphase/test/premake4.lua @@ -29,11 +29,11 @@ function createProject(vendor) "../../parallel_primitives/host/btPrefixScanCL.h", "../../parallel_primitives/host/btRadixSort32CL.cpp", "../../parallel_primitives/host/btRadixSort32CL.h", - "../../../src/BulletCommon/btAlignedAllocator.cpp", - "../../../src/BulletCommon/btAlignedAllocator.h", - "../../../src/BulletCommon/btAlignedObjectArray.h", - "../../../src/BulletCommon/btQuickprof.cpp", - "../../../src/BulletCommon/btQuickprof.h", + "../../../src/BulletCommon/b3AlignedAllocator.cpp", + "../../../src/BulletCommon/b3AlignedAllocator.h", + "../../../src/BulletCommon/b3AlignedObjectArray.h", + "../../../src/BulletCommon/b3Quickprof.cpp", + "../../../src/BulletCommon/b3Quickprof.h", } diff --git a/opencl/gpu_narrowphase/host/b3Contact4.h b/opencl/gpu_narrowphase/host/b3Contact4.h index 15e722d38..f316f825f 100644 --- a/opencl/gpu_narrowphase/host/b3Contact4.h +++ b/opencl/gpu_narrowphase/host/b3Contact4.h @@ -1,15 +1,15 @@ #ifndef BT_CONTACT4_H #define BT_CONTACT4_H -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" ATTRIBUTE_ALIGNED16(struct) b3Contact4 { BT_DECLARE_ALIGNED_ALLOCATOR(); - btVector3 m_worldPos[4]; - btVector3 m_worldNormal; + b3Vector3 m_worldPos[4]; + b3Vector3 m_worldNormal; // float m_restituitionCoeff; // float m_frictionCoeff; unsigned short m_restituitionCoeffCmp; diff --git a/opencl/gpu_narrowphase/host/b3ConvexHullContact.cpp b/opencl/gpu_narrowphase/host/b3ConvexHullContact.cpp index b0e32ec51..a80399497 100644 --- a/opencl/gpu_narrowphase/host/b3ConvexHullContact.cpp +++ b/opencl/gpu_narrowphase/host/b3ConvexHullContact.cpp @@ -25,8 +25,8 @@ subject to the following restrictions: #include "b3ConvexPolyhedronCL.h" -typedef btAlignedObjectArray btVertexArray; -#include "BulletCommon/btQuickprof.h" +typedef b3AlignedObjectArray btVertexArray; +#include "BulletCommon/b3Quickprof.h" #include //for FLT_MAX #include "basic_initialize/b3OpenCLUtils.h" @@ -219,7 +219,7 @@ struct MyTriangleCallback : public btNodeOverlapCallback }; -#define float4 btVector3 +#define float4 b3Vector3 #define make_float4(x,y,z,w) btVector4(x,y,z,w) float signedDistanceFromPointToPlane(const float4& point, const float4& planeEqn, float4* closestPointOnFace) @@ -234,14 +234,14 @@ float signedDistanceFromPointToPlane(const float4& point, const float4& planeEqn #define cross3(a,b) (a.cross(b)) -btVector3 transform(btVector3* v, const btVector3* pos, const btVector3* orn) +b3Vector3 transform(b3Vector3* v, const b3Vector3* pos, const b3Vector3* orn) { - btTransform tr; + b3Transform tr; tr.setIdentity(); tr.setOrigin(*pos); - btQuaternion* o = (btQuaternion*) orn; + b3Quaternion* o = (b3Quaternion*) orn; tr.setRotation(*o); - btVector3 res = tr(*v); + b3Vector3 res = tr(*v); return res; } @@ -411,7 +411,7 @@ void computeContactPlaneConvex(int pairIndex, const b3RigidBodyCL* rigidBodies, const b3Collidable* collidables, const b3ConvexPolyhedronCL* convexShapes, - const btVector3* convexVertices, + const b3Vector3* convexVertices, const int* convexIndices, const btGpuFace* faces, b3Contact4* globalContactsOut, @@ -422,40 +422,40 @@ void computeContactPlaneConvex(int pairIndex, int shapeIndex = collidables[collidableIndexB].m_shapeIndex; const b3ConvexPolyhedronCL* hullB = &convexShapes[shapeIndex]; - btVector3 posB = rigidBodies[bodyIndexB].m_pos; - btQuaternion ornB = rigidBodies[bodyIndexB].m_quat; - btVector3 posA = rigidBodies[bodyIndexA].m_pos; - btQuaternion ornA = rigidBodies[bodyIndexA].m_quat; + b3Vector3 posB = rigidBodies[bodyIndexB].m_pos; + b3Quaternion ornB = rigidBodies[bodyIndexB].m_quat; + b3Vector3 posA = rigidBodies[bodyIndexA].m_pos; + b3Quaternion ornA = rigidBodies[bodyIndexA].m_quat; int numContactsOut = 0; int numWorldVertsB1= 0; - btVector3 planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane; - btVector3 planeNormal(planeEq.x,planeEq.y,planeEq.z); - btVector3 planeNormalWorld = quatRotate(ornA,planeNormal); + b3Vector3 planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane; + b3Vector3 planeNormal(planeEq.x,planeEq.y,planeEq.z); + b3Vector3 planeNormalWorld = quatRotate(ornA,planeNormal); float planeConstant = planeEq.w; - btTransform convexWorldTransform; + b3Transform convexWorldTransform; convexWorldTransform.setIdentity(); convexWorldTransform.setOrigin(posB); convexWorldTransform.setRotation(ornB); - btTransform planeTransform; + b3Transform planeTransform; planeTransform.setIdentity(); planeTransform.setOrigin(posA); planeTransform.setRotation(ornA); - btTransform planeInConvex; + b3Transform planeInConvex; planeInConvex= convexWorldTransform.inverse() * planeTransform; - btTransform convexInPlane; + b3Transform convexInPlane; convexInPlane = planeTransform.inverse() * convexWorldTransform; - btVector3 planeNormalInConvex = planeInConvex.getBasis()*-planeNormal; + b3Vector3 planeNormalInConvex = planeInConvex.getBasis()*-planeNormal; float maxDot = -1e30; int hitVertex=-1; - btVector3 hitVtx; + b3Vector3 hitVtx; #define MAX_PLANE_CONVEX_POINTS 64 - btVector3 contactPoints[MAX_PLANE_CONVEX_POINTS]; + b3Vector3 contactPoints[MAX_PLANE_CONVEX_POINTS]; int numPoints = 0; btInt4 contactIdx; @@ -466,7 +466,7 @@ void computeContactPlaneConvex(int pairIndex, for (int i=0;im_numVertices;i++) { - btVector3 vtx = convexVertices[hullB->m_vertexOffset+i]; + b3Vector3 vtx = convexVertices[hullB->m_vertexOffset+i]; float curDot = vtx.dot(planeNormalInConvex); @@ -482,8 +482,8 @@ void computeContactPlaneConvex(int pairIndex, if (numPointsm_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB; for (int i=0;im_worldPos[i] = pOnB1; } c->m_worldNormal[3] = numReducedPoints; @@ -544,7 +544,7 @@ void computeContactPlaneCompound(int pairIndex, const b3RigidBodyCL* rigidBodies, const b3Collidable* collidables, const b3ConvexPolyhedronCL* convexShapes, - const btVector3* convexVertices, + const b3Vector3* convexVertices, const int* convexIndices, const btGpuFace* faces, b3Contact4* globalContactsOut, @@ -560,40 +560,40 @@ void computeContactPlaneCompound(int pairIndex, int shapeIndex = collidables[collidableIndexB].m_shapeIndex; const b3ConvexPolyhedronCL* hullB = &convexShapes[shapeIndex]; - btVector3 posB = rigidBodies[bodyIndexB].m_pos; - btQuaternion ornB = rigidBodies[bodyIndexB].m_quat; - btVector3 posA = rigidBodies[bodyIndexA].m_pos; - btQuaternion ornA = rigidBodies[bodyIndexA].m_quat; + b3Vector3 posB = rigidBodies[bodyIndexB].m_pos; + b3Quaternion ornB = rigidBodies[bodyIndexB].m_quat; + b3Vector3 posA = rigidBodies[bodyIndexA].m_pos; + b3Quaternion ornA = rigidBodies[bodyIndexA].m_quat; int numContactsOut = 0; int numWorldVertsB1= 0; - btVector3 planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane; - btVector3 planeNormal(planeEq.x,planeEq.y,planeEq.z); - btVector3 planeNormalWorld = quatRotate(ornA,planeNormal); + b3Vector3 planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane; + b3Vector3 planeNormal(planeEq.x,planeEq.y,planeEq.z); + b3Vector3 planeNormalWorld = quatRotate(ornA,planeNormal); float planeConstant = planeEq.w; - btTransform convexWorldTransform; + b3Transform convexWorldTransform; convexWorldTransform.setIdentity(); convexWorldTransform.setOrigin(posB); convexWorldTransform.setRotation(ornB); - btTransform planeTransform; + b3Transform planeTransform; planeTransform.setIdentity(); planeTransform.setOrigin(posA); planeTransform.setRotation(ornA); - btTransform planeInConvex; + b3Transform planeInConvex; planeInConvex= convexWorldTransform.inverse() * planeTransform; - btTransform convexInPlane; + b3Transform convexInPlane; convexInPlane = planeTransform.inverse() * convexWorldTransform; - btVector3 planeNormalInConvex = planeInConvex.getBasis()*-planeNormal; + b3Vector3 planeNormalInConvex = planeInConvex.getBasis()*-planeNormal; float maxDot = -1e30; int hitVertex=-1; - btVector3 hitVtx; + b3Vector3 hitVtx; #define MAX_PLANE_CONVEX_POINTS 64 - btVector3 contactPoints[MAX_PLANE_CONVEX_POINTS]; + b3Vector3 contactPoints[MAX_PLANE_CONVEX_POINTS]; int numPoints = 0; btInt4 contactIdx; @@ -604,7 +604,7 @@ void computeContactPlaneCompound(int pairIndex, for (int i=0;im_numVertices;i++) { - btVector3 vtx = convexVertices[hullB->m_vertexOffset+i]; + b3Vector3 vtx = convexVertices[hullB->m_vertexOffset+i]; float curDot = vtx.dot(planeNormalInConvex); @@ -620,8 +620,8 @@ void computeContactPlaneCompound(int pairIndex, if (numPointsm_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB; for (int i=0;im_worldPos[i] = pOnB1; } c->m_worldNormal[3] = numReducedPoints; @@ -683,7 +683,7 @@ void computeContactSphereConvex(int pairIndex, const b3RigidBodyCL* rigidBodies, const b3Collidable* collidables, const b3ConvexPolyhedronCL* convexShapes, - const btVector3* convexVertices, + const b3Vector3* convexVertices, const int* convexIndices, const btGpuFace* faces, b3Contact4* globalContactsOut, @@ -693,20 +693,20 @@ void computeContactSphereConvex(int pairIndex, float radius = collidables[collidableIndexA].m_radius; float4 spherePos1 = rigidBodies[bodyIndexA].m_pos; - btQuaternion sphereOrn = rigidBodies[bodyIndexA].m_quat; + b3Quaternion sphereOrn = rigidBodies[bodyIndexA].m_quat; float4 pos = rigidBodies[bodyIndexB].m_pos; - btQuaternion quat = rigidBodies[bodyIndexB].m_quat; + b3Quaternion quat = rigidBodies[bodyIndexB].m_quat; - btTransform tr; + b3Transform tr; tr.setIdentity(); tr.setOrigin(pos); tr.setRotation(quat); - btTransform trInv = tr.inverse(); + b3Transform trInv = tr.inverse(); float4 spherePos = trInv(spherePos1); @@ -740,7 +740,7 @@ void computeContactSphereConvex(int pairIndex, if ( dist > 0 ) { //might hit an edge or vertex - btVector3 out; + b3Vector3 out; bool isInPoly = IsPointInPolygon(spherePos, &face, @@ -758,8 +758,8 @@ void computeContactSphereConvex(int pairIndex, } } else { - btVector3 tmp = spherePos-out; - btScalar l2 = tmp.length2(); + b3Vector3 tmp = spherePos-out; + b3Scalar l2 = tmp.length2(); if (l2* contactOut, int& nContacts, int maxContactCapacity, const btOpenCLArray& convexData, - const btOpenCLArray& gpuVertices, - const btOpenCLArray& gpuUniqueEdges, + const btOpenCLArray& gpuVertices, + const btOpenCLArray& gpuUniqueEdges, const btOpenCLArray& gpuFaces, const btOpenCLArray& gpuIndices, const btOpenCLArray& gpuCollidables, const btOpenCLArray& gpuChildShapes, const btOpenCLArray& clAabbsWS, - btOpenCLArray& worldVertsB1GPU, + btOpenCLArray& worldVertsB1GPU, btOpenCLArray& clippingFacesOutGPU, - btOpenCLArray& worldNormalsAGPU, - btOpenCLArray& worldVertsA1GPU, - btOpenCLArray& worldVertsB2GPU, - btAlignedObjectArray& bvhData, + btOpenCLArray& worldNormalsAGPU, + btOpenCLArray& worldVertsA1GPU, + btOpenCLArray& worldVertsB2GPU, + b3AlignedObjectArray& bvhData, btOpenCLArray* treeNodesGPU, btOpenCLArray* subTreesGPU, int numObjects, @@ -865,38 +865,38 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const btOpenCLArray hostAabbs; + b3AlignedObjectArray hostAabbs; clAabbsWS.copyToHost(hostAabbs); - btAlignedObjectArray hostPairs; + b3AlignedObjectArray hostPairs; pairs->copyToHost(hostPairs); - btAlignedObjectArray hostBodyBuf; + b3AlignedObjectArray hostBodyBuf; bodyBuf->copyToHost(hostBodyBuf); - btAlignedObjectArray hostConvexData; + b3AlignedObjectArray hostConvexData; convexData.copyToHost(hostConvexData); - btAlignedObjectArray hostVertices; + b3AlignedObjectArray hostVertices; gpuVertices.copyToHost(hostVertices); - btAlignedObjectArray hostUniqueEdges; + b3AlignedObjectArray hostUniqueEdges; gpuUniqueEdges.copyToHost(hostUniqueEdges); - btAlignedObjectArray hostFaces; + b3AlignedObjectArray hostFaces; gpuFaces.copyToHost(hostFaces); - btAlignedObjectArray hostIndices; + b3AlignedObjectArray hostIndices; gpuIndices.copyToHost(hostIndices); - btAlignedObjectArray hostCollidables; + b3AlignedObjectArray hostCollidables; gpuCollidables.copyToHost(hostCollidables); - btAlignedObjectArray cpuChildShapes; + b3AlignedObjectArray cpuChildShapes; gpuChildShapes.copyToHost(cpuChildShapes); - btAlignedObjectArray hostTriangleConvexPairs; + b3AlignedObjectArray hostTriangleConvexPairs; - btAlignedObjectArray hostContacts; + b3AlignedObjectArray hostContacts; if (nContacts) { contactOut->copyToHost(hostContacts); @@ -1013,13 +1013,13 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const btOpenCLArray sepNormals(m_context,m_queue); + btOpenCLArray sepNormals(m_context,m_queue); sepNormals.resize(nPairs); btOpenCLArray hasSeparatingNormals(m_context,m_queue); hasSeparatingNormals.resize(nPairs); int concaveCapacity=maxTriConvexPairCapacity; - btOpenCLArray concaveSepNormals(m_context,m_queue); + btOpenCLArray concaveSepNormals(m_context,m_queue); concaveSepNormals.resize(concaveCapacity); btOpenCLArray numConcavePairsOut(m_context,m_queue); @@ -1029,7 +1029,7 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const btOpenCLArray gpuCompoundPairs(m_context,m_queue); gpuCompoundPairs.resize(compoundPairCapacity); - btOpenCLArray gpuCompoundSepNormals(m_context,m_queue); + btOpenCLArray gpuCompoundSepNormals(m_context,m_queue); gpuCompoundSepNormals.resize(compoundPairCapacity); @@ -1081,9 +1081,9 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const btOpenCLArraysize(); - btVector3 bvhAabbMin = bvhData[0]->m_bvhAabbMin; - btVector3 bvhAabbMax = bvhData[0]->m_bvhAabbMax; - btVector3 bvhQuantization = bvhData[0]->m_bvhQuantization; + b3Vector3 bvhAabbMin = bvhData[0]->m_bvhAabbMin; + b3Vector3 bvhAabbMax = bvhData[0]->m_bvhAabbMax; + b3Vector3 bvhQuantization = bvhData[0]->m_bvhQuantization; { BT_PROFILE("m_bvhTraversalKernel"); numConcavePairs = numConcavePairsOut.at(0); @@ -1142,9 +1142,9 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const btOpenCLArray cpuCompoundSepNormals; +// b3AlignedObjectArray cpuCompoundSepNormals; // concaveSepNormals.copyToHost(cpuCompoundSepNormals); - // btAlignedObjectArray cpuConcavePairs; + // b3AlignedObjectArray cpuConcavePairs; // triangleConvexPairsOut.copyToHost(cpuConcavePairs); @@ -1355,7 +1355,7 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const btOpenCLArrayresize(nContacts); - btAlignedObjectArray cpuContacts; + b3AlignedObjectArray cpuContacts; contactOut->copyToHost(cpuContacts); // printf("nContacts after = %d\n", nContacts); } diff --git a/opencl/gpu_narrowphase/host/b3ConvexHullContact.h b/opencl/gpu_narrowphase/host/b3ConvexHullContact.h index 52d61234a..19562cb24 100644 --- a/opencl/gpu_narrowphase/host/b3ConvexHullContact.h +++ b/opencl/gpu_narrowphase/host/b3ConvexHullContact.h @@ -4,7 +4,7 @@ #include "parallel_primitives/host/btOpenCLArray.h" #include "b3RigidBodyCL.h" -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedObjectArray.h" #include "b3ConvexUtility.h" #include "b3ConvexPolyhedronCL.h" #include "b3Collidable.h" @@ -69,20 +69,20 @@ struct GpuSatCollision btOpenCLArray* contactOut, int& nContacts, int maxContactCapacity, const btOpenCLArray& hostConvexData, - const btOpenCLArray& vertices, - const btOpenCLArray& uniqueEdges, + const btOpenCLArray& vertices, + const btOpenCLArray& uniqueEdges, const btOpenCLArray& faces, const btOpenCLArray& indices, const btOpenCLArray& gpuCollidables, const btOpenCLArray& gpuChildShapes, const btOpenCLArray& clAabbs, - btOpenCLArray& worldVertsB1GPU, + btOpenCLArray& worldVertsB1GPU, btOpenCLArray& clippingFacesOutGPU, - btOpenCLArray& worldNormalsAGPU, - btOpenCLArray& worldVertsA1GPU, - btOpenCLArray& worldVertsB2GPU, - btAlignedObjectArray& bvhData, + btOpenCLArray& worldNormalsAGPU, + btOpenCLArray& worldVertsA1GPU, + btOpenCLArray& worldVertsB2GPU, + b3AlignedObjectArray& bvhData, btOpenCLArray* treeNodesGPU, btOpenCLArray* subTreesGPU, int numObjects, diff --git a/opencl/gpu_narrowphase/host/b3ConvexPolyhedronCL.h b/opencl/gpu_narrowphase/host/b3ConvexPolyhedronCL.h index a20fc3eb3..ce3572154 100644 --- a/opencl/gpu_narrowphase/host/b3ConvexPolyhedronCL.h +++ b/opencl/gpu_narrowphase/host/b3ConvexPolyhedronCL.h @@ -1,7 +1,7 @@ #ifndef CONVEX_POLYHEDRON_CL #define CONVEX_POLYHEDRON_CL -#include "BulletCommon/btTransform.h" +#include "BulletCommon/b3Transform.h" struct btGpuFace { @@ -12,12 +12,12 @@ struct btGpuFace ATTRIBUTE_ALIGNED16(struct) b3ConvexPolyhedronCL { - btVector3 m_localCenter; - btVector3 m_extents; - btVector3 mC; - btVector3 mE; + b3Vector3 m_localCenter; + b3Vector3 m_extents; + b3Vector3 mC; + b3Vector3 mE; - btScalar m_radius; + b3Scalar m_radius; int m_faceOffset; int m_numFaces; int m_numVertices; @@ -29,29 +29,29 @@ ATTRIBUTE_ALIGNED16(struct) b3ConvexPolyhedronCL - inline void project(const btTransform& trans, const btVector3& dir, const btAlignedObjectArray& vertices, btScalar& min, btScalar& max) const + inline void project(const b3Transform& trans, const b3Vector3& dir, const b3AlignedObjectArray& vertices, b3Scalar& min, b3Scalar& max) const { min = FLT_MAX; max = -FLT_MAX; int numVerts = m_numVertices; - const btVector3 localDir = trans.getBasis().transpose()*dir; - const btVector3 localDi2 = quatRotate(trans.getRotation().inverse(),dir); + const b3Vector3 localDir = trans.getBasis().transpose()*dir; + const b3Vector3 localDi2 = quatRotate(trans.getRotation().inverse(),dir); - btScalar offset = trans.getOrigin().dot(dir); + b3Scalar offset = trans.getOrigin().dot(dir); for(int i=0;i max) max = dp; } if(min>max) { - btScalar tmp = min; + b3Scalar tmp = min; min = max; max = tmp; } diff --git a/opencl/gpu_narrowphase/host/b3ConvexUtility.cpp b/opencl/gpu_narrowphase/host/b3ConvexUtility.cpp index 090a92cb8..510dd7667 100644 --- a/opencl/gpu_narrowphase/host/b3ConvexUtility.cpp +++ b/opencl/gpu_narrowphase/host/b3ConvexUtility.cpp @@ -17,8 +17,8 @@ subject to the following restrictions: #include "b3ConvexUtility.h" #include "BulletGeometry/btConvexHullComputer.h" #include "BulletGeometry/btGrahamScan2dConvexHull.h" -#include "BulletCommon/btQuaternion.h" -#include "BulletCommon/btHashMap.h" +#include "BulletCommon/b3Quaternion.h" +#include "BulletCommon/b3HashMap.h" #include "b3ConvexPolyhedronCL.h" @@ -28,21 +28,21 @@ b3ConvexUtility::~b3ConvexUtility() { } -bool b3ConvexUtility::initializePolyhedralFeatures(const btVector3* orgVertices, int numPoints, bool mergeCoplanarTriangles) +bool b3ConvexUtility::initializePolyhedralFeatures(const b3Vector3* orgVertices, int numPoints, bool mergeCoplanarTriangles) { btConvexHullComputer conv; - conv.compute(&orgVertices[0].getX(), sizeof(btVector3),numPoints,0.f,0.f); + conv.compute(&orgVertices[0].getX(), sizeof(b3Vector3),numPoints,0.f,0.f); - btAlignedObjectArray faceNormals; + b3AlignedObjectArray faceNormals; int numFaces = conv.faces.size(); faceNormals.resize(numFaces); btConvexHullComputer* convexUtil = &conv; - btAlignedObjectArray tmpFaces; + b3AlignedObjectArray tmpFaces; tmpFaces.resize(numFaces); int numVertices = convexUtil->vertices.size(); @@ -60,7 +60,7 @@ bool b3ConvexUtility::initializePolyhedralFeatures(const btVector3* orgVertices, const btConvexHullComputer::Edge* firstEdge = &convexUtil->edges[face]; const btConvexHullComputer::Edge* edge = firstEdge; - btVector3 edges[3]; + b3Vector3 edges[3]; int numEdges = 0; //compute face normals @@ -70,10 +70,10 @@ bool b3ConvexUtility::initializePolyhedralFeatures(const btVector3* orgVertices, int src = edge->getSourceVertex(); tmpFaces[i].m_indices.push_back(src); int targ = edge->getTargetVertex(); - btVector3 wa = convexUtil->vertices[src]; + b3Vector3 wa = convexUtil->vertices[src]; - btVector3 wb = convexUtil->vertices[targ]; - btVector3 newEdge = wb-wa; + b3Vector3 wb = convexUtil->vertices[targ]; + b3Vector3 newEdge = wb-wa; newEdge.normalize(); if (numEdges<2) edges[numEdges++] = newEdge; @@ -81,7 +81,7 @@ bool b3ConvexUtility::initializePolyhedralFeatures(const btVector3* orgVertices, edge = edge->getNextEdgeOfFace(); } while (edge!=firstEdge); - btScalar planeEq = 1e30f; + b3Scalar planeEq = 1e30f; if (numEdges==2) @@ -102,7 +102,7 @@ bool b3ConvexUtility::initializePolyhedralFeatures(const btVector3* orgVertices, for (int v=0;veq) { planeEq=eq; @@ -113,26 +113,26 @@ bool b3ConvexUtility::initializePolyhedralFeatures(const btVector3* orgVertices, //merge coplanar faces and copy them to m_polyhedron - btScalar faceWeldThreshold= 0.999f; - btAlignedObjectArray todoFaces; + b3Scalar faceWeldThreshold= 0.999f; + b3AlignedObjectArray todoFaces; for (int i=0;i coplanarFaceGroup; + b3AlignedObjectArray coplanarFaceGroup; int refFace = todoFaces[todoFaces.size()-1]; coplanarFaceGroup.push_back(refFace); btMyFace& faceA = tmpFaces[refFace]; todoFaces.pop_back(); - btVector3 faceNormalA(faceA.m_plane[0],faceA.m_plane[1],faceA.m_plane[2]); + b3Vector3 faceNormalA(faceA.m_plane[0],faceA.m_plane[1],faceA.m_plane[2]); for (int j=todoFaces.size()-1;j>=0;j--) { int i = todoFaces[j]; btMyFace& faceB = tmpFaces[i]; - btVector3 faceNormalB(faceB.m_plane[0],faceB.m_plane[1],faceB.m_plane[2]); + b3Vector3 faceNormalB(faceB.m_plane[0],faceB.m_plane[1],faceB.m_plane[2]); if (faceNormalA.dot(faceNormalB)>faceWeldThreshold) { coplanarFaceGroup.push_back(i); @@ -146,20 +146,20 @@ bool b3ConvexUtility::initializePolyhedralFeatures(const btVector3* orgVertices, { //do the merge: use Graham Scan 2d convex hull - btAlignedObjectArray orgpoints; - btVector3 averageFaceNormal(0,0,0); + b3AlignedObjectArray orgpoints; + b3Vector3 averageFaceNormal(0,0,0); for (int i=0;im_faces.push_back(tmpFaces[coplanarFaceGroup[i]]); btMyFace& face = tmpFaces[coplanarFaceGroup[i]]; - btVector3 faceNormal(face.m_plane[0],face.m_plane[1],face.m_plane[2]); + b3Vector3 faceNormal(face.m_plane[0],face.m_plane[1],face.m_plane[2]); averageFaceNormal+=faceNormal; for (int f=0;f hull; + b3AlignedObjectArray hull; averageFaceNormal.normalize(); GrahamScanConvexHull2D(orgpoints,hull,averageFaceNormal); @@ -269,7 +269,7 @@ bool b3ConvexUtility::initializePolyhedralFeatures(const btVector3* orgVertices, -inline bool IsAlmostZero(const btVector3& v) +inline bool IsAlmostZero(const b3Vector3& v) { if(fabsf(v.getX())>1e-6 || fabsf(v.getY())>1e-6 || fabsf(v.getZ())>1e-6) return false; return true; @@ -314,20 +314,20 @@ bool b3ConvexUtility::testContainment() const { for(int p=0;p<8;p++) { - btVector3 LocalPt; - if(p==0) LocalPt = m_localCenter + btVector3(m_extents[0], m_extents[1], m_extents[2]); - else if(p==1) LocalPt = m_localCenter + btVector3(m_extents[0], m_extents[1], -m_extents[2]); - else if(p==2) LocalPt = m_localCenter + btVector3(m_extents[0], -m_extents[1], m_extents[2]); - else if(p==3) LocalPt = m_localCenter + btVector3(m_extents[0], -m_extents[1], -m_extents[2]); - else if(p==4) LocalPt = m_localCenter + btVector3(-m_extents[0], m_extents[1], m_extents[2]); - else if(p==5) LocalPt = m_localCenter + btVector3(-m_extents[0], m_extents[1], -m_extents[2]); - else if(p==6) LocalPt = m_localCenter + btVector3(-m_extents[0], -m_extents[1], m_extents[2]); - else if(p==7) LocalPt = m_localCenter + btVector3(-m_extents[0], -m_extents[1], -m_extents[2]); + b3Vector3 LocalPt; + if(p==0) LocalPt = m_localCenter + b3Vector3(m_extents[0], m_extents[1], m_extents[2]); + else if(p==1) LocalPt = m_localCenter + b3Vector3(m_extents[0], m_extents[1], -m_extents[2]); + else if(p==2) LocalPt = m_localCenter + b3Vector3(m_extents[0], -m_extents[1], m_extents[2]); + else if(p==3) LocalPt = m_localCenter + b3Vector3(m_extents[0], -m_extents[1], -m_extents[2]); + else if(p==4) LocalPt = m_localCenter + b3Vector3(-m_extents[0], m_extents[1], m_extents[2]); + else if(p==5) LocalPt = m_localCenter + b3Vector3(-m_extents[0], m_extents[1], -m_extents[2]); + else if(p==6) LocalPt = m_localCenter + b3Vector3(-m_extents[0], -m_extents[1], m_extents[2]); + else if(p==7) LocalPt = m_localCenter + b3Vector3(-m_extents[0], -m_extents[1], -m_extents[2]); for(int i=0;i0.0f) return false; } @@ -339,9 +339,9 @@ bool b3ConvexUtility::testContainment() const void b3ConvexUtility::initialize() { - btHashMap edges; + b3HashMap edges; - btScalar TotalArea = 0.0f; + b3Scalar TotalArea = 0.0f; m_localCenter.setValue(0, 0, 0); for(int i=0;iMaxX) MaxX = pt.getX(); if(pt.getY() m_indices; - btScalar m_plane[4]; + b3AlignedObjectArray m_indices; + b3Scalar m_plane[4]; }; ATTRIBUTE_ALIGNED16(class) b3ConvexUtility @@ -34,15 +34,15 @@ ATTRIBUTE_ALIGNED16(class) b3ConvexUtility public: BT_DECLARE_ALIGNED_ALLOCATOR(); - btVector3 m_localCenter; - btVector3 m_extents; - btVector3 mC; - btVector3 mE; - btScalar m_radius; + b3Vector3 m_localCenter; + b3Vector3 m_extents; + b3Vector3 mC; + b3Vector3 mE; + b3Scalar m_radius; - btAlignedObjectArray m_vertices; - btAlignedObjectArray m_faces; - btAlignedObjectArray m_uniqueEdges; + b3AlignedObjectArray m_vertices; + b3AlignedObjectArray m_faces; + b3AlignedObjectArray m_uniqueEdges; b3ConvexUtility() @@ -50,7 +50,7 @@ ATTRIBUTE_ALIGNED16(class) b3ConvexUtility } virtual ~b3ConvexUtility(); - bool initializePolyhedralFeatures(const btVector3* orgVertices, int numVertices, bool mergeCoplanarTriangles=true); + bool initializePolyhedralFeatures(const b3Vector3* orgVertices, int numVertices, bool mergeCoplanarTriangles=true); void initialize(); bool testContainment() const; diff --git a/opencl/gpu_narrowphase/host/b3OptimizedBvh.cpp b/opencl/gpu_narrowphase/host/b3OptimizedBvh.cpp index 23db14423..a220a3425 100644 --- a/opencl/gpu_narrowphase/host/b3OptimizedBvh.cpp +++ b/opencl/gpu_narrowphase/host/b3OptimizedBvh.cpp @@ -17,7 +17,6 @@ subject to the following restrictions: #include "b3OptimizedBvh.h" #include "b3StridingMeshInterface.h" #include "BulletGeometry/btAabbUtil2.h" -#include "BulletCommon/btIDebugDraw.h" b3OptimizedBvh::b3OptimizedBvh() @@ -29,7 +28,7 @@ b3OptimizedBvh::~b3OptimizedBvh() } -void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantizedAabbCompression, const btVector3& bvhAabbMin, const btVector3& bvhAabbMax) +void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantizedAabbCompression, const b3Vector3& bvhAabbMin, const b3Vector3& bvhAabbMax) { m_useQuantization = useQuantizedAabbCompression; @@ -52,12 +51,12 @@ void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantized { } - virtual void internalProcessTriangleIndex(btVector3* triangle,int partId,int triangleIndex) + virtual void internalProcessTriangleIndex(b3Vector3* triangle,int partId,int triangleIndex) { btOptimizedBvhNode node; - btVector3 aabbMin,aabbMax; - aabbMin.setValue(btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT)); - aabbMax.setValue(btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT)); + b3Vector3 aabbMin,aabbMax; + aabbMin.setValue(b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT)); + aabbMax.setValue(b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT)); aabbMin.setMin(triangle[0]); aabbMax.setMax(triangle[0]); aabbMin.setMin(triangle[1]); @@ -94,7 +93,7 @@ void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantized { } - virtual void internalProcessTriangleIndex(btVector3* triangle,int partId,int triangleIndex) + virtual void internalProcessTriangleIndex(b3Vector3* triangle,int partId,int triangleIndex) { // The partId and triangle index must fit in the same (positive) integer btAssert(partId < (1<=0); btQuantizedBvhNode node; - btVector3 aabbMin,aabbMax; - aabbMin.setValue(btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT)); - aabbMax.setValue(btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT)); + b3Vector3 aabbMin,aabbMax; + aabbMin.setValue(b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT)); + aabbMax.setValue(b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT)); aabbMin.setMin(triangle[0]); aabbMax.setMax(triangle[0]); aabbMin.setMin(triangle[1]); @@ -114,8 +113,8 @@ void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantized aabbMax.setMax(triangle[2]); //PCK: add these checks for zero dimensions of aabb - const btScalar MIN_AABB_DIMENSION = btScalar(0.002); - const btScalar MIN_AABB_HALF_DIMENSION = btScalar(0.001); + const b3Scalar MIN_AABB_DIMENSION = b3Scalar(0.002); + const b3Scalar MIN_AABB_HALF_DIMENSION = b3Scalar(0.001); if (aabbMax.getX() - aabbMin.getX() < MIN_AABB_DIMENSION) { aabbMax.setX(aabbMax.getX() + MIN_AABB_HALF_DIMENSION); @@ -168,8 +167,8 @@ void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantized { NodeTriangleCallback callback(m_leafNodes); - btVector3 aabbMin(btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT)); - btVector3 aabbMax(btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT)); + b3Vector3 aabbMin(b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT)); + b3Vector3 aabbMax(b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT)); triangles->InternalProcessAllTriangles(&callback,aabbMin,aabbMax); @@ -203,7 +202,7 @@ void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantized -void b3OptimizedBvh::refit(b3StridingMeshInterface* meshInterface,const btVector3& aabbMin,const btVector3& aabbMax) +void b3OptimizedBvh::refit(b3StridingMeshInterface* meshInterface,const b3Vector3& aabbMin,const b3Vector3& aabbMax) { if (m_useQuantization) { @@ -230,7 +229,7 @@ void b3OptimizedBvh::refit(b3StridingMeshInterface* meshInterface,const btVector -void b3OptimizedBvh::refitPartial(b3StridingMeshInterface* meshInterface,const btVector3& aabbMin,const btVector3& aabbMax) +void b3OptimizedBvh::refitPartial(b3StridingMeshInterface* meshInterface,const b3Vector3& aabbMin,const b3Vector3& aabbMax) { //incrementally initialize quantization values btAssert(m_useQuantization); @@ -287,9 +286,9 @@ void b3OptimizedBvh::updateBvhNodes(b3StridingMeshInterface* meshInterface,int f int numfaces = 0; PHY_ScalarType indicestype = PHY_INTEGER; - btVector3 triangleVerts[3]; - btVector3 aabbMin,aabbMax; - const btVector3& meshScaling = meshInterface->getScaling(); + b3Vector3 triangleVerts[3]; + b3Vector3 aabbMin,aabbMax; + const b3Vector3& meshScaling = meshInterface->getScaling(); int i; for (i=endNode-1;i>=firstNode;i--) @@ -323,7 +322,7 @@ void b3OptimizedBvh::updateBvhNodes(b3StridingMeshInterface* meshInterface,int f if (type == PHY_FLOAT) { float* graphicsbase = (float*)(vertexbase+graphicsindex*stride); - triangleVerts[j] = btVector3( + triangleVerts[j] = b3Vector3( graphicsbase[0]*meshScaling.getX(), graphicsbase[1]*meshScaling.getY(), graphicsbase[2]*meshScaling.getZ()); @@ -331,14 +330,14 @@ void b3OptimizedBvh::updateBvhNodes(b3StridingMeshInterface* meshInterface,int f else { double* graphicsbase = (double*)(vertexbase+graphicsindex*stride); - triangleVerts[j] = btVector3( btScalar(graphicsbase[0]*meshScaling.getX()), btScalar(graphicsbase[1]*meshScaling.getY()), btScalar(graphicsbase[2]*meshScaling.getZ())); + triangleVerts[j] = b3Vector3( b3Scalar(graphicsbase[0]*meshScaling.getX()), b3Scalar(graphicsbase[1]*meshScaling.getY()), b3Scalar(graphicsbase[2]*meshScaling.getZ())); } } - aabbMin.setValue(btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT)); - aabbMax.setValue(btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT)); + aabbMin.setValue(b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT)); + aabbMax.setValue(b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT)); aabbMin.setMin(triangleVerts[0]); aabbMax.setMax(triangleVerts[0]); aabbMin.setMin(triangleVerts[1]); diff --git a/opencl/gpu_narrowphase/host/b3OptimizedBvh.h b/opencl/gpu_narrowphase/host/b3OptimizedBvh.h index 2a5321104..eac52f7bc 100644 --- a/opencl/gpu_narrowphase/host/b3OptimizedBvh.h +++ b/opencl/gpu_narrowphase/host/b3OptimizedBvh.h @@ -38,11 +38,11 @@ public: virtual ~b3OptimizedBvh(); - void build(b3StridingMeshInterface* triangles,bool useQuantizedAabbCompression, const btVector3& bvhAabbMin, const btVector3& bvhAabbMax); + void build(b3StridingMeshInterface* triangles,bool useQuantizedAabbCompression, const b3Vector3& bvhAabbMin, const b3Vector3& bvhAabbMax); - void refit(b3StridingMeshInterface* triangles,const btVector3& aabbMin,const btVector3& aabbMax); + void refit(b3StridingMeshInterface* triangles,const b3Vector3& aabbMin,const b3Vector3& aabbMax); - void refitPartial(b3StridingMeshInterface* triangles,const btVector3& aabbMin, const btVector3& aabbMax); + void refitPartial(b3StridingMeshInterface* triangles,const b3Vector3& aabbMin, const b3Vector3& aabbMax); void updateBvhNodes(b3StridingMeshInterface* meshInterface,int firstNode,int endNode,int index); diff --git a/opencl/gpu_narrowphase/host/b3QuantizedBvh.cpp b/opencl/gpu_narrowphase/host/b3QuantizedBvh.cpp index e55b2988a..c5a99f664 100644 --- a/opencl/gpu_narrowphase/host/b3QuantizedBvh.cpp +++ b/opencl/gpu_narrowphase/host/b3QuantizedBvh.cpp @@ -16,7 +16,6 @@ subject to the following restrictions: #include "b3QuantizedBvh.h" #include "BulletGeometry/btAabbUtil2.h" -#include "BulletCommon/btIDebugDraw.h" #define RAYAABB2 @@ -77,25 +76,25 @@ void b3QuantizedBvh::buildInternal() ///just for debugging, to visualize the individual patches/subtrees #ifdef DEBUG_PATCH_COLORS -btVector3 color[4]= +b3Vector3 color[4]= { - btVector3(1,0,0), - btVector3(0,1,0), - btVector3(0,0,1), - btVector3(0,1,1) + b3Vector3(1,0,0), + b3Vector3(0,1,0), + b3Vector3(0,0,1), + b3Vector3(0,1,1) }; #endif //DEBUG_PATCH_COLORS -void b3QuantizedBvh::setQuantizationValues(const btVector3& bvhAabbMin,const btVector3& bvhAabbMax,btScalar quantizationMargin) +void b3QuantizedBvh::setQuantizationValues(const b3Vector3& bvhAabbMin,const b3Vector3& bvhAabbMax,b3Scalar quantizationMargin) { //enlarge the AABB to avoid division by zero when initializing the quantization values - btVector3 clampValue(quantizationMargin,quantizationMargin,quantizationMargin); + b3Vector3 clampValue(quantizationMargin,quantizationMargin,quantizationMargin); m_bvhAabbMin = bvhAabbMin - clampValue; m_bvhAabbMax = bvhAabbMax + clampValue; - btVector3 aabbSize = m_bvhAabbMax - m_bvhAabbMin; - m_bvhQuantization = btVector3(btScalar(65533.0),btScalar(65533.0),btScalar(65533.0)) / aabbSize; + b3Vector3 aabbSize = m_bvhAabbMax - m_bvhAabbMin; + m_bvhQuantization = b3Vector3(b3Scalar(65533.0),b3Scalar(65533.0),b3Scalar(65533.0)) / aabbSize; m_useQuantization = true; } @@ -147,8 +146,8 @@ void b3QuantizedBvh::buildTree (int startIndex,int endIndex) //set the min aabb to 'inf' or a max value, and set the max aabb to a -inf/minimum value. //the aabb will be expanded during buildTree/mergeInternalNodeAabb with actual node values - setInternalNodeAabbMin(m_curNodeIndex,m_bvhAabbMax);//can't use btVector3(SIMD_INFINITY,SIMD_INFINITY,SIMD_INFINITY)) because of quantization - setInternalNodeAabbMax(m_curNodeIndex,m_bvhAabbMin);//can't use btVector3(-SIMD_INFINITY,-SIMD_INFINITY,-SIMD_INFINITY)) because of quantization + setInternalNodeAabbMin(m_curNodeIndex,m_bvhAabbMax);//can't use b3Vector3(SIMD_INFINITY,SIMD_INFINITY,SIMD_INFINITY)) because of quantization + setInternalNodeAabbMax(m_curNodeIndex,m_bvhAabbMin);//can't use b3Vector3(-SIMD_INFINITY,-SIMD_INFINITY,-SIMD_INFINITY)) because of quantization for (i=startIndex;i splitValue) { //swap @@ -285,32 +284,32 @@ int b3QuantizedBvh::calcSplittingAxis(int startIndex,int endIndex) { int i; - btVector3 means(btScalar(0.),btScalar(0.),btScalar(0.)); - btVector3 variance(btScalar(0.),btScalar(0.),btScalar(0.)); + b3Vector3 means(b3Scalar(0.),b3Scalar(0.),b3Scalar(0.)); + b3Vector3 variance(b3Scalar(0.),b3Scalar(0.),b3Scalar(0.)); int numIndices = endIndex-startIndex; for (i=startIndex;im_aabbMin,rootNode->m_aabbMax); if (aabbOverlap) @@ -446,7 +445,7 @@ void b3QuantizedBvh::walkRecursiveQuantizedTreeAgainstQueryAabb(const btQuantize -void b3QuantizedBvh::walkStacklessTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex,int endNodeIndex) const +void b3QuantizedBvh::walkStacklessTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax, int startNodeIndex,int endNodeIndex) const { btAssert(!m_useQuantization); @@ -457,11 +456,11 @@ void b3QuantizedBvh::walkStacklessTreeAgainstRay(btNodeOverlapCallback* nodeCall //PCK: unsigned instead of bool unsigned aabbOverlap=0; unsigned rayBoxOverlap=0; - btScalar lambda_max = 1.0; + b3Scalar lambda_max = 1.0; /* Quick pruning by quantized box */ - btVector3 rayAabbMin = raySource; - btVector3 rayAabbMax = raySource; + b3Vector3 rayAabbMin = raySource; + b3Vector3 rayAabbMax = raySource; rayAabbMin.setMin(rayTarget); rayAabbMax.setMax(rayTarget); @@ -470,22 +469,22 @@ void b3QuantizedBvh::walkStacklessTreeAgainstRay(btNodeOverlapCallback* nodeCall rayAabbMax += aabbMax; #ifdef RAYAABB2 - btVector3 rayDir = (rayTarget-raySource); + b3Vector3 rayDir = (rayTarget-raySource); rayDir.normalize (); lambda_max = rayDir.dot(rayTarget-raySource); ///what about division by zero? --> just set rayDirection[i] to 1.0 - btVector3 rayDirectionInverse; - rayDirectionInverse[0] = rayDir[0] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[0]; - rayDirectionInverse[1] = rayDir[1] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[1]; - rayDirectionInverse[2] = rayDir[2] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[2]; + b3Vector3 rayDirectionInverse; + rayDirectionInverse[0] = rayDir[0] == b3Scalar(0.0) ? b3Scalar(BT_LARGE_FLOAT) : b3Scalar(1.0) / rayDir[0]; + rayDirectionInverse[1] = rayDir[1] == b3Scalar(0.0) ? b3Scalar(BT_LARGE_FLOAT) : b3Scalar(1.0) / rayDir[1]; + rayDirectionInverse[2] = rayDir[2] == b3Scalar(0.0) ? b3Scalar(BT_LARGE_FLOAT) : b3Scalar(1.0) / rayDir[2]; unsigned int sign[3] = { rayDirectionInverse[0] < 0.0, rayDirectionInverse[1] < 0.0, rayDirectionInverse[2] < 0.0}; #endif - btVector3 bounds[2]; + b3Vector3 bounds[2]; while (curIndex < m_curNodeIndex) { - btScalar param = 1.0; + b3Scalar param = 1.0; //catch bugs in tree data btAssert (walkIterations < m_curNodeIndex); @@ -507,7 +506,7 @@ void b3QuantizedBvh::walkStacklessTreeAgainstRay(btNodeOverlapCallback* nodeCall rayBoxOverlap = aabbOverlap ? btRayAabb2 (raySource, rayDirectionInverse, sign, bounds, param, 0.0f, lambda_max) : false; #else - btVector3 normal; + b3Vector3 normal; rayBoxOverlap = btRayAabb(raySource, rayTarget,bounds[0],bounds[1],param, normal); #endif @@ -538,7 +537,7 @@ void b3QuantizedBvh::walkStacklessTreeAgainstRay(btNodeOverlapCallback* nodeCall -void b3QuantizedBvh::walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex,int endNodeIndex) const +void b3QuantizedBvh::walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax, int startNodeIndex,int endNodeIndex) const { btAssert(m_useQuantization); @@ -555,22 +554,22 @@ void b3QuantizedBvh::walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback* unsigned boxBoxOverlap = 0; unsigned rayBoxOverlap = 0; - btScalar lambda_max = 1.0; + b3Scalar lambda_max = 1.0; #ifdef RAYAABB2 - btVector3 rayDirection = (rayTarget-raySource); + b3Vector3 rayDirection = (rayTarget-raySource); rayDirection.normalize (); lambda_max = rayDirection.dot(rayTarget-raySource); ///what about division by zero? --> just set rayDirection[i] to 1.0 - rayDirection[0] = rayDirection[0] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDirection[0]; - rayDirection[1] = rayDirection[1] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDirection[1]; - rayDirection[2] = rayDirection[2] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDirection[2]; + rayDirection[0] = rayDirection[0] == b3Scalar(0.0) ? b3Scalar(BT_LARGE_FLOAT) : b3Scalar(1.0) / rayDirection[0]; + rayDirection[1] = rayDirection[1] == b3Scalar(0.0) ? b3Scalar(BT_LARGE_FLOAT) : b3Scalar(1.0) / rayDirection[1]; + rayDirection[2] = rayDirection[2] == b3Scalar(0.0) ? b3Scalar(BT_LARGE_FLOAT) : b3Scalar(1.0) / rayDirection[2]; unsigned int sign[3] = { rayDirection[0] < 0.0, rayDirection[1] < 0.0, rayDirection[2] < 0.0}; #endif /* Quick pruning by quantized box */ - btVector3 rayAabbMin = raySource; - btVector3 rayAabbMax = raySource; + b3Vector3 rayAabbMin = raySource; + b3Vector3 rayAabbMax = raySource; rayAabbMin.setMin(rayTarget); rayAabbMax.setMax(rayTarget); @@ -594,10 +593,10 @@ void b3QuantizedBvh::walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback* extern btIDebugDraw* debugDrawerPtr; if (curIndex==drawPatch) { - btVector3 aabbMin,aabbMax; + b3Vector3 aabbMin,aabbMax; aabbMin = unQuantize(rootNode->m_quantizedAabbMin); aabbMax = unQuantize(rootNode->m_quantizedAabbMax); - btVector3 color(1,0,0); + b3Vector3 color(1,0,0); debugDrawerPtr->drawAabb(aabbMin,aabbMax,color); } #endif//VISUALLY_ANALYZE_BVH @@ -608,19 +607,19 @@ void b3QuantizedBvh::walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback* walkIterations++; //PCK: unsigned instead of bool // only interested if this is closer than any previous hit - btScalar param = 1.0; + b3Scalar param = 1.0; rayBoxOverlap = 0; boxBoxOverlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin,quantizedQueryAabbMax,rootNode->m_quantizedAabbMin,rootNode->m_quantizedAabbMax); isLeafNode = rootNode->isLeafNode(); if (boxBoxOverlap) { - btVector3 bounds[2]; + b3Vector3 bounds[2]; bounds[0] = unQuantize(rootNode->m_quantizedAabbMin); bounds[1] = unQuantize(rootNode->m_quantizedAabbMax); /* Add box cast extents */ bounds[0] -= aabbMax; bounds[1] -= aabbMin; - btVector3 normal; + b3Vector3 normal; #if 0 bool ra2 = btRayAabb2 (raySource, rayDirection, sign, bounds, param, 0.0, lambda_max); bool ra = btRayAabb (raySource, rayTarget, bounds[0], bounds[1], param, normal); @@ -691,10 +690,10 @@ void b3QuantizedBvh::walkStacklessQuantizedTree(btNodeOverlapCallback* nodeCallb extern btIDebugDraw* debugDrawerPtr; if (curIndex==drawPatch) { - btVector3 aabbMin,aabbMax; + b3Vector3 aabbMin,aabbMax; aabbMin = unQuantize(rootNode->m_quantizedAabbMin); aabbMax = unQuantize(rootNode->m_quantizedAabbMax); - btVector3 color(1,0,0); + b3Vector3 color(1,0,0); debugDrawerPtr->drawAabb(aabbMin,aabbMax,color); } #endif//VISUALLY_ANALYZE_BVH @@ -753,13 +752,13 @@ void b3QuantizedBvh::walkStacklessQuantizedTreeCacheFriendly(btNodeOverlapCallba } -void b3QuantizedBvh::reportRayOverlappingNodex (btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget) const +void b3QuantizedBvh::reportRayOverlappingNodex (btNodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget) const { - reportBoxCastOverlappingNodex(nodeCallback,raySource,rayTarget,btVector3(0,0,0),btVector3(0,0,0)); + reportBoxCastOverlappingNodex(nodeCallback,raySource,rayTarget,b3Vector3(0,0,0),b3Vector3(0,0,0)); } -void b3QuantizedBvh::reportBoxCastOverlappingNodex(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin,const btVector3& aabbMax) const +void b3QuantizedBvh::reportBoxCastOverlappingNodex(btNodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin,const b3Vector3& aabbMax) const { //always use stackless @@ -774,8 +773,8 @@ void b3QuantizedBvh::reportBoxCastOverlappingNodex(btNodeOverlapCallback* nodeCa /* { //recursive traversal - btVector3 qaabbMin = raySource; - btVector3 qaabbMax = raySource; + b3Vector3 qaabbMin = raySource; + b3Vector3 qaabbMax = raySource; qaabbMin.setMin(rayTarget); qaabbMax.setMax(rayTarget); qaabbMin += aabbMin; @@ -1134,7 +1133,7 @@ b3QuantizedBvh *b3QuantizedBvh::deSerializeInPlace(void *i_alignedDataBuffer, un return bvh; } -// Constructor that prevents btVector3's default constructor from being called +// Constructor that prevents b3Vector3's default constructor from being called b3QuantizedBvh::b3QuantizedBvh(b3QuantizedBvh &self, bool /* ownsMemory */) : m_bvhAabbMin(self.m_bvhAabbMin), m_bvhAabbMax(self.m_bvhAabbMax), diff --git a/opencl/gpu_narrowphase/host/b3QuantizedBvh.h b/opencl/gpu_narrowphase/host/b3QuantizedBvh.h index 8c1188abe..2bd6df7e1 100644 --- a/opencl/gpu_narrowphase/host/b3QuantizedBvh.h +++ b/opencl/gpu_narrowphase/host/b3QuantizedBvh.h @@ -28,8 +28,8 @@ class btSerializer; #include #endif //DEBUG_CHECK_DEQUANTIZATION -#include "BulletCommon/btVector3.h" -#include "BulletCommon/btAlignedAllocator.h" +#include "BulletCommon/b3Vector3.h" +#include "BulletCommon/b3AlignedAllocator.h" #ifdef BT_USE_DOUBLE_PRECISION #define btQuantizedBvhData btQuantizedBvhDoubleData @@ -99,8 +99,8 @@ ATTRIBUTE_ALIGNED16 (struct) btOptimizedBvhNode BT_DECLARE_ALIGNED_ALLOCATOR(); //32 bytes - btVector3 m_aabbMinOrg; - btVector3 m_aabbMaxOrg; + b3Vector3 m_aabbMinOrg; + b3Vector3 m_aabbMaxOrg; //4 int m_escapeIndex; @@ -157,15 +157,15 @@ public: virtual void processNode(int subPart, int triangleIndex) = 0; }; -#include "BulletCommon/btAlignedAllocator.h" -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedAllocator.h" +#include "BulletCommon/b3AlignedObjectArray.h" ///for code readability: -typedef btAlignedObjectArray NodeArray; -typedef btAlignedObjectArray QuantizedNodeArray; -typedef btAlignedObjectArray BvhSubtreeInfoArray; +typedef b3AlignedObjectArray NodeArray; +typedef b3AlignedObjectArray QuantizedNodeArray; +typedef b3AlignedObjectArray BvhSubtreeInfoArray; ///The b3QuantizedBvh class stores an AABB tree that can be quickly traversed on CPU and Cell SPU. @@ -184,9 +184,9 @@ public: - btVector3 m_bvhAabbMin; - btVector3 m_bvhAabbMax; - btVector3 m_bvhQuantization; + b3Vector3 m_bvhAabbMin; + b3Vector3 m_bvhAabbMax; + b3Vector3 m_bvhQuantization; protected: int m_bulletVersion; //for serialization versioning. It could also be used to detect endianess. @@ -205,7 +205,7 @@ protected: btTraversalMode m_traversalMode; BvhSubtreeInfoArray m_SubtreeHeaders; - //This is only used for serialization so we don't have to add serialization directly to btAlignedObjectArray + //This is only used for serialization so we don't have to add serialization directly to b3AlignedObjectArray mutable int m_subtreeHeaderCount; @@ -214,7 +214,7 @@ protected: ///two versions, one for quantized and normal nodes. This allows code-reuse while maintaining readability (no template/macro!) ///this might be refactored into a virtual, it is usually not calculated at run-time - void setInternalNodeAabbMin(int nodeIndex, const btVector3& aabbMin) + void setInternalNodeAabbMin(int nodeIndex, const b3Vector3& aabbMin) { if (m_useQuantization) { @@ -225,7 +225,7 @@ protected: } } - void setInternalNodeAabbMax(int nodeIndex,const btVector3& aabbMax) + void setInternalNodeAabbMax(int nodeIndex,const b3Vector3& aabbMax) { if (m_useQuantization) { @@ -236,7 +236,7 @@ protected: } } - btVector3 getAabbMin(int nodeIndex) const + b3Vector3 getAabbMin(int nodeIndex) const { if (m_useQuantization) { @@ -246,7 +246,7 @@ protected: return m_leafNodes[nodeIndex].m_aabbMinOrg; } - btVector3 getAabbMax(int nodeIndex) const + b3Vector3 getAabbMax(int nodeIndex) const { if (m_useQuantization) { @@ -271,7 +271,7 @@ protected: } - void mergeInternalNodeAabb(int nodeIndex,const btVector3& newAabbMin,const btVector3& newAabbMax) + void mergeInternalNodeAabb(int nodeIndex,const b3Vector3& newAabbMin,const b3Vector3& newAabbMax) { if (m_useQuantization) { @@ -310,11 +310,11 @@ protected: int sortAndCalcSplittingIndex(int startIndex,int endIndex,int splitAxis); - void walkStacklessTree(btNodeOverlapCallback* nodeCallback,const btVector3& aabbMin,const btVector3& aabbMax) const; + void walkStacklessTree(btNodeOverlapCallback* nodeCallback,const b3Vector3& aabbMin,const b3Vector3& aabbMax) const; - void walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex,int endNodeIndex) const; + void walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax, int startNodeIndex,int endNodeIndex) const; void walkStacklessQuantizedTree(btNodeOverlapCallback* nodeCallback,unsigned short int* quantizedQueryAabbMin,unsigned short int* quantizedQueryAabbMax,int startNodeIndex,int endNodeIndex) const; - void walkStacklessTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex,int endNodeIndex) const; + void walkStacklessTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax, int startNodeIndex,int endNodeIndex) const; ///tree traversal designed for small-memory processors like PS3 SPU void walkStacklessQuantizedTreeCacheFriendly(btNodeOverlapCallback* nodeCallback,unsigned short int* quantizedQueryAabbMin,unsigned short int* quantizedQueryAabbMax) const; @@ -340,17 +340,17 @@ public: ///***************************************** expert/internal use only ************************* - void setQuantizationValues(const btVector3& bvhAabbMin,const btVector3& bvhAabbMax,btScalar quantizationMargin=btScalar(1.0)); + void setQuantizationValues(const b3Vector3& bvhAabbMin,const b3Vector3& bvhAabbMax,b3Scalar quantizationMargin=b3Scalar(1.0)); QuantizedNodeArray& getLeafNodeArray() { return m_quantizedLeafNodes; } ///buildInternal is expert use only: assumes that setQuantizationValues and LeafNodeArray are initialized void buildInternal(); ///***************************************** expert/internal use only ************************* - void reportAabbOverlappingNodex(btNodeOverlapCallback* nodeCallback,const btVector3& aabbMin,const btVector3& aabbMax) const; - void reportRayOverlappingNodex (btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget) const; - void reportBoxCastOverlappingNodex(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin,const btVector3& aabbMax) const; + void reportAabbOverlappingNodex(btNodeOverlapCallback* nodeCallback,const b3Vector3& aabbMin,const b3Vector3& aabbMax) const; + void reportRayOverlappingNodex (btNodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget) const; + void reportBoxCastOverlappingNodex(btNodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin,const b3Vector3& aabbMax) const; - SIMD_FORCE_INLINE void quantize(unsigned short* out, const btVector3& point,int isMax) const + SIMD_FORCE_INLINE void quantize(unsigned short* out, const b3Vector3& point,int isMax) const { btAssert(m_useQuantization); @@ -363,15 +363,15 @@ public: btAssert(point.getY() >= m_bvhAabbMin.getY()); btAssert(point.getZ() >= m_bvhAabbMin.getZ()); - btVector3 v = (point - m_bvhAabbMin) * m_bvhQuantization; + b3Vector3 v = (point - m_bvhAabbMin) * m_bvhQuantization; ///Make sure rounding is done in a way that unQuantize(quantizeWithClamp(...)) is conservative ///end-points always set the first bit, so that they are sorted properly (so that neighbouring AABBs overlap properly) ///@todo: double-check this if (isMax) { - out[0] = (unsigned short) (((unsigned short)(v.getX()+btScalar(1.)) | 1)); - out[1] = (unsigned short) (((unsigned short)(v.getY()+btScalar(1.)) | 1)); - out[2] = (unsigned short) (((unsigned short)(v.getZ()+btScalar(1.)) | 1)); + out[0] = (unsigned short) (((unsigned short)(v.getX()+b3Scalar(1.)) | 1)); + out[1] = (unsigned short) (((unsigned short)(v.getY()+b3Scalar(1.)) | 1)); + out[2] = (unsigned short) (((unsigned short)(v.getZ()+b3Scalar(1.)) | 1)); } else { out[0] = (unsigned short) (((unsigned short)(v.getX()) & 0xfffe)); @@ -381,7 +381,7 @@ public: #ifdef DEBUG_CHECK_DEQUANTIZATION - btVector3 newPoint = unQuantize(out); + b3Vector3 newPoint = unQuantize(out); if (isMax) { if (newPoint.getX() < point.getX()) @@ -417,12 +417,12 @@ public: } - SIMD_FORCE_INLINE void quantizeWithClamp(unsigned short* out, const btVector3& point2,int isMax) const + SIMD_FORCE_INLINE void quantizeWithClamp(unsigned short* out, const b3Vector3& point2,int isMax) const { btAssert(m_useQuantization); - btVector3 clampedPoint(point2); + b3Vector3 clampedPoint(point2); clampedPoint.setMax(m_bvhAabbMin); clampedPoint.setMin(m_bvhAabbMax); @@ -430,13 +430,13 @@ public: } - SIMD_FORCE_INLINE btVector3 unQuantize(const unsigned short* vecIn) const + SIMD_FORCE_INLINE b3Vector3 unQuantize(const unsigned short* vecIn) const { - btVector3 vecOut; + b3Vector3 vecOut; vecOut.setValue( - (btScalar)(vecIn[0]) / (m_bvhQuantization.getX()), - (btScalar)(vecIn[1]) / (m_bvhQuantization.getY()), - (btScalar)(vecIn[2]) / (m_bvhQuantization.getZ())); + (b3Scalar)(vecIn[0]) / (m_bvhQuantization.getX()), + (b3Scalar)(vecIn[1]) / (m_bvhQuantization.getY()), + (b3Scalar)(vecIn[2]) / (m_bvhQuantization.getZ())); vecOut += m_bvhAabbMin; return vecOut; } @@ -493,7 +493,7 @@ public: private: // Special "copy" constructor that allows for in-place deserialization - // Prevents btVector3's default constructor from being called, but doesn't inialize much else + // Prevents b3Vector3's default constructor from being called, but doesn't inialize much else // ownsMemory should most likely be false if deserializing, and if you are not, don't call this (it also changes the function signature, which we need) b3QuantizedBvh(b3QuantizedBvh &other, bool ownsMemory); diff --git a/opencl/gpu_narrowphase/host/b3RigidBodyCL.h b/opencl/gpu_narrowphase/host/b3RigidBodyCL.h index d8a1bfcf6..9646e244a 100644 --- a/opencl/gpu_narrowphase/host/b3RigidBodyCL.h +++ b/opencl/gpu_narrowphase/host/b3RigidBodyCL.h @@ -1,17 +1,17 @@ #ifndef BT_RIGID_BODY_CL #define BT_RIGID_BODY_CL -#include "BulletCommon/btScalar.h" -#include "BulletCommon/btMatrix3x3.h" +#include "BulletCommon/b3Scalar.h" +#include "BulletCommon/b3Matrix3x3.h" ATTRIBUTE_ALIGNED16(struct) b3RigidBodyCL { BT_DECLARE_ALIGNED_ALLOCATOR(); - btVector3 m_pos; - btQuaternion m_quat; - btVector3 m_linVel; - btVector3 m_angVel; + b3Vector3 m_pos; + b3Quaternion m_quat; + b3Vector3 m_linVel; + b3Vector3 m_angVel; int m_collidableIdx; float m_invMass; @@ -27,8 +27,8 @@ ATTRIBUTE_ALIGNED16(struct) b3RigidBodyCL struct btInertiaCL { - btMatrix3x3 m_invInertiaWorld; - btMatrix3x3 m_initInvInertia; + b3Matrix3x3 m_invInertiaWorld; + b3Matrix3x3 m_initInvInertia; }; diff --git a/opencl/gpu_narrowphase/host/b3StridingMeshInterface.cpp b/opencl/gpu_narrowphase/host/b3StridingMeshInterface.cpp index c2025ce64..5f0e64b99 100644 --- a/opencl/gpu_narrowphase/host/b3StridingMeshInterface.cpp +++ b/opencl/gpu_narrowphase/host/b3StridingMeshInterface.cpp @@ -22,7 +22,7 @@ b3StridingMeshInterface::~b3StridingMeshInterface() } -void b3StridingMeshInterface::InternalProcessAllTriangles(btInternalTriangleIndexCallback* callback,const btVector3& aabbMin,const btVector3& aabbMax) const +void b3StridingMeshInterface::InternalProcessAllTriangles(btInternalTriangleIndexCallback* callback,const b3Vector3& aabbMin,const b3Vector3& aabbMax) const { (void)aabbMin; (void)aabbMax; @@ -35,9 +35,9 @@ void b3StridingMeshInterface::InternalProcessAllTriangles(btInternalTriangleInde PHY_ScalarType gfxindextype; int stride,numverts,numtriangles; int gfxindex; - btVector3 triangle[3]; + b3Vector3 triangle[3]; - btVector3 meshScaling = getScaling(); + b3Vector3 meshScaling = getScaling(); ///if the number of parts is big, the performance might drop due to the innerloop switch on indextype for (part=0;partinternalProcessTriangleIndex(triangle,part,gfxindex); } break; @@ -136,11 +136,11 @@ void b3StridingMeshInterface::InternalProcessAllTriangles(btInternalTriangleInde { unsigned short int* tri_indices= (unsigned short int*)(indexbase+gfxindex*indexstride); graphicsbase = (double*)(vertexbase+tri_indices[0]*stride); - triangle[0].setValue((btScalar)graphicsbase[0]*meshScaling.getX(),(btScalar)graphicsbase[1]*meshScaling.getY(),(btScalar)graphicsbase[2]*meshScaling.getZ()); + triangle[0].setValue((b3Scalar)graphicsbase[0]*meshScaling.getX(),(b3Scalar)graphicsbase[1]*meshScaling.getY(),(b3Scalar)graphicsbase[2]*meshScaling.getZ()); graphicsbase = (double*)(vertexbase+tri_indices[1]*stride); - triangle[1].setValue((btScalar)graphicsbase[0]*meshScaling.getX(),(btScalar)graphicsbase[1]*meshScaling.getY(), (btScalar)graphicsbase[2]*meshScaling.getZ()); + triangle[1].setValue((b3Scalar)graphicsbase[0]*meshScaling.getX(),(b3Scalar)graphicsbase[1]*meshScaling.getY(), (b3Scalar)graphicsbase[2]*meshScaling.getZ()); graphicsbase = (double*)(vertexbase+tri_indices[2]*stride); - triangle[2].setValue((btScalar)graphicsbase[0]*meshScaling.getX(),(btScalar)graphicsbase[1]*meshScaling.getY(), (btScalar)graphicsbase[2]*meshScaling.getZ()); + triangle[2].setValue((b3Scalar)graphicsbase[0]*meshScaling.getX(),(b3Scalar)graphicsbase[1]*meshScaling.getY(), (b3Scalar)graphicsbase[2]*meshScaling.getZ()); callback->internalProcessTriangleIndex(triangle,part,gfxindex); } break; @@ -151,11 +151,11 @@ void b3StridingMeshInterface::InternalProcessAllTriangles(btInternalTriangleInde { unsigned char* tri_indices= (unsigned char*)(indexbase+gfxindex*indexstride); graphicsbase = (double*)(vertexbase+tri_indices[0]*stride); - triangle[0].setValue((btScalar)graphicsbase[0]*meshScaling.getX(),(btScalar)graphicsbase[1]*meshScaling.getY(),(btScalar)graphicsbase[2]*meshScaling.getZ()); + triangle[0].setValue((b3Scalar)graphicsbase[0]*meshScaling.getX(),(b3Scalar)graphicsbase[1]*meshScaling.getY(),(b3Scalar)graphicsbase[2]*meshScaling.getZ()); graphicsbase = (double*)(vertexbase+tri_indices[1]*stride); - triangle[1].setValue((btScalar)graphicsbase[0]*meshScaling.getX(),(btScalar)graphicsbase[1]*meshScaling.getY(), (btScalar)graphicsbase[2]*meshScaling.getZ()); + triangle[1].setValue((b3Scalar)graphicsbase[0]*meshScaling.getX(),(b3Scalar)graphicsbase[1]*meshScaling.getY(), (b3Scalar)graphicsbase[2]*meshScaling.getZ()); graphicsbase = (double*)(vertexbase+tri_indices[2]*stride); - triangle[2].setValue((btScalar)graphicsbase[0]*meshScaling.getX(),(btScalar)graphicsbase[1]*meshScaling.getY(), (btScalar)graphicsbase[2]*meshScaling.getZ()); + triangle[2].setValue((b3Scalar)graphicsbase[0]*meshScaling.getX(),(b3Scalar)graphicsbase[1]*meshScaling.getY(), (b3Scalar)graphicsbase[2]*meshScaling.getZ()); callback->internalProcessTriangleIndex(triangle,part,gfxindex); } break; @@ -173,21 +173,21 @@ void b3StridingMeshInterface::InternalProcessAllTriangles(btInternalTriangleInde } } -void b3StridingMeshInterface::calculateAabbBruteForce(btVector3& aabbMin,btVector3& aabbMax) +void b3StridingMeshInterface::calculateAabbBruteForce(b3Vector3& aabbMin,b3Vector3& aabbMax) { struct AabbCalculationCallback : public btInternalTriangleIndexCallback { - btVector3 m_aabbMin; - btVector3 m_aabbMax; + b3Vector3 m_aabbMin; + b3Vector3 m_aabbMax; AabbCalculationCallback() { - m_aabbMin.setValue(btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT)); - m_aabbMax.setValue(btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT)); + m_aabbMin.setValue(b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT)); + m_aabbMax.setValue(b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT)); } - virtual void internalProcessTriangleIndex(btVector3* triangle,int partId,int triangleIndex) + virtual void internalProcessTriangleIndex(b3Vector3* triangle,int partId,int triangleIndex) { (void)partId; (void)triangleIndex; @@ -203,8 +203,8 @@ void b3StridingMeshInterface::calculateAabbBruteForce(btVector3& aabbMin,btVecto //first calculate the total aabb for all triangles AabbCalculationCallback aabbCallback; - aabbMin.setValue(btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT)); - aabbMax.setValue(btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT)); + aabbMin.setValue(b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT),b3Scalar(-BT_LARGE_FLOAT)); + aabbMax.setValue(b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT),b3Scalar(BT_LARGE_FLOAT)); InternalProcessAllTriangles(&aabbCallback,aabbMin,aabbMax); aabbMin = aabbCallback.m_aabbMin; diff --git a/opencl/gpu_narrowphase/host/b3StridingMeshInterface.h b/opencl/gpu_narrowphase/host/b3StridingMeshInterface.h index e2bb8cb1e..67d06eb4e 100644 --- a/opencl/gpu_narrowphase/host/b3StridingMeshInterface.h +++ b/opencl/gpu_narrowphase/host/b3StridingMeshInterface.h @@ -16,7 +16,7 @@ subject to the following restrictions: #ifndef BT_STRIDING_MESHINTERFACE_H #define BT_STRIDING_MESHINTERFACE_H -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" #include "b3TriangleCallback.h" //#include "btConcaveShape.h" @@ -34,12 +34,12 @@ ATTRIBUTE_ALIGNED16(class ) b3StridingMeshInterface { protected: - btVector3 m_scaling; + b3Vector3 m_scaling; public: BT_DECLARE_ALIGNED_ALLOCATOR(); - b3StridingMeshInterface() :m_scaling(btScalar(1.),btScalar(1.),btScalar(1.)) + b3StridingMeshInterface() :m_scaling(b3Scalar(1.),b3Scalar(1.),b3Scalar(1.)) { } @@ -48,10 +48,10 @@ ATTRIBUTE_ALIGNED16(class ) b3StridingMeshInterface - virtual void InternalProcessAllTriangles(btInternalTriangleIndexCallback* callback,const btVector3& aabbMin,const btVector3& aabbMax) const; + virtual void InternalProcessAllTriangles(btInternalTriangleIndexCallback* callback,const b3Vector3& aabbMin,const b3Vector3& aabbMax) const; ///brute force method to calculate aabb - void calculateAabbBruteForce(btVector3& aabbMin,btVector3& aabbMax); + void calculateAabbBruteForce(b3Vector3& aabbMin,b3Vector3& aabbMax); /// get read and write access to a subpart of a triangle mesh /// this subpart has a continuous array of vertices and indices @@ -77,21 +77,21 @@ ATTRIBUTE_ALIGNED16(class ) b3StridingMeshInterface virtual void preallocateIndices(int numindices)=0; virtual bool hasPremadeAabb() const { return false; } - virtual void setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax ) const + virtual void setPremadeAabb(const b3Vector3& aabbMin, const b3Vector3& aabbMax ) const { (void) aabbMin; (void) aabbMax; } - virtual void getPremadeAabb(btVector3* aabbMin, btVector3* aabbMax ) const + virtual void getPremadeAabb(b3Vector3* aabbMin, b3Vector3* aabbMax ) const { (void) aabbMin; (void) aabbMax; } - const btVector3& getScaling() const { + const b3Vector3& getScaling() const { return m_scaling; } - void setScaling(const btVector3& scaling) + void setScaling(const b3Vector3& scaling) { m_scaling = scaling; } diff --git a/opencl/gpu_narrowphase/host/b3TriangleCallback.h b/opencl/gpu_narrowphase/host/b3TriangleCallback.h index b5a881ee4..9ddb051dd 100644 --- a/opencl/gpu_narrowphase/host/b3TriangleCallback.h +++ b/opencl/gpu_narrowphase/host/b3TriangleCallback.h @@ -16,7 +16,7 @@ subject to the following restrictions: #ifndef BT_TRIANGLE_CALLBACK_H #define BT_TRIANGLE_CALLBACK_H -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" ///The b3TriangleCallback provides a callback for each overlapping triangle when calling processAllTriangles. @@ -26,7 +26,7 @@ class b3TriangleCallback public: virtual ~b3TriangleCallback(); - virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex) = 0; + virtual void processTriangle(b3Vector3* triangle, int partId, int triangleIndex) = 0; }; class btInternalTriangleIndexCallback @@ -34,7 +34,7 @@ class btInternalTriangleIndexCallback public: virtual ~btInternalTriangleIndexCallback(); - virtual void internalProcessTriangleIndex(btVector3* triangle,int partId,int triangleIndex) = 0; + virtual void internalProcessTriangleIndex(b3Vector3* triangle,int partId,int triangleIndex) = 0; }; diff --git a/opencl/gpu_narrowphase/host/b3TriangleIndexVertexArray.cpp b/opencl/gpu_narrowphase/host/b3TriangleIndexVertexArray.cpp index 552ed2073..3ef677071 100644 --- a/opencl/gpu_narrowphase/host/b3TriangleIndexVertexArray.cpp +++ b/opencl/gpu_narrowphase/host/b3TriangleIndexVertexArray.cpp @@ -15,7 +15,7 @@ subject to the following restrictions: #include "b3TriangleIndexVertexArray.h" -b3TriangleIndexVertexArray::b3TriangleIndexVertexArray(int numTriangles,int* triangleIndexBase,int triangleIndexStride,int numVertices,btScalar* vertexBase,int vertexStride) +b3TriangleIndexVertexArray::b3TriangleIndexVertexArray(int numTriangles,int* triangleIndexBase,int triangleIndexStride,int numVertices,b3Scalar* vertexBase,int vertexStride) : m_hasAabb(0) { btIndexedMesh mesh; @@ -79,14 +79,14 @@ bool b3TriangleIndexVertexArray::hasPremadeAabb() const } -void b3TriangleIndexVertexArray::setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax ) const +void b3TriangleIndexVertexArray::setPremadeAabb(const b3Vector3& aabbMin, const b3Vector3& aabbMax ) const { m_aabbMin = aabbMin; m_aabbMax = aabbMax; m_hasAabb = 1; // this is intentionally an int see notes in header } -void b3TriangleIndexVertexArray::getPremadeAabb(btVector3* aabbMin, btVector3* aabbMax ) const +void b3TriangleIndexVertexArray::getPremadeAabb(b3Vector3* aabbMin, b3Vector3* aabbMax ) const { *aabbMin = m_aabbMin; *aabbMax = m_aabbMax; diff --git a/opencl/gpu_narrowphase/host/b3TriangleIndexVertexArray.h b/opencl/gpu_narrowphase/host/b3TriangleIndexVertexArray.h index ce9275b3f..1e13e582b 100644 --- a/opencl/gpu_narrowphase/host/b3TriangleIndexVertexArray.h +++ b/opencl/gpu_narrowphase/host/b3TriangleIndexVertexArray.h @@ -17,8 +17,8 @@ subject to the following restrictions: #define BT_TRIANGLE_INDEX_VERTEX_ARRAY_H #include "b3StridingMeshInterface.h" -#include "BulletCommon/btAlignedObjectArray.h" -#include "BulletCommon/btScalar.h" +#include "BulletCommon/b3AlignedObjectArray.h" +#include "BulletCommon/b3Scalar.h" ///The btIndexedMesh indexes a single vertex and index array. Multiple btIndexedMesh objects can be passed into a b3TriangleIndexVertexArray using addIndexedMesh. @@ -59,7 +59,7 @@ ATTRIBUTE_ALIGNED16( struct) btIndexedMesh ; -typedef btAlignedObjectArray IndexedMeshArray; +typedef b3AlignedObjectArray IndexedMeshArray; ///The b3TriangleIndexVertexArray allows to access multiple triangle meshes, by indexing into existing triangle/index arrays. ///Additional meshes can be added using addIndexedMesh @@ -71,8 +71,8 @@ protected: IndexedMeshArray m_indexedMeshes; int m_pad[2]; mutable int m_hasAabb; // using int instead of bool to maintain alignment - mutable btVector3 m_aabbMin; - mutable btVector3 m_aabbMax; + mutable b3Vector3 m_aabbMin; + mutable b3Vector3 m_aabbMax; public: @@ -85,7 +85,7 @@ public: virtual ~b3TriangleIndexVertexArray(); //just to be backwards compatible - b3TriangleIndexVertexArray(int numTriangles,int* triangleIndexBase,int triangleIndexStride,int numVertices,btScalar* vertexBase,int vertexStride); + b3TriangleIndexVertexArray(int numTriangles,int* triangleIndexBase,int triangleIndexStride,int numVertices,b3Scalar* vertexBase,int vertexStride); void addIndexedMesh(const btIndexedMesh& mesh, PHY_ScalarType indexType = PHY_INTEGER) { @@ -124,8 +124,8 @@ public: virtual void preallocateIndices(int numindices){(void) numindices;} virtual bool hasPremadeAabb() const; - virtual void setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax ) const; - virtual void getPremadeAabb(btVector3* aabbMin, btVector3* aabbMax ) const; + virtual void setPremadeAabb(const b3Vector3& aabbMin, const b3Vector3& aabbMax ) const; + virtual void getPremadeAabb(b3Vector3* aabbMin, b3Vector3* aabbMax ) const; } ; diff --git a/opencl/gpu_narrowphase/test/main.cpp b/opencl/gpu_narrowphase/test/main.cpp index a18ce7abd..dd2be0934 100644 --- a/opencl/gpu_narrowphase/test/main.cpp +++ b/opencl/gpu_narrowphase/test/main.cpp @@ -17,15 +17,15 @@ subject to the following restrictions: #include "../basic_initialize/b3OpenCLUtils.h" #include "../host/b3ConvexHullContact.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" #include "parallel_primitives/host/btFillCL.h" #include "parallel_primitives/host/btBoundSearchCL.h" #include "parallel_primitives/host/btRadixSort32CL.h" #include "parallel_primitives/host/btPrefixScanCL.h" -#include "BulletCommon/CommandLineArgs.h" +#include "BulletCommon/b3CommandLineArgs.h" #include "../host/b3ConvexHullContact.h" -#include "BulletCommon/btMinMax.h" +#include "BulletCommon/b3MinMax.h" int g_nPassed = 0; int g_nFailed = 0; bool g_testFailed = 0; @@ -88,7 +88,7 @@ int main(int argc, char** argv) { int preferredDeviceIndex = -1; int preferredPlatformIndex = -1; - CommandLineArgs args(argc, argv); + b3CommandLineArgs args(argc, argv); args.GetCmdLineArgument("deviceId", preferredDeviceIndex); args.GetCmdLineArgument("platformId", preferredPlatformIndex); diff --git a/opencl/gpu_narrowphase/test/premake4.lua b/opencl/gpu_narrowphase/test/premake4.lua index 04246f177..e1ced407c 100644 --- a/opencl/gpu_narrowphase/test/premake4.lua +++ b/opencl/gpu_narrowphase/test/premake4.lua @@ -29,11 +29,11 @@ function createProject(vendor) "../../parallel_primitives/host/btPrefixScanCL.h", "../../parallel_primitives/host/btRadixSort32CL.cpp", "../../parallel_primitives/host/btRadixSort32CL.h", - "../../../src/BulletCommon/btAlignedAllocator.cpp", - "../../../src/BulletCommon/btAlignedAllocator.h", - "../../../src/BulletCommon/btAlignedObjectArray.h", - "../../../src/BulletCommon/btQuickprof.cpp", - "../../../src/BulletCommon/btQuickprof.h", + "../../../src/BulletCommon/b3AlignedAllocator.cpp", + "../../../src/BulletCommon/b3AlignedAllocator.h", + "../../../src/BulletCommon/b3AlignedObjectArray.h", + "../../../src/BulletCommon/b3Quickprof.cpp", + "../../../src/BulletCommon/b3Quickprof.h", "../../../src/BulletGeometry/**.cpp", "../../../src/BulletGeometry/**.h", diff --git a/opencl/gpu_rigidbody/host/b3GpuBatchingPgsSolver.cpp b/opencl/gpu_rigidbody/host/b3GpuBatchingPgsSolver.cpp index d189cf758..9d67d8c99 100644 --- a/opencl/gpu_rigidbody/host/b3GpuBatchingPgsSolver.cpp +++ b/opencl/gpu_rigidbody/host/b3GpuBatchingPgsSolver.cpp @@ -2,7 +2,7 @@ #include "b3GpuBatchingPgsSolver.h" #include "../../parallel_primitives/host/btRadixSort32CL.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "../../parallel_primitives/host/btLauncherCL.h" #include "../../parallel_primitives/host/btBoundSearchCL.h" #include "../../parallel_primitives/host/btPrefixScanCL.h" @@ -76,9 +76,9 @@ struct btGpuBatchingPgsSolverInternalData btOpenCLArray* m_pBufContactOutGPU; - btAlignedObjectArray m_idxBuffer; - btAlignedObjectArray m_sortData; - btAlignedObjectArray m_old; + b3AlignedObjectArray m_idxBuffer; + b3AlignedObjectArray m_sortData; + b3AlignedObjectArray m_old; }; @@ -519,7 +519,7 @@ void b3GpuBatchingPgsSolver::solveContacts(int numBodies, cl_mem bodyBuf, cl_mem btOpenCLArray& keyValuesInOut = *(m_data->m_solverGPU->m_sortDataBuffer); this->m_data->m_solverGPU->m_sort32->execute(keyValuesInOut); - /*btAlignedObjectArray hostValues; + /*b3AlignedObjectArray hostValues; keyValuesInOut.copyToHost(hostValues); printf("hostValues.size=%d\n",hostValues.size()); */ @@ -596,15 +596,15 @@ void b3GpuBatchingPgsSolver::solveContacts(int numBodies, cl_mem bodyBuf, cl_mem } else { BT_PROFILE("cpu batchContacts"); - btAlignedObjectArray cpuContacts; + b3AlignedObjectArray cpuContacts; btOpenCLArray* contactsIn = m_data->m_solverGPU->m_contactBuffer2; contactsIn->copyToHost(cpuContacts); btOpenCLArray* countsNative = m_data->m_solverGPU->m_numConstraints; btOpenCLArray* offsetsNative = m_data->m_solverGPU->m_offsets; - btAlignedObjectArray nNativeHost; - btAlignedObjectArray offsetsNativeHost; + b3AlignedObjectArray nNativeHost; + b3AlignedObjectArray offsetsNativeHost; { BT_PROFILE("countsNative/offsetsNative copyToHost"); @@ -641,7 +641,7 @@ void b3GpuBatchingPgsSolver::solveContacts(int numBodies, cl_mem bodyBuf, cl_mem } { BT_PROFILE("m_contactBuffer->copyFromHost"); - m_data->m_solverGPU->m_contactBuffer2->copyFromHost((btAlignedObjectArray&)cpuContacts); + m_data->m_solverGPU->m_contactBuffer2->copyFromHost((b3AlignedObjectArray&)cpuContacts); } } @@ -724,19 +724,19 @@ static bool sortfnc(const btSortData& a,const btSortData& b) -btAlignedObjectArray bodyUsed; +b3AlignedObjectArray bodyUsed; -btAlignedObjectArray idxBuffer; -btAlignedObjectArray sortData; -btAlignedObjectArray old; +b3AlignedObjectArray idxBuffer; +b3AlignedObjectArray sortData; +b3AlignedObjectArray old; inline int b3GpuBatchingPgsSolver::sortConstraintByBatch( b3Contact4* cs, int n, int simdWidth , int staticIdx, int numBodies) { - btAlignedObjectArray bodyUsed; + b3AlignedObjectArray bodyUsed; bodyUsed.resize(numBodies); for (int q=0;q* m_convexData; + b3AlignedObjectArray* m_convexData; - btAlignedObjectArray m_convexPolyhedra; - btAlignedObjectArray m_uniqueEdges; - btAlignedObjectArray m_convexVertices; - btAlignedObjectArray m_convexIndices; + b3AlignedObjectArray m_convexPolyhedra; + b3AlignedObjectArray m_uniqueEdges; + b3AlignedObjectArray m_convexVertices; + b3AlignedObjectArray m_convexIndices; btOpenCLArray* m_convexPolyhedraGPU; - btOpenCLArray* m_uniqueEdgesGPU; - btOpenCLArray* m_convexVerticesGPU; + btOpenCLArray* m_uniqueEdgesGPU; + btOpenCLArray* m_convexVerticesGPU; btOpenCLArray* m_convexIndicesGPU; - btOpenCLArray* m_worldVertsB1GPU; + btOpenCLArray* m_worldVertsB1GPU; btOpenCLArray* m_clippingFacesOutGPU; - btOpenCLArray* m_worldNormalsAGPU; - btOpenCLArray* m_worldVertsA1GPU; - btOpenCLArray* m_worldVertsB2GPU; + btOpenCLArray* m_worldNormalsAGPU; + btOpenCLArray* m_worldVertsA1GPU; + btOpenCLArray* m_worldVertsB2GPU; - btAlignedObjectArray m_cpuChildShapes; + b3AlignedObjectArray m_cpuChildShapes; btOpenCLArray* m_gpuChildShapes; - btAlignedObjectArray m_convexFaces; + b3AlignedObjectArray m_convexFaces; btOpenCLArray* m_convexFacesGPU; GpuSatCollision* m_gpuSatCollision; - btAlignedObjectArray* m_pBufPairsCPU; + b3AlignedObjectArray* m_pBufPairsCPU; btOpenCLArray* m_convexPairsOutGPU; btOpenCLArray* m_planePairs; btOpenCLArray* m_pBufContactOutGPU; - btAlignedObjectArray* m_pBufContactOutCPU; + b3AlignedObjectArray* m_pBufContactOutCPU; - btAlignedObjectArray* m_bodyBufferCPU; + b3AlignedObjectArray* m_bodyBufferCPU; btOpenCLArray* m_bodyBufferGPU; - btAlignedObjectArray* m_inertiaBufferCPU; + b3AlignedObjectArray* m_inertiaBufferCPU; btOpenCLArray* m_inertiaBufferGPU; int m_numAcceleratedShapes; int m_numAcceleratedRigidBodies; - btAlignedObjectArray m_collidablesCPU; + b3AlignedObjectArray m_collidablesCPU; btOpenCLArray* m_collidablesGPU; btOpenCLArray* m_localShapeAABBGPU; - btAlignedObjectArray* m_localShapeAABBCPU; + b3AlignedObjectArray* m_localShapeAABBCPU; - btAlignedObjectArray m_bvhData; + b3AlignedObjectArray m_bvhData; btOpenCLArray* m_treeNodesGPU; btOpenCLArray* m_subTreesGPU; @@ -89,18 +89,18 @@ m_queue(queue) m_data->m_config = config; m_data->m_gpuSatCollision = new GpuSatCollision(ctx,device,queue); - m_data->m_pBufPairsCPU = new btAlignedObjectArray; + m_data->m_pBufPairsCPU = new b3AlignedObjectArray; m_data->m_pBufPairsCPU->resize(config.m_maxBroadphasePairs); m_data->m_convexPairsOutGPU = new btOpenCLArray(ctx,queue,config.m_maxBroadphasePairs,false); m_data->m_planePairs = new btOpenCLArray(ctx,queue,config.m_maxBroadphasePairs,false); - m_data->m_pBufContactOutCPU = new btAlignedObjectArray(); + m_data->m_pBufContactOutCPU = new b3AlignedObjectArray(); m_data->m_pBufContactOutCPU->resize(config.m_maxBroadphasePairs); - m_data->m_bodyBufferCPU = new btAlignedObjectArray(); + m_data->m_bodyBufferCPU = new b3AlignedObjectArray(); m_data->m_bodyBufferCPU->resize(config.m_maxConvexBodies); - m_data->m_inertiaBufferCPU = new btAlignedObjectArray(); + m_data->m_inertiaBufferCPU = new b3AlignedObjectArray(); m_data->m_inertiaBufferCPU->resize(config.m_maxConvexBodies); m_data->m_pBufContactOutGPU = new btOpenCLArray(ctx,queue, config.m_maxContactCapacity,true); @@ -108,7 +108,7 @@ m_queue(queue) m_data->m_inertiaBufferGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies,false); m_data->m_collidablesGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexShapes); - m_data->m_localShapeAABBCPU = new btAlignedObjectArray; + m_data->m_localShapeAABBCPU = new b3AlignedObjectArray; m_data->m_localShapeAABBGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexShapes); @@ -119,20 +119,20 @@ m_queue(queue) m_data->m_gpuChildShapes = new btOpenCLArray(ctx,queue,config.m_maxCompoundChildShapes,false); m_data->m_convexPolyhedraGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexShapes,false); - m_data->m_uniqueEdgesGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexUniqueEdges,true); - m_data->m_convexVerticesGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexVertices,true); + m_data->m_uniqueEdgesGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexUniqueEdges,true); + m_data->m_convexVerticesGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexVertices,true); m_data->m_convexIndicesGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexIndices,true); - m_data->m_worldVertsB1GPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies*config.m_maxVerticesPerFace); + m_data->m_worldVertsB1GPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies*config.m_maxVerticesPerFace); m_data->m_clippingFacesOutGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies); - m_data->m_worldNormalsAGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies); - m_data->m_worldVertsA1GPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies*config.m_maxVerticesPerFace); - m_data->m_worldVertsB2GPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies*config.m_maxVerticesPerFace); + m_data->m_worldNormalsAGPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies); + m_data->m_worldVertsA1GPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies*config.m_maxVerticesPerFace); + m_data->m_worldVertsB2GPU = new btOpenCLArray(ctx,queue,config.m_maxConvexBodies*config.m_maxVerticesPerFace); - m_data->m_convexData = new btAlignedObjectArray(); + m_data->m_convexData = new b3AlignedObjectArray(); m_data->m_convexData->resize(config.m_maxConvexShapes); @@ -209,8 +209,8 @@ int b3GpuNarrowPhase::registerSphereShape(float radius) if (col.m_shapeIndex>=0) { b3SapAabb aabb; - btVector3 myAabbMin(-radius,-radius,-radius); - btVector3 myAabbMax(radius,radius,radius); + b3Vector3 myAabbMin(-radius,-radius,-radius); + b3Vector3 myAabbMax(radius,radius,radius); aabb.m_min[0] = myAabbMin[0];//s_convexHeightField->m_aabb.m_min.x; aabb.m_min[1] = myAabbMin[1];//s_convexHeightField->m_aabb.m_min.y; @@ -231,7 +231,7 @@ int b3GpuNarrowPhase::registerSphereShape(float radius) } -int b3GpuNarrowPhase::registerFace(const btVector3& faceNormal, float faceConstant) +int b3GpuNarrowPhase::registerFace(const b3Vector3& faceNormal, float faceConstant) { int faceOffset = m_data->m_convexFaces.size(); btGpuFace& face = m_data->m_convexFaces.expand(); @@ -243,7 +243,7 @@ int b3GpuNarrowPhase::registerFace(const btVector3& faceNormal, float faceConsta return faceOffset; } -int b3GpuNarrowPhase::registerPlaneShape(const btVector3& planeNormal, float planeConstant) +int b3GpuNarrowPhase::registerPlaneShape(const b3Vector3& planeNormal, float planeConstant) { int collidableIndex = allocateCollidable(); @@ -346,13 +346,13 @@ int b3GpuNarrowPhase::registerConvexHullShape(b3ConvexUtility* convexPtr,b3Colli int b3GpuNarrowPhase::registerConvexHullShape(const float* vertices, int strideInBytes, int numVertices, const float* scaling) { - btAlignedObjectArray verts; + b3AlignedObjectArray verts; unsigned char* vts = (unsigned char*) vertices; for (int i=0;im_vertices.size();i++) localCenter+=utilPtr->m_vertices[i]; localCenter*= (1.f/utilPtr->m_vertices.size()); @@ -388,8 +388,8 @@ int b3GpuNarrowPhase::registerConvexHullShape(b3ConvexUtility* utilPtr) { b3SapAabb aabb; - btVector3 myAabbMin(1e30f,1e30f,1e30f); - btVector3 myAabbMax(-1e30f,-1e30f,-1e30f); + b3Vector3 myAabbMin(1e30f,1e30f,1e30f); + b3Vector3 myAabbMax(-1e30f,-1e30f,-1e30f); for (int i=0;im_vertices.size();i++) { @@ -414,7 +414,7 @@ int b3GpuNarrowPhase::registerConvexHullShape(b3ConvexUtility* utilPtr) } -int b3GpuNarrowPhase::registerCompoundShape(btAlignedObjectArray* childShapes) +int b3GpuNarrowPhase::registerCompoundShape(b3AlignedObjectArray* childShapes) { int collidableIndex = allocateCollidable(); @@ -438,8 +438,8 @@ int b3GpuNarrowPhase::registerCompoundShape(btAlignedObjectArraysize();i++) @@ -448,17 +448,17 @@ int b3GpuNarrowPhase::registerCompoundShape(btAlignedObjectArraym_localShapeAABBCPU->at(childColIndex); - btVector3 childLocalAabbMin(aabbLoc.m_min[0],aabbLoc.m_min[1],aabbLoc.m_min[2]); - btVector3 childLocalAabbMax(aabbLoc.m_max[0],aabbLoc.m_max[1],aabbLoc.m_max[2]); - btVector3 aMin,aMax; - btScalar margin(0.f); - btTransform childTr; + b3Vector3 childLocalAabbMin(aabbLoc.m_min[0],aabbLoc.m_min[1],aabbLoc.m_min[2]); + b3Vector3 childLocalAabbMax(aabbLoc.m_max[0],aabbLoc.m_max[1],aabbLoc.m_max[2]); + b3Vector3 aMin,aMax; + b3Scalar margin(0.f); + b3Transform childTr; childTr.setIdentity(); - childTr.setOrigin(btVector3(childShapes->at(i).m_childPosition[0], + childTr.setOrigin(b3Vector3(childShapes->at(i).m_childPosition[0], childShapes->at(i).m_childPosition[1], childShapes->at(i).m_childPosition[2])); - childTr.setRotation(btQuaternion(childShapes->at(i).m_childOrientation[0], + childTr.setRotation(b3Quaternion(childShapes->at(i).m_childOrientation[0], childShapes->at(i).m_childOrientation[1], childShapes->at(i).m_childOrientation[2], childShapes->at(i).m_childOrientation[3])); @@ -485,7 +485,7 @@ int b3GpuNarrowPhase::registerCompoundShape(btAlignedObjectArray* vertices, btAlignedObjectArray* indices,const float* scaling1) +int b3GpuNarrowPhase::registerConcaveMesh(b3AlignedObjectArray* vertices, b3AlignedObjectArray* indices,const float* scaling1) { //right now we only support one single mesh, it is on the todo to merge all mesh data etc btAssert(m_data->m_treeNodesGPU ==0); @@ -496,7 +496,7 @@ int b3GpuNarrowPhase::registerConcaveMesh(btAlignedObjectArray* vert exit (0); } - btVector3 scaling(scaling1[0],scaling1[1],scaling1[2]); + b3Vector3 scaling(scaling1[0],scaling1[1],scaling1[2]); int collidableIndex = allocateCollidable(); b3Collidable& col = getCollidableCpu(collidableIndex); @@ -507,12 +507,12 @@ int b3GpuNarrowPhase::registerConcaveMesh(btAlignedObjectArray* vert b3SapAabb aabb; - btVector3 myAabbMin(1e30f,1e30f,1e30f); - btVector3 myAabbMax(-1e30f,-1e30f,-1e30f); + b3Vector3 myAabbMin(1e30f,1e30f,1e30f); + b3Vector3 myAabbMax(-1e30f,-1e30f,-1e30f); for (int i=0;isize();i++) { - btVector3 vtx(vertices->at(i)*scaling); + b3Vector3 vtx(vertices->at(i)*scaling); myAabbMin.setMin(vtx); myAabbMax.setMax(vtx); } @@ -530,7 +530,7 @@ int b3GpuNarrowPhase::registerConcaveMesh(btAlignedObjectArray* vert m_data->m_localShapeAABBGPU->push_back(aabb); b3OptimizedBvh* bvh = new b3OptimizedBvh(); - //void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantizedAabbCompression, const btVector3& bvhAabbMin, const btVector3& bvhAabbMax) + //void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantizedAabbCompression, const b3Vector3& bvhAabbMin, const b3Vector3& bvhAabbMax) bool useQuantizedAabbCompression = true; b3TriangleIndexVertexArray* meshInterface=new b3TriangleIndexVertexArray(); @@ -538,12 +538,12 @@ int b3GpuNarrowPhase::registerConcaveMesh(btAlignedObjectArray* vert mesh.m_numTriangles = indices->size()/3; mesh.m_numVertices = vertices->size(); mesh.m_vertexBase = (const unsigned char *)&vertices->at(0).getX(); - mesh.m_vertexStride = sizeof(btVector3); + mesh.m_vertexStride = sizeof(b3Vector3); mesh.m_triangleIndexStride = 3 * sizeof(int);// or sizeof(int) mesh.m_triangleIndexBase = (const unsigned char *)&indices->at(0); meshInterface->addIndexedMesh(mesh); - bvh->build(meshInterface, useQuantizedAabbCompression, (btVector3&)aabb.m_min, (btVector3&)aabb.m_max); + bvh->build(meshInterface, useQuantizedAabbCompression, (b3Vector3&)aabb.m_min, (b3Vector3&)aabb.m_max); m_data->m_bvhData.push_back(bvh); int numNodes = bvh->getQuantizedNodeArray().size(); btOpenCLArray* treeNodesGPU = new btOpenCLArray(this->m_context,this->m_queue,numNodes); @@ -560,21 +560,21 @@ int b3GpuNarrowPhase::registerConcaveMesh(btAlignedObjectArray* vert return collidableIndex; } -int b3GpuNarrowPhase::registerConcaveMeshShape(btAlignedObjectArray* vertices, btAlignedObjectArray* indices,b3Collidable& col, const float* scaling1) +int b3GpuNarrowPhase::registerConcaveMeshShape(b3AlignedObjectArray* vertices, b3AlignedObjectArray* indices,b3Collidable& col, const float* scaling1) { - btVector3 scaling(scaling1[0],scaling1[1],scaling1[2]); + b3Vector3 scaling(scaling1[0],scaling1[1],scaling1[2]); m_data->m_convexData->resize(m_data->m_numAcceleratedShapes+1); m_data->m_convexPolyhedra.resize(m_data->m_numAcceleratedShapes+1); b3ConvexPolyhedronCL& convex = m_data->m_convexPolyhedra.at(m_data->m_convexPolyhedra.size()-1); - convex.mC = btVector3(0,0,0); - convex.mE = btVector3(0,0,0); - convex.m_extents= btVector3(0,0,0); - convex.m_localCenter = btVector3(0,0,0); + convex.mC = b3Vector3(0,0,0); + convex.mE = b3Vector3(0,0,0); + convex.m_extents= b3Vector3(0,0,0); + convex.m_localCenter = b3Vector3(0,0,0); convex.m_radius = 0.f; convex.m_numUniqueEdges = 0; @@ -593,12 +593,12 @@ int b3GpuNarrowPhase::registerConcaveMeshShape(btAlignedObjectArray* { //printf("i=%d out of %d", i,convex.m_numFaces); } - btVector3 vert0(vertices->at(indices->at(i*3))*scaling); - btVector3 vert1(vertices->at(indices->at(i*3+1))*scaling); - btVector3 vert2(vertices->at(indices->at(i*3+2))*scaling); + b3Vector3 vert0(vertices->at(indices->at(i*3))*scaling); + b3Vector3 vert1(vertices->at(indices->at(i*3+1))*scaling); + b3Vector3 vert2(vertices->at(indices->at(i*3+2))*scaling); - btVector3 normal = ((vert1-vert0).cross(vert2-vert0)).normalize(); - btScalar c = -(normal.dot(vert0)); + b3Vector3 normal = ((vert1-vert0).cross(vert2-vert0)).normalize(); + b3Scalar c = -(normal.dot(vert0)); m_data->m_convexFaces[convex.m_faceOffset+i].m_plane[0] = normal.getX(); m_data->m_convexFaces[convex.m_faceOffset+i].m_plane[1] = normal.getY(); @@ -753,8 +753,8 @@ const b3SapAabb& b3GpuNarrowPhase::getLocalSpaceAabb(int collidableIndex) const int b3GpuNarrowPhase::registerRigidBody(int collidableIndex, float mass, const float* position, const float* orientation , const float* aabbMinPtr, const float* aabbMaxPtr,bool writeToGpu) { - btVector3 aabbMin(aabbMinPtr[0],aabbMinPtr[1],aabbMinPtr[2]); - btVector3 aabbMax (aabbMaxPtr[0],aabbMaxPtr[1],aabbMaxPtr[2]); + b3Vector3 aabbMin(aabbMinPtr[0],aabbMinPtr[1],aabbMinPtr[2]); + b3Vector3 aabbMax (aabbMaxPtr[0],aabbMaxPtr[1],aabbMaxPtr[2]); btAssert(m_data->m_numAcceleratedRigidBodies< (m_data->m_config.m_maxConvexBodies-1)); @@ -807,9 +807,9 @@ int b3GpuNarrowPhase::registerRigidBody(int collidableIndex, float mass, const f //approximate using the aabb of the shape //Aabb aabb = (*m_data->m_shapePointers)[shapeIndex]->m_aabb; - btVector3 halfExtents = (aabbMax-aabbMin);//*0.5f;//fake larger inertia makes demos more stable ;-) + b3Vector3 halfExtents = (aabbMax-aabbMin);//*0.5f;//fake larger inertia makes demos more stable ;-) - btVector3 localInertia; + b3Vector3 localInertia; float lx=2.f*halfExtents[0]; float ly=2.f*halfExtents[1]; @@ -819,7 +819,7 @@ int b3GpuNarrowPhase::registerRigidBody(int collidableIndex, float mass, const f (mass/12.0f) * (lx*lx + lz*lz), (mass/12.0f) * (lx*lx + ly*ly)); - btVector3 invLocalInertia; + b3Vector3 invLocalInertia; invLocalInertia[0] = 1.f/localInertia[0]; invLocalInertia[1] = 1.f/localInertia[1]; invLocalInertia[2] = 1.f/localInertia[2]; @@ -830,7 +830,7 @@ int b3GpuNarrowPhase::registerRigidBody(int collidableIndex, float mass, const f 0, invLocalInertia[1], 0, 0, 0, invLocalInertia[2]); - btMatrix3x3 m (body.m_quat); + b3Matrix3x3 m (body.m_quat); shapeInfo.m_invInertiaWorld = m.scaled(invLocalInertia) * m.transpose(); diff --git a/opencl/gpu_rigidbody/host/b3GpuNarrowPhase.h b/opencl/gpu_rigidbody/host/b3GpuNarrowPhase.h index f5f1e4ee5..c564fb17a 100644 --- a/opencl/gpu_rigidbody/host/b3GpuNarrowPhase.h +++ b/opencl/gpu_rigidbody/host/b3GpuNarrowPhase.h @@ -3,8 +3,8 @@ #include "../../gpu_narrowphase/host/b3Collidable.h" #include "basic_initialize/b3OpenCLInclude.h" -#include "BulletCommon/btAlignedObjectArray.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3AlignedObjectArray.h" +#include "BulletCommon/b3Vector3.h" class b3GpuNarrowPhase { @@ -20,7 +20,7 @@ protected: cl_command_queue m_queue; int registerConvexHullShape(class b3ConvexUtility* convexPtr, b3Collidable& col); - int registerConcaveMeshShape(btAlignedObjectArray* vertices, btAlignedObjectArray* indices, b3Collidable& col, const float* scaling); + int registerConcaveMeshShape(b3AlignedObjectArray* vertices, b3AlignedObjectArray* indices, b3Collidable& col, const float* scaling); public: @@ -32,12 +32,12 @@ public: virtual ~b3GpuNarrowPhase(void); int registerSphereShape(float radius); - int registerPlaneShape(const btVector3& planeNormal, float planeConstant); + int registerPlaneShape(const b3Vector3& planeNormal, float planeConstant); - int registerCompoundShape(btAlignedObjectArray* childShapes); - int registerFace(const btVector3& faceNormal, float faceConstant); + int registerCompoundShape(b3AlignedObjectArray* childShapes); + int registerFace(const b3Vector3& faceNormal, float faceConstant); - int registerConcaveMesh(btAlignedObjectArray* vertices, btAlignedObjectArray* indices,const float* scaling); + int registerConcaveMesh(b3AlignedObjectArray* vertices, b3AlignedObjectArray* indices,const float* scaling); //do they need to be merged? diff --git a/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipeline.cpp b/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipeline.cpp index f0187398d..0a434bbdf 100644 --- a/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipeline.cpp +++ b/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipeline.cpp @@ -20,7 +20,7 @@ #include "b3GpuBatchingPgsSolver.h" #include "b3Solver.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "b3Config.h" b3GpuRigidBodyPipeline::b3GpuRigidBodyPipeline(cl_context ctx,cl_device_id device, cl_command_queue q,class b3GpuNarrowPhase* narrowphase, class b3GpuSapBroadphase* broadphaseSap ) @@ -133,9 +133,9 @@ void b3GpuRigidBodyPipeline::stepSimulation(float deltaTime) bool forceHost = false; if (forceHost) { - btAlignedObjectArray hostBodies; - btAlignedObjectArray hostInertias; - btAlignedObjectArray hostContacts; + b3AlignedObjectArray hostBodies; + b3AlignedObjectArray hostInertias; + b3AlignedObjectArray hostContacts; { BT_PROFILE("copyToHost"); @@ -161,11 +161,11 @@ void b3GpuRigidBodyPipeline::stepSimulation(float deltaTime) } } else { - btAlignedObjectArray hostBodies; + b3AlignedObjectArray hostBodies; gpuBodies.copyToHost(hostBodies); - btAlignedObjectArray hostInertias; + b3AlignedObjectArray hostInertias; gpuInertias.copyToHost(hostInertias); - btAlignedObjectArray hostContacts; + b3AlignedObjectArray hostContacts; gpuContacts.copyToHost(hostContacts); { m_data->m_solver->solveContacts(m_data->m_narrowphase->getNumBodiesGpu(),&hostBodies[0],&hostInertias[0],numContacts,&hostContacts[0]); @@ -207,7 +207,7 @@ void b3GpuRigidBodyPipeline::integrate(float timeStep) float angularDamp = 0.99f; launcher.setConst(angularDamp); - btVector3 gravity(0.f,-9.8f,0.f); + b3Vector3 gravity(0.f,-9.8f,0.f); launcher.setConst(gravity); launcher.launch1D(numBodies); @@ -256,18 +256,18 @@ int b3GpuRigidBodyPipeline::getNumBodies() const int b3GpuRigidBodyPipeline::registerPhysicsInstance(float mass, const float* position, const float* orientation, int collidableIndex, int userIndex) { - btVector3 aabbMin(0,0,0),aabbMax(0,0,0); + b3Vector3 aabbMin(0,0,0),aabbMax(0,0,0); if (collidableIndex>=0) { b3SapAabb localAabb = m_data->m_narrowphase->getLocalSpaceAabb(collidableIndex); - btVector3 localAabbMin(localAabb.m_min[0],localAabb.m_min[1],localAabb.m_min[2]); - btVector3 localAabbMax(localAabb.m_max[0],localAabb.m_max[1],localAabb.m_max[2]); + b3Vector3 localAabbMin(localAabb.m_min[0],localAabb.m_min[1],localAabb.m_min[2]); + b3Vector3 localAabbMax(localAabb.m_max[0],localAabb.m_max[1],localAabb.m_max[2]); - btScalar margin = 0.01f; - btTransform t; + b3Scalar margin = 0.01f; + b3Transform t; t.setIdentity(); - t.setOrigin(btVector3(position[0],position[1],position[2])); - t.setRotation(btQuaternion(orientation[0],orientation[1],orientation[2],orientation[3])); + t.setOrigin(b3Vector3(position[0],position[1],position[2])); + t.setRotation(b3Quaternion(orientation[0],orientation[1],orientation[2],orientation[3])); btTransformAabb(localAabbMin,localAabbMax, margin,t,aabbMin,aabbMax); if (mass) { diff --git a/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipeline.h b/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipeline.h index 23f89a2ee..0225bc2ae 100644 --- a/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipeline.h +++ b/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipeline.h @@ -23,10 +23,10 @@ public: //int registerConvexPolyhedron(const float* vertices, int strideInBytes, int numVertices, const float* scaling); //int registerSphereShape(float radius); - //int registerPlaneShape(const btVector3& planeNormal, float planeConstant); + //int registerPlaneShape(const b3Vector3& planeNormal, float planeConstant); - //int registerConcaveMesh(btAlignedObjectArray* vertices, btAlignedObjectArray* indices, const float* scaling); - //int registerCompoundShape(btAlignedObjectArray* childShapes); + //int registerConcaveMesh(b3AlignedObjectArray* vertices, b3AlignedObjectArray* indices, const float* scaling); + //int registerCompoundShape(b3AlignedObjectArray* childShapes); int registerPhysicsInstance(float mass, const float* position, const float* orientation, int collisionShapeIndex, int userData); diff --git a/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipelineInternalData.h b/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipelineInternalData.h index 1391295be..064209c92 100644 --- a/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipelineInternalData.h +++ b/opencl/gpu_rigidbody/host/b3GpuRigidBodyPipelineInternalData.h @@ -2,7 +2,7 @@ #define BT_GPU_RIGIDBODY_PIPELINE_INTERNAL_DATA_H #include "../../basic_initialize/b3OpenCLInclude.h" -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedObjectArray.h" #include "../../parallel_primitives/host/btOpenCLArray.h" #include "../../gpu_narrowphase/host/b3Collidable.h" diff --git a/opencl/gpu_rigidbody/host/b3Solver.cpp b/opencl/gpu_rigidbody/host/b3Solver.cpp index c1feb3013..c2ff172f7 100644 --- a/opencl/gpu_rigidbody/host/b3Solver.cpp +++ b/opencl/gpu_rigidbody/host/b3Solver.cpp @@ -39,9 +39,9 @@ bool useNewBatchingKernel = false; #include "../kernels/batchingKernelsNew.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" #include "../../parallel_primitives/host/btLauncherCL.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3Vector3.h" struct SolverDebugInfo { @@ -282,8 +282,8 @@ b3Solver::~b3Solver() static inline - float calcRelVel(const btVector3& l0, const btVector3& l1, const btVector3& a0, const btVector3& a1, - const btVector3& linVel0, const btVector3& angVel0, const btVector3& linVel1, const btVector3& angVel1) + float calcRelVel(const b3Vector3& l0, const b3Vector3& l1, const b3Vector3& a0, const b3Vector3& a1, + const b3Vector3& linVel0, const b3Vector3& angVel0, const b3Vector3& linVel1, const b3Vector3& angVel1) { return btDot(l0, linVel0) + btDot(a0, angVel0) + btDot(l1, linVel1) + btDot(a1, angVel1); } @@ -291,8 +291,8 @@ b3Solver::~b3Solver() static inline - void setLinearAndAngular(const btVector3& n, const btVector3& r0, const btVector3& r1, - btVector3& linear, btVector3& angular0, btVector3& angular1) + void setLinearAndAngular(const b3Vector3& n, const b3Vector3& r0, const b3Vector3& r1, + b3Vector3& linear, b3Vector3& angular0, b3Vector3& angular1) { linear = -n; angular0 = -btCross(r0, n); @@ -304,15 +304,15 @@ template static __inline void solveContact(b3GpuConstraint4& cs, - const btVector3& posA, btVector3& linVelA, btVector3& angVelA, float invMassA, const btMatrix3x3& invInertiaA, - const btVector3& posB, btVector3& linVelB, btVector3& angVelB, float invMassB, const btMatrix3x3& invInertiaB, + const b3Vector3& posA, b3Vector3& linVelA, b3Vector3& angVelA, float invMassA, const b3Matrix3x3& invInertiaA, + const b3Vector3& posB, b3Vector3& linVelB, b3Vector3& angVelB, float invMassB, const b3Matrix3x3& invInertiaB, float maxRambdaDt[4], float minRambdaDt[4]) { - btVector3 dLinVelA; dLinVelA.setZero(); - btVector3 dAngVelA; dAngVelA.setZero(); - btVector3 dLinVelB; dLinVelB.setZero(); - btVector3 dAngVelB; dAngVelB.setZero(); + b3Vector3 dLinVelA; dLinVelA.setZero(); + b3Vector3 dAngVelA; dAngVelA.setZero(); + b3Vector3 dLinVelB; dLinVelB.setZero(); + b3Vector3 dAngVelB; dAngVelB.setZero(); for(int ic=0; ic<4; ic++) { @@ -320,12 +320,12 @@ void solveContact(b3GpuConstraint4& cs, if( cs.m_jacCoeffInv[ic] == 0.f ) continue; { - btVector3 angular0, angular1, linear; - btVector3 r0 = cs.m_worldPos[ic] - (btVector3&)posA; - btVector3 r1 = cs.m_worldPos[ic] - (btVector3&)posB; - setLinearAndAngular( (const btVector3 &)-cs.m_linear, (const btVector3 &)r0, (const btVector3 &)r1, linear, angular0, angular1 ); + b3Vector3 angular0, angular1, linear; + b3Vector3 r0 = cs.m_worldPos[ic] - (b3Vector3&)posA; + b3Vector3 r1 = cs.m_worldPos[ic] - (b3Vector3&)posB; + setLinearAndAngular( (const b3Vector3 &)-cs.m_linear, (const b3Vector3 &)r0, (const b3Vector3 &)r1, linear, angular0, angular1 ); - float rambdaDt = calcRelVel((const btVector3 &)cs.m_linear,(const btVector3 &) -cs.m_linear, angular0, angular1, + float rambdaDt = calcRelVel((const b3Vector3 &)cs.m_linear,(const b3Vector3 &) -cs.m_linear, angular0, angular1, linVelA, angVelA, linVelB, angVelB ) + cs.m_b[ic]; rambdaDt *= cs.m_jacCoeffInv[ic]; @@ -339,10 +339,10 @@ void solveContact(b3GpuConstraint4& cs, cs.m_appliedRambdaDt[ic] = updated; } - btVector3 linImp0 = invMassA*linear*rambdaDt; - btVector3 linImp1 = invMassB*(-linear)*rambdaDt; - btVector3 angImp0 = (invInertiaA* angular0)*rambdaDt; - btVector3 angImp1 = (invInertiaB* angular1)*rambdaDt; + b3Vector3 linImp0 = invMassA*linear*rambdaDt; + b3Vector3 linImp1 = invMassB*(-linear)*rambdaDt; + b3Vector3 angImp0 = (invInertiaA* angular0)*rambdaDt; + b3Vector3 angImp1 = (invInertiaB* angular1)*rambdaDt; #ifdef _WIN32 btAssert(_finite(linImp0.getX())); btAssert(_finite(linImp1.getX())); @@ -381,30 +381,30 @@ void solveContact(b3GpuConstraint4& cs, static __inline void solveFriction(b3GpuConstraint4& cs, - const btVector3& posA, btVector3& linVelA, btVector3& angVelA, float invMassA, const btMatrix3x3& invInertiaA, - const btVector3& posB, btVector3& linVelB, btVector3& angVelB, float invMassB, const btMatrix3x3& invInertiaB, + const b3Vector3& posA, b3Vector3& linVelA, b3Vector3& angVelA, float invMassA, const b3Matrix3x3& invInertiaA, + const b3Vector3& posB, b3Vector3& linVelB, b3Vector3& angVelB, float invMassB, const b3Matrix3x3& invInertiaB, float maxRambdaDt[4], float minRambdaDt[4]) { if( cs.m_fJacCoeffInv[0] == 0 && cs.m_fJacCoeffInv[0] == 0 ) return; - const btVector3& center = (const btVector3&)cs.m_center; + const b3Vector3& center = (const b3Vector3&)cs.m_center; - btVector3 n = -(const btVector3&)cs.m_linear; + b3Vector3 n = -(const b3Vector3&)cs.m_linear; - btVector3 tangent[2]; + b3Vector3 tangent[2]; #if 1 btPlaneSpace1 (n, tangent[0],tangent[1]); #else - btVector3 r = cs.m_worldPos[0]-center; + b3Vector3 r = cs.m_worldPos[0]-center; tangent[0] = cross3( n, r ); tangent[1] = cross3( tangent[0], n ); tangent[0] = normalize3( tangent[0] ); tangent[1] = normalize3( tangent[1] ); #endif - btVector3 angular0, angular1, linear; - btVector3 r0 = center - posA; - btVector3 r1 = center - posB; + b3Vector3 angular0, angular1, linear; + b3Vector3 r0 = center - posA; + b3Vector3 r1 = center - posB; for(int i=0; i<2; i++) { setLinearAndAngular( tangent[i], r0, r1, linear, angular0, angular1 ); @@ -422,10 +422,10 @@ void solveContact(b3GpuConstraint4& cs, cs.m_fAppliedRambdaDt[i] = updated; } - btVector3 linImp0 = invMassA*linear*rambdaDt; - btVector3 linImp1 = invMassB*(-linear)*rambdaDt; - btVector3 angImp0 = (invInertiaA* angular0)*rambdaDt; - btVector3 angImp1 = (invInertiaB* angular1)*rambdaDt; + b3Vector3 linImp0 = invMassA*linear*rambdaDt; + b3Vector3 linImp1 = invMassB*(-linear)*rambdaDt; + b3Vector3 angImp0 = (invInertiaA* angular0)*rambdaDt; + b3Vector3 angImp1 = (invInertiaB* angular1)*rambdaDt; #ifdef _WIN32 btAssert(_finite(linImp0.getX())); btAssert(_finite(linImp1.getX())); @@ -437,8 +437,8 @@ void solveContact(b3GpuConstraint4& cs, } { // angular damping for point constraint - btVector3 ab = ( posB - posA ).normalized(); - btVector3 ac = ( center - posA ).normalized(); + b3Vector3 ab = ( posB - posA ).normalized(); + b3Vector3 ac = ( center - posA ).normalized(); if( btDot( ab, ac ) > 0.95f || (invMassA == 0.f || invMassB == 0.f)) { float angNA = btDot( n, angVelA ); @@ -454,7 +454,7 @@ void solveContact(b3GpuConstraint4& cs, struct SolveTask// : public ThreadPool::Task { - SolveTask(btAlignedObjectArray& bodies, btAlignedObjectArray& shapes, btAlignedObjectArray& constraints, + SolveTask(b3AlignedObjectArray& bodies, b3AlignedObjectArray& shapes, b3AlignedObjectArray& constraints, int start, int nConstraints) : m_bodies( bodies ), m_shapes( shapes ), m_constraints( constraints ), m_start( start ), m_nConstraints( nConstraints ), m_solveFriction( true ){} @@ -480,8 +480,8 @@ struct SolveTask// : public ThreadPool::Task float maxRambdaDt[4] = {FLT_MAX,FLT_MAX,FLT_MAX,FLT_MAX}; float minRambdaDt[4] = {0.f,0.f,0.f,0.f}; - solveContact( m_constraints[i], (btVector3&)bodyA.m_pos, (btVector3&)bodyA.m_linVel, (btVector3&)bodyA.m_angVel, bodyA.m_invMass, (const btMatrix3x3 &)m_shapes[aIdx].m_invInertiaWorld, - (btVector3&)bodyB.m_pos, (btVector3&)bodyB.m_linVel, (btVector3&)bodyB.m_angVel, bodyB.m_invMass, (const btMatrix3x3 &)m_shapes[bIdx].m_invInertiaWorld, + solveContact( m_constraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass, (const b3Matrix3x3 &)m_shapes[aIdx].m_invInertiaWorld, + (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, (const b3Matrix3x3 &)m_shapes[bIdx].m_invInertiaWorld, maxRambdaDt, minRambdaDt ); } @@ -502,8 +502,8 @@ struct SolveTask// : public ThreadPool::Task minRambdaDt[j] = -maxRambdaDt[j]; } - solveFriction( m_constraints[i], (btVector3&)bodyA.m_pos, (btVector3&)bodyA.m_linVel, (btVector3&)bodyA.m_angVel, bodyA.m_invMass,(const btMatrix3x3 &) m_shapes[aIdx].m_invInertiaWorld, - (btVector3&)bodyB.m_pos, (btVector3&)bodyB.m_linVel, (btVector3&)bodyB.m_angVel, bodyB.m_invMass,(const btMatrix3x3 &) m_shapes[bIdx].m_invInertiaWorld, + solveFriction( m_constraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass,(const b3Matrix3x3 &) m_shapes[aIdx].m_invInertiaWorld, + (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass,(const b3Matrix3x3 &) m_shapes[bIdx].m_invInertiaWorld, maxRambdaDt, minRambdaDt ); } @@ -512,9 +512,9 @@ struct SolveTask// : public ThreadPool::Task } - btAlignedObjectArray& m_bodies; - btAlignedObjectArray& m_shapes; - btAlignedObjectArray& m_constraints; + b3AlignedObjectArray& m_bodies; + b3AlignedObjectArray& m_shapes; + b3AlignedObjectArray& m_constraints; int m_start; int m_nConstraints; bool m_solveFriction; @@ -525,11 +525,11 @@ void b3Solver::solveContactConstraintHost( btOpenCLArray* bodyBu btOpenCLArray* constraint, void* additionalData, int n ,int maxNumBatches) { - btAlignedObjectArray bodyNative; + b3AlignedObjectArray bodyNative; bodyBuf->copyToHost(bodyNative); - btAlignedObjectArray shapeNative; + b3AlignedObjectArray shapeNative; shapeBuf->copyToHost(shapeNative); - btAlignedObjectArray constraintNative; + b3AlignedObjectArray constraintNative; constraint->copyToHost(constraintNative); for(int iter=0; iter #include @@ -86,7 +86,7 @@ char* loadProgSource(const char* cFilename, const char* cPreamble, size_t* szFin int main(int argc, char **argv) { printf("Use --deviceId= or --platformId= to override OpenCL device\n"); - CommandLineArgs args(argc,argv); + b3CommandLineArgs args(argc,argv); const int nx = 1024; const int ny = 1024; diff --git a/opencl/lds_bank_conflict/premake4.lua b/opencl/lds_bank_conflict/premake4.lua index ca19dca73..701476df4 100644 --- a/opencl/lds_bank_conflict/premake4.lua +++ b/opencl/lds_bank_conflict/premake4.lua @@ -27,11 +27,11 @@ function createProject (vendor) "main.cpp", "../basic_initialize/b3OpenCLUtils.cpp", "../basic_initialize/b3OpenCLUtils.h", - "../../src/BulletCommon/btAlignedAllocator.cpp", - "../../src/BulletCommon/btAlignedAllocator.h", - "../../src/BulletCommon/btAlignedObjectArray.h", - "../../src/BulletCommon/btQuickprof.cpp", - "../../src/BulletCommon/btQuickprof.h", + "../../src/BulletCommon/b3AlignedAllocator.cpp", + "../../src/BulletCommon/b3AlignedAllocator.h", + "../../src/BulletCommon/b3AlignedObjectArray.h", + "../../src/BulletCommon/b3Quickprof.cpp", + "../../src/BulletCommon/b3Quickprof.h", } end diff --git a/opencl/parallel_primitives/benchmark/premake4.lua b/opencl/parallel_primitives/benchmark/premake4.lua index 7740f2feb..c8b13b81b 100644 --- a/opencl/parallel_primitives/benchmark/premake4.lua +++ b/opencl/parallel_primitives/benchmark/premake4.lua @@ -24,11 +24,11 @@ function createProject(vendor) "../host/btFillCL.cpp", "../host/btPrefixScanCL.cpp", "../host/btRadixSort32CL.cpp", - "../../../src/BulletCommon/btAlignedAllocator.cpp", - "../../../src/BulletCommon/btAlignedAllocator.h", - "../../../src/BulletCommon/btAlignedObjectArray.h", - "../../../src/BulletCommon/btQuickprof.cpp", - "../../../src/BulletCommon/btQuickprof.h", + "../../../src/BulletCommon/b3AlignedAllocator.cpp", + "../../../src/BulletCommon/b3AlignedAllocator.h", + "../../../src/BulletCommon/b3AlignedObjectArray.h", + "../../../src/BulletCommon/b3Quickprof.cpp", + "../../../src/BulletCommon/b3Quickprof.h", } end diff --git a/opencl/parallel_primitives/benchmark/test_large_problem_sorting.cpp b/opencl/parallel_primitives/benchmark/test_large_problem_sorting.cpp index 049687b41..83bba01ed 100644 --- a/opencl/parallel_primitives/benchmark/test_large_problem_sorting.cpp +++ b/opencl/parallel_primitives/benchmark/test_large_problem_sorting.cpp @@ -66,7 +66,7 @@ #include "../host/btRadixSort32CL.h" #include "../../basic_initialize/b3OpenCLUtils.h" -#include "BulletCommon/btQuickprof.h" +#include "BulletCommon/b3Quickprof.h" cl_context g_cxMainContext; cl_device_id g_device; @@ -112,7 +112,7 @@ void TimedSort( printf("Keys only, %d iterations, %d elements\n", iterations, num_elements); int max_elements = num_elements; - btAlignedObjectArray hostData; + b3AlignedObjectArray hostData; hostData.resize(num_elements); for (int i=0;i hostDataSorted; + b3AlignedObjectArray hostDataSorted; gpuData.copyToHost(hostDataSorted); clFinish(g_cqCommandQueue); @@ -218,7 +218,7 @@ void TimedSort( printf("Key-values, %d iterations, %d elements\n", iterations, num_elements); int max_elements = num_elements; - btAlignedObjectArray hostData; + b3AlignedObjectArray hostData; hostData.resize(num_elements); for (int i=0;i hostDataSorted; + b3AlignedObjectArray hostDataSorted; gpuData.copyToHost(hostDataSorted); #if 0 for (int i=0;i #include -class CommandLineArgs +class b3CommandLineArgs { protected: @@ -558,7 +558,7 @@ protected: public: // Constructor - CommandLineArgs(int argc, char **argv) + b3CommandLineArgs(int argc, char **argv) { using namespace std; @@ -603,7 +603,7 @@ public: }; template -void CommandLineArgs::GetCmdLineArgument(const char *arg_name, T &val) +void b3CommandLineArgs::GetCmdLineArgument(const char *arg_name, T &val) { using namespace std; map::iterator itr; @@ -614,7 +614,7 @@ void CommandLineArgs::GetCmdLineArgument(const char *arg_name, T &val) } template <> -void CommandLineArgs::GetCmdLineArgument(const char* arg_name, char* &val) +void b3CommandLineArgs::GetCmdLineArgument(const char* arg_name, char* &val) { using namespace std; map::iterator itr; @@ -644,7 +644,7 @@ int main( int argc, char** argv) gDebugSkipLoadingBinary = true; cl_int ciErrNum; - CommandLineArgs args(argc,argv); + b3CommandLineArgs args(argc,argv); args.GetCmdLineArgument("deviceId", gPreferredDeviceId); args.GetCmdLineArgument("platformId", gPreferredPlatformId); diff --git a/opencl/parallel_primitives/host/btBoundSearchCL.cpp b/opencl/parallel_primitives/host/btBoundSearchCL.cpp index 565dc7374..543f5e3f5 100644 --- a/opencl/parallel_primitives/host/btBoundSearchCL.cpp +++ b/opencl/parallel_primitives/host/btBoundSearchCL.cpp @@ -138,8 +138,8 @@ void btBoundSearchCL::execute(btOpenCLArray& src, int nSrc, btOpenCL } -void btBoundSearchCL::executeHost( btAlignedObjectArray& src, int nSrc, - btAlignedObjectArray& dst, int nDst, Option option ) +void btBoundSearchCL::executeHost( b3AlignedObjectArray& src, int nSrc, + b3AlignedObjectArray& dst, int nDst, Option option ) { @@ -188,9 +188,9 @@ void btBoundSearchCL::executeHost( btAlignedObjectArray& src, int nS } else if( option == COUNT ) { - btAlignedObjectArray lower; + b3AlignedObjectArray lower; lower.resize(nDst ); - btAlignedObjectArray upper; + b3AlignedObjectArray upper; upper.resize(nDst ); for(int i=0; i& src, int nSrc, btOpenCLArray& dst, int nDst, Option option = BOUND_LOWER ); - void executeHost( btAlignedObjectArray& src, int nSrc, btAlignedObjectArray& dst, int nDst, Option option = BOUND_LOWER); + void executeHost( b3AlignedObjectArray& src, int nSrc, b3AlignedObjectArray& dst, int nDst, Option option = BOUND_LOWER); }; diff --git a/opencl/parallel_primitives/host/btFillCL.cpp b/opencl/parallel_primitives/host/btFillCL.cpp index 9f11b7ef5..6b4f45ce3 100644 --- a/opencl/parallel_primitives/host/btFillCL.cpp +++ b/opencl/parallel_primitives/host/btFillCL.cpp @@ -90,7 +90,7 @@ void btFillCL::execute(btOpenCLArray& src, const unsigned int valu } } -void btFillCL::executeHost(btAlignedObjectArray &src, const btInt2 &value, int n, int offset) +void btFillCL::executeHost(b3AlignedObjectArray &src, const btInt2 &value, int n, int offset) { for (int i=0;i &src, const btInt2 &valu } } -void btFillCL::executeHost(btAlignedObjectArray &src, const int value, int n, int offset) +void btFillCL::executeHost(b3AlignedObjectArray &src, const int value, int n, int offset) { for (int i=0;i& src, const btInt2& value, int n, int offset = 0); - void executeHost(btAlignedObjectArray &src, const btInt2 &value, int n, int offset); + void executeHost(b3AlignedObjectArray &src, const btInt2 &value, int n, int offset); - void executeHost(btAlignedObjectArray &src, const int value, int n, int offset); + void executeHost(b3AlignedObjectArray &src, const int value, int n, int offset); // void execute(btOpenCLArray& src, const btInt4& value, int n, int offset = 0); diff --git a/opencl/parallel_primitives/host/btInt4.h b/opencl/parallel_primitives/host/btInt4.h index 5b29b7284..ce9b05b7a 100644 --- a/opencl/parallel_primitives/host/btInt4.h +++ b/opencl/parallel_primitives/host/btInt4.h @@ -1,7 +1,7 @@ #ifndef BT_INT4_H #define BT_INT4_H -#include "BulletCommon/btScalar.h" +#include "BulletCommon/b3Scalar.h" ATTRIBUTE_ALIGNED16(struct) btUnsignedInt4 { diff --git a/opencl/parallel_primitives/host/btLauncherCL.h b/opencl/parallel_primitives/host/btLauncherCL.h index 69a3b79e2..885e4fdfc 100644 --- a/opencl/parallel_primitives/host/btLauncherCL.h +++ b/opencl/parallel_primitives/host/btLauncherCL.h @@ -3,7 +3,7 @@ #define BT_LAUNCHER_CL_H #include "btBufferInfoCL.h" -#include "BulletCommon/btMinMax.h" +#include "BulletCommon/b3MinMax.h" #include "btOpenCLArray.h" #include @@ -31,14 +31,14 @@ class btLauncherCL cl_kernel m_kernel; int m_idx; - btAlignedObjectArray m_kernelArguments; + b3AlignedObjectArray m_kernelArguments; int m_serializationSizeInBytes; public: - btAlignedObjectArray* > m_arrays; + b3AlignedObjectArray* > m_arrays; btLauncherCL(cl_command_queue queue, cl_kernel kernel) :m_commandQueue(queue), diff --git a/opencl/parallel_primitives/host/btOpenCLArray.h b/opencl/parallel_primitives/host/btOpenCLArray.h index 032cd36b7..91bfd4d8c 100644 --- a/opencl/parallel_primitives/host/btOpenCLArray.h +++ b/opencl/parallel_primitives/host/btOpenCLArray.h @@ -1,7 +1,7 @@ #ifndef BT_OPENCL_ARRAY_H #define BT_OPENCL_ARRAY_H -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedObjectArray.h" #include "../../basic_initialize/b3OpenCLInclude.h" template @@ -61,7 +61,7 @@ public: } // we could enable this assignment, but need to make sure to avoid accidental deep copies -// btOpenCLArray& operator=(const btAlignedObjectArray& src) +// btOpenCLArray& operator=(const b3AlignedObjectArray& src) // { // copyFromArray(src); // return *this; @@ -212,7 +212,7 @@ public: btAssert( status == CL_SUCCESS ); } - void copyFromHost(const btAlignedObjectArray& srcArray, bool waitForCompletion=true) + void copyFromHost(const b3AlignedObjectArray& srcArray, bool waitForCompletion=true) { int newSize = srcArray.size(); @@ -238,7 +238,7 @@ public: } - void copyToHost(btAlignedObjectArray& destArray, bool waitForCompletion=true) const + void copyToHost(b3AlignedObjectArray& destArray, bool waitForCompletion=true) const { destArray.resize(this->size()); if (size()) diff --git a/opencl/parallel_primitives/host/btPrefixScanCL.cpp b/opencl/parallel_primitives/host/btPrefixScanCL.cpp index abbdf0f0d..a7ee23fcf 100644 --- a/opencl/parallel_primitives/host/btPrefixScanCL.cpp +++ b/opencl/parallel_primitives/host/btPrefixScanCL.cpp @@ -98,7 +98,7 @@ void btPrefixScanCL::execute(btOpenCLArray& src, btOpenCLArray& src, btAlignedObjectArray& dst, int n, unsigned int* sum) +void btPrefixScanCL::executeHost(b3AlignedObjectArray& src, b3AlignedObjectArray& dst, int n, unsigned int* sum) { unsigned int s = 0; //if( data->m_option == EXCLUSIVE ) diff --git a/opencl/parallel_primitives/host/btPrefixScanCL.h b/opencl/parallel_primitives/host/btPrefixScanCL.h index b830ddb23..05205a9fb 100644 --- a/opencl/parallel_primitives/host/btPrefixScanCL.h +++ b/opencl/parallel_primitives/host/btPrefixScanCL.h @@ -4,7 +4,7 @@ #include "btOpenCLArray.h" #include "btBufferInfoCL.h" -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3AlignedObjectArray.h" class btPrefixScanCL { @@ -31,7 +31,7 @@ class btPrefixScanCL virtual ~btPrefixScanCL(); void execute(btOpenCLArray& src, btOpenCLArray& dst, int n, unsigned int* sum = 0); - void executeHost(btAlignedObjectArray& src, btAlignedObjectArray& dst, int n, unsigned int* sum); + void executeHost(b3AlignedObjectArray& src, b3AlignedObjectArray& dst, int n, unsigned int* sum); }; #endif //BT_PREFIX_SCAN_CL_H diff --git a/opencl/parallel_primitives/host/btRadixSort32CL.cpp b/opencl/parallel_primitives/host/btRadixSort32CL.cpp index 321b5a36f..be4616d56 100644 --- a/opencl/parallel_primitives/host/btRadixSort32CL.cpp +++ b/opencl/parallel_primitives/host/btRadixSort32CL.cpp @@ -93,7 +93,7 @@ btRadixSort32CL::~btRadixSort32CL() clReleaseKernel(m_prefixScanKernel); } -void btRadixSort32CL::executeHost(btAlignedObjectArray& inout, int sortBits /* = 32 */) +void btRadixSort32CL::executeHost(b3AlignedObjectArray& inout, int sortBits /* = 32 */) { int n = inout.size(); const int BITS_PER_PASS = 8; @@ -104,7 +104,7 @@ void btRadixSort32CL::executeHost(btAlignedObjectArray& inout, int s int counter[NUM_TABLES]; btSortData* src = &inout[0]; - btAlignedObjectArray workbuffer; + b3AlignedObjectArray workbuffer; workbuffer.resize(inout.size()); btSortData* dst = &workbuffer[0]; @@ -166,7 +166,7 @@ void btRadixSort32CL::executeHost(btAlignedObjectArray& inout, int s void btRadixSort32CL::executeHost(btOpenCLArray& keyValuesInOut, int sortBits /* = 32 */) { - btAlignedObjectArray inout; + b3AlignedObjectArray inout; keyValuesInOut.copyToHost(inout); executeHost(inout,sortBits); @@ -194,7 +194,7 @@ void btRadixSort32CL::execute(btOpenCLArray& keyValuesInOut, int sor int dataAlignment = DATA_ALIGNMENT; #ifdef DEBUG_RADIXSORT2 - btAlignedObjectArray test2; + b3AlignedObjectArray test2; keyValuesInOut.copyToHost(test2); printf("numElem = %d\n",test2.size()); for (int i=0;i& keyValuesInOut, int sor #ifdef DEBUG_RADIXSORT - btAlignedObjectArray testHist; + b3AlignedObjectArray testHist; srcHisto->copyToHost(testHist); printf("ib = %d, testHist size = %d, non zero elements:\n",ib, testHist.size()); for (int i=0;i& keyValuesInOut, int sor int startBit = ib; destHisto->copyToHost(testHist); - btAlignedObjectArray srcHost; - btAlignedObjectArray dstHost; + b3AlignedObjectArray srcHost; + b3AlignedObjectArray dstHost; dstHost.resize(src->size()); src->copyToHost(srcHost); @@ -405,11 +405,11 @@ void btRadixSort32CL::execute(btOpenCLArray& keyValuesInOut, int sor int counter2[NUM_TABLES]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int tables[NUM_TABLES]; - btAlignedObjectArray dstHostOK; + b3AlignedObjectArray dstHostOK; dstHostOK.resize(src->size()); destHisto->copyToHost(testHist); - btAlignedObjectArray srcHost; + b3AlignedObjectArray srcHost; src->copyToHost(srcHost); int blockSize = 256; @@ -435,7 +435,7 @@ void btRadixSort32CL::execute(btOpenCLArray& keyValuesInOut, int sor } - btAlignedObjectArray dstHost; + b3AlignedObjectArray dstHost; dstHost.resize(src->size()); diff --git a/opencl/parallel_primitives/host/btRadixSort32CL.h b/opencl/parallel_primitives/host/btRadixSort32CL.h index 4570303c6..c1516aa8d 100644 --- a/opencl/parallel_primitives/host/btRadixSort32CL.h +++ b/opencl/parallel_primitives/host/btRadixSort32CL.h @@ -78,7 +78,7 @@ public: void execute(btOpenCLArray& keyValuesInOut, int sortBits = 32 ); void executeHost(btOpenCLArray& keyValuesInOut, int sortBits = 32); - void executeHost(btAlignedObjectArray& keyValuesInOut, int sortBits = 32); + void executeHost(b3AlignedObjectArray& keyValuesInOut, int sortBits = 32); }; #endif //BT_RADIXSORT32_H diff --git a/opencl/parallel_primitives/test/main.cpp b/opencl/parallel_primitives/test/main.cpp index 7f3ccbc63..ce94e3283 100644 --- a/opencl/parallel_primitives/test/main.cpp +++ b/opencl/parallel_primitives/test/main.cpp @@ -19,8 +19,8 @@ subject to the following restrictions: #include "../host/btBoundSearchCL.h" #include "../host/btRadixSort32CL.h" #include "../host/btPrefixScanCL.h" -#include "BulletCommon/CommandLineArgs.h" -#include "BulletCommon/btMinMax.h" +#include "BulletCommon/b3CommandLineArgs.h" +#include "BulletCommon/b3MinMax.h" int g_nPassed = 0; int g_nFailed = 0; @@ -89,11 +89,11 @@ inline void fillIntTest() int offset=0; fillCL->execute(intBuffer,value,size,offset); - btAlignedObjectArray hostBuf2; + b3AlignedObjectArray hostBuf2; hostBuf2.resize(size); fillCL->executeHost(hostBuf2,value,size,offset); - btAlignedObjectArray hostBuf; + b3AlignedObjectArray hostBuf; intBuffer.copyToHost(hostBuf); for(int i=0; i upperCL(g_context,g_queue,maxSize); btOpenCLArray lowerCL(g_context,g_queue,maxSize); - btAlignedObjectArray srcHost; - btAlignedObjectArray upperHost; - btAlignedObjectArray lowerHost; - btAlignedObjectArray upperHostCompare; - btAlignedObjectArray lowerHostCompare; + b3AlignedObjectArray srcHost; + b3AlignedObjectArray upperHost; + b3AlignedObjectArray lowerHost; + b3AlignedObjectArray upperHostCompare; + b3AlignedObjectArray lowerHostCompare; btBoundSearchCL* search = new btBoundSearchCL(g_context,g_device,g_queue, maxSize); @@ -260,8 +260,8 @@ void prefixScanTest() int maxSize = 1024*256; - btAlignedObjectArray buf0Host; - btAlignedObjectArray buf1Host; + b3AlignedObjectArray buf0Host; + b3AlignedObjectArray buf1Host; btOpenCLArray buf2CL(g_context,g_queue,maxSize); btOpenCLArray buf3CL(g_context,g_queue,maxSize); @@ -305,9 +305,9 @@ bool radixSortTest() int maxSize = 1024*256; - btAlignedObjectArray buf0Host; + b3AlignedObjectArray buf0Host; buf0Host.resize(maxSize); - btAlignedObjectArray buf1Host; + b3AlignedObjectArray buf1Host; buf1Host.resize(maxSize ); btOpenCLArray buf2CL(g_context,g_queue,maxSize); @@ -356,7 +356,7 @@ int main(int argc, char** argv) int preferredDeviceIndex = -1; int preferredPlatformIndex = -1; - CommandLineArgs args(argc, argv); + b3CommandLineArgs args(argc, argv); args.GetCmdLineArgument("deviceId", preferredDeviceIndex); args.GetCmdLineArgument("platformId", preferredPlatformIndex); diff --git a/opencl/parallel_primitives/test/premake4.lua b/opencl/parallel_primitives/test/premake4.lua index 74b88834e..f734afb0f 100644 --- a/opencl/parallel_primitives/test/premake4.lua +++ b/opencl/parallel_primitives/test/premake4.lua @@ -27,9 +27,9 @@ function createProject(vendor) "../host/btPrefixScanCL.h", "../host/btRadixSort32CL.cpp", "../host/btRadixSort32CL.h", - "../../../src/BulletCommon/btAlignedAllocator.cpp", - "../../../src/BulletCommon/btAlignedAllocator.h", - "../../../src/BulletCommon/btAlignedObjectArray.h", + "../../../src/BulletCommon/b3AlignedAllocator.cpp", + "../../../src/BulletCommon/b3AlignedAllocator.h", + "../../../src/BulletCommon/b3AlignedObjectArray.h", } end diff --git a/opencl/reduce/main.cpp b/opencl/reduce/main.cpp index a92ba0c47..185c01c4f 100644 --- a/opencl/reduce/main.cpp +++ b/opencl/reduce/main.cpp @@ -60,8 +60,8 @@ int main(int argc, char* argv[]) int numElements = 1024*1024; btOpenCLArray a(ctx,queue); btOpenCLArray b(ctx,queue); - btAlignedObjectArray hostA; - btAlignedObjectArray hostB; + b3AlignedObjectArray hostA; + b3AlignedObjectArray hostB; for (int i=0;i -class btAlignedAllocator { +class b3AlignedAllocator { - typedef btAlignedAllocator< T , Alignment > self_type; + typedef b3AlignedAllocator< T , Alignment > self_type; public: //just going down a list: - btAlignedAllocator() {} + b3AlignedAllocator() {} /* - btAlignedAllocator( const self_type & ) {} + b3AlignedAllocator( const self_type & ) {} */ template < typename Other > - btAlignedAllocator( const btAlignedAllocator< Other , Alignment > & ) {} + b3AlignedAllocator( const b3AlignedAllocator< Other , Alignment > & ) {} typedef const T* const_pointer; typedef const T& const_reference; @@ -93,10 +93,10 @@ public: template < typename O > struct rebind { - typedef btAlignedAllocator< O , Alignment > other; + typedef b3AlignedAllocator< O , Alignment > other; }; template < typename O > - self_type & operator=( const btAlignedAllocator< O , Alignment > & ) { return *this; } + self_type & operator=( const b3AlignedAllocator< O , Alignment > & ) { return *this; } friend bool operator==( const self_type & , const self_type & ) { return true; } }; diff --git a/src/BulletCommon/btAlignedObjectArray.h b/src/BulletCommon/b3AlignedObjectArray.h similarity index 94% rename from src/BulletCommon/btAlignedObjectArray.h rename to src/BulletCommon/b3AlignedObjectArray.h index f111dfceb..eebe9df00 100644 --- a/src/BulletCommon/btAlignedObjectArray.h +++ b/src/BulletCommon/b3AlignedObjectArray.h @@ -17,11 +17,11 @@ subject to the following restrictions: #ifndef BT_OBJECT_ARRAY__ #define BT_OBJECT_ARRAY__ -#include "btScalar.h" // has definitions like SIMD_FORCE_INLINE -#include "btAlignedAllocator.h" +#include "b3Scalar.h" // has definitions like SIMD_FORCE_INLINE +#include "b3AlignedAllocator.h" ///If the platform doesn't support placement new, you can disable BT_USE_PLACEMENT_NEW -///then the btAlignedObjectArray doesn't support objects with virtual methods, and non-trivial constructors/destructors +///then the b3AlignedObjectArray doesn't support objects with virtual methods, and non-trivial constructors/destructors ///You can enable BT_USE_MEMCPY, then swapping elements in the array will use memcpy instead of operator= ///see discussion here: http://continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=1231 and ///http://www.continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=1240 @@ -40,13 +40,13 @@ subject to the following restrictions: #endif //BT_USE_PLACEMENT_NEW -///The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods +///The b3AlignedObjectArray template class uses a subset of the stl::vector interface for its methods ///It is developed to replace stl::vector to avoid portability issues, including STL alignment issues to add SIMD/SSE data template //template -class btAlignedObjectArray +class b3AlignedObjectArray { - btAlignedAllocator m_allocator; + b3AlignedAllocator m_allocator; int m_size; int m_capacity; @@ -56,14 +56,14 @@ class btAlignedObjectArray #ifdef BT_ALLOW_ARRAY_COPY_OPERATOR public: - SIMD_FORCE_INLINE btAlignedObjectArray& operator=(const btAlignedObjectArray &other) + SIMD_FORCE_INLINE b3AlignedObjectArray& operator=(const b3AlignedObjectArray &other) { copyFromArray(other); return *this; } #else//BT_ALLOW_ARRAY_COPY_OPERATOR private: - SIMD_FORCE_INLINE btAlignedObjectArray& operator=(const btAlignedObjectArray &other); + SIMD_FORCE_INLINE b3AlignedObjectArray& operator=(const b3AlignedObjectArray &other); #endif//BT_ALLOW_ARRAY_COPY_OPERATOR protected: @@ -123,18 +123,18 @@ protected: public: - btAlignedObjectArray() + b3AlignedObjectArray() { init(); } - ~btAlignedObjectArray() + ~b3AlignedObjectArray() { clear(); } - ///Generally it is best to avoid using the copy constructor of an btAlignedObjectArray, and use a (const) reference to the array instead. - btAlignedObjectArray(const btAlignedObjectArray& otherArray) + ///Generally it is best to avoid using the copy constructor of an b3AlignedObjectArray, and use a (const) reference to the array instead. + b3AlignedObjectArray(const b3AlignedObjectArray& otherArray) { init(); @@ -500,7 +500,7 @@ protected: m_capacity = capacity; } - void copyFromArray(const btAlignedObjectArray& otherArray) + void copyFromArray(const b3AlignedObjectArray& otherArray) { int otherSize = otherArray.size(); resize (otherSize); diff --git a/src/BulletCommon/CommandLineArgs.h b/src/BulletCommon/b3CommandLineArgs.h similarity index 88% rename from src/BulletCommon/CommandLineArgs.h rename to src/BulletCommon/b3CommandLineArgs.h index b2a43016f..3c0329468 100644 --- a/src/BulletCommon/CommandLineArgs.h +++ b/src/BulletCommon/b3CommandLineArgs.h @@ -9,7 +9,7 @@ #include #include #include -class CommandLineArgs +class b3CommandLineArgs { protected: @@ -18,7 +18,7 @@ protected: public: // Constructor - CommandLineArgs(int argc, char **argv) + b3CommandLineArgs(int argc, char **argv) { using namespace std; @@ -63,7 +63,7 @@ public: }; template -void CommandLineArgs::GetCmdLineArgument(const char *arg_name, T &val) +void b3CommandLineArgs::GetCmdLineArgument(const char *arg_name, T &val) { using namespace std; map::iterator itr; @@ -74,7 +74,7 @@ void CommandLineArgs::GetCmdLineArgument(const char *arg_name, T &val) } template <> -void CommandLineArgs::GetCmdLineArgument(const char* arg_name, char* &val) +void b3CommandLineArgs::GetCmdLineArgument(const char* arg_name, char* &val) { using namespace std; map::iterator itr; diff --git a/src/BulletCommon/btHashMap.h b/src/BulletCommon/b3HashMap.h similarity index 95% rename from src/BulletCommon/btHashMap.h rename to src/BulletCommon/b3HashMap.h index ce07db3ac..cb9375114 100644 --- a/src/BulletCommon/btHashMap.h +++ b/src/BulletCommon/b3HashMap.h @@ -17,9 +17,9 @@ subject to the following restrictions: #ifndef BT_HASH_MAP_H #define BT_HASH_MAP_H -#include "btAlignedObjectArray.h" +#include "b3AlignedObjectArray.h" -///very basic hashable string implementation, compatible with btHashMap +///very basic hashable string implementation, compatible with b3HashMap struct btHashString { const char* m_string; @@ -214,18 +214,18 @@ public: }; -///The btHashMap template class implements a generic and lightweight hashmap. -///A basic sample of how to use btHashMap is located in Demos\BasicDemo\main.cpp +///The b3HashMap template class implements a generic and lightweight hashmap. +///A basic sample of how to use b3HashMap is located in Demos\BasicDemo\main.cpp template -class btHashMap +class b3HashMap { protected: - btAlignedObjectArray m_hashTable; - btAlignedObjectArray m_next; + b3AlignedObjectArray m_hashTable; + b3AlignedObjectArray m_next; - btAlignedObjectArray m_valueArray; - btAlignedObjectArray m_keyArray; + b3AlignedObjectArray m_valueArray; + b3AlignedObjectArray m_keyArray; void growTables(const Key& /*key*/) { diff --git a/src/BulletCommon/btMatrix3x3.h b/src/BulletCommon/b3Matrix3x3.h similarity index 79% rename from src/BulletCommon/btMatrix3x3.h rename to src/BulletCommon/b3Matrix3x3.h index 4bcb2e137..0149aa8e4 100644 --- a/src/BulletCommon/btMatrix3x3.h +++ b/src/BulletCommon/b3Matrix3x3.h @@ -16,8 +16,8 @@ subject to the following restrictions: #ifndef BT_MATRIX3x3_H #define BT_MATRIX3x3_H -#include "btVector3.h" -#include "btQuaternion.h" +#include "b3Vector3.h" +#include "b3Quaternion.h" #include #ifdef BT_USE_SSE @@ -38,32 +38,32 @@ const btSimdFloat4 ATTRIBUTE_ALIGNED16(v0010) = {0.0f, 0.0f, 1.0f, 0.0f}; #endif //BT_USE_DOUBLE_PRECISION -/**@brief The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with btQuaternion, btTransform and btVector3. +/**@brief The b3Matrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with b3Quaternion, b3Transform and b3Vector3. * Make sure to only include a pure orthogonal matrix without scaling. */ -ATTRIBUTE_ALIGNED16(class) btMatrix3x3 { +ATTRIBUTE_ALIGNED16(class) b3Matrix3x3 { ///Data storage for the matrix, each vector is a row of the matrix - btVector3 m_el[3]; + b3Vector3 m_el[3]; public: /** @brief No initializaion constructor */ - btMatrix3x3 () {} + b3Matrix3x3 () {} - // explicit btMatrix3x3(const btScalar *m) { setFromOpenGLSubMatrix(m); } + // explicit b3Matrix3x3(const b3Scalar *m) { setFromOpenGLSubMatrix(m); } /**@brief Constructor from Quaternion */ - explicit btMatrix3x3(const btQuaternion& q) { setRotation(q); } + explicit b3Matrix3x3(const b3Quaternion& q) { setRotation(q); } /* - template - Matrix3x3(const btScalar& yaw, const btScalar& pitch, const btScalar& roll) + template + Matrix3x3(const b3Scalar& yaw, const b3Scalar& pitch, const b3Scalar& roll) { setEulerYPR(yaw, pitch, roll); } */ /** @brief Constructor with row major formatting */ - btMatrix3x3(const btScalar& xx, const btScalar& xy, const btScalar& xz, - const btScalar& yx, const btScalar& yy, const btScalar& yz, - const btScalar& zx, const btScalar& zy, const btScalar& zz) + b3Matrix3x3(const b3Scalar& xx, const b3Scalar& xy, const b3Scalar& xz, + const b3Scalar& yx, const b3Scalar& yy, const b3Scalar& yz, + const b3Scalar& zx, const b3Scalar& zy, const b3Scalar& zz) { setValue(xx, xy, xz, yx, yy, yz, @@ -71,14 +71,14 @@ public: } #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE))|| defined (BT_USE_NEON) - SIMD_FORCE_INLINE btMatrix3x3 (const btSimdFloat4 v0, const btSimdFloat4 v1, const btSimdFloat4 v2 ) + SIMD_FORCE_INLINE b3Matrix3x3 (const btSimdFloat4 v0, const btSimdFloat4 v1, const btSimdFloat4 v2 ) { m_el[0].mVec128 = v0; m_el[1].mVec128 = v1; m_el[2].mVec128 = v2; } - SIMD_FORCE_INLINE btMatrix3x3 (const btVector3& v0, const btVector3& v1, const btVector3& v2 ) + SIMD_FORCE_INLINE b3Matrix3x3 (const b3Vector3& v0, const b3Vector3& v1, const b3Vector3& v2 ) { m_el[0] = v0; m_el[1] = v1; @@ -86,7 +86,7 @@ public: } // Copy constructor - SIMD_FORCE_INLINE btMatrix3x3(const btMatrix3x3& rhs) + SIMD_FORCE_INLINE b3Matrix3x3(const b3Matrix3x3& rhs) { m_el[0].mVec128 = rhs.m_el[0].mVec128; m_el[1].mVec128 = rhs.m_el[1].mVec128; @@ -94,7 +94,7 @@ public: } // Assignment Operator - SIMD_FORCE_INLINE btMatrix3x3& operator=(const btMatrix3x3& m) + SIMD_FORCE_INLINE b3Matrix3x3& operator=(const b3Matrix3x3& m) { m_el[0].mVec128 = m.m_el[0].mVec128; m_el[1].mVec128 = m.m_el[1].mVec128; @@ -106,7 +106,7 @@ public: #else /** @brief Copy constructor */ - SIMD_FORCE_INLINE btMatrix3x3 (const btMatrix3x3& other) + SIMD_FORCE_INLINE b3Matrix3x3 (const b3Matrix3x3& other) { m_el[0] = other.m_el[0]; m_el[1] = other.m_el[1]; @@ -114,7 +114,7 @@ public: } /** @brief Assignment Operator */ - SIMD_FORCE_INLINE btMatrix3x3& operator=(const btMatrix3x3& other) + SIMD_FORCE_INLINE b3Matrix3x3& operator=(const b3Matrix3x3& other) { m_el[0] = other.m_el[0]; m_el[1] = other.m_el[1]; @@ -126,15 +126,15 @@ public: /** @brief Get a column of the matrix as a vector * @param i Column number 0 indexed */ - SIMD_FORCE_INLINE btVector3 getColumn(int i) const + SIMD_FORCE_INLINE b3Vector3 getColumn(int i) const { - return btVector3(m_el[0][i],m_el[1][i],m_el[2][i]); + return b3Vector3(m_el[0][i],m_el[1][i],m_el[2][i]); } /** @brief Get a row of the matrix as a vector * @param i Row number 0 indexed */ - SIMD_FORCE_INLINE const btVector3& getRow(int i) const + SIMD_FORCE_INLINE const b3Vector3& getRow(int i) const { btFullAssert(0 <= i && i < 3); return m_el[i]; @@ -142,7 +142,7 @@ public: /** @brief Get a mutable reference to a row of the matrix as a vector * @param i Row number 0 indexed */ - SIMD_FORCE_INLINE btVector3& operator[](int i) + SIMD_FORCE_INLINE b3Vector3& operator[](int i) { btFullAssert(0 <= i && i < 3); return m_el[i]; @@ -150,7 +150,7 @@ public: /** @brief Get a const reference to a row of the matrix as a vector * @param i Row number 0 indexed */ - SIMD_FORCE_INLINE const btVector3& operator[](int i) const + SIMD_FORCE_INLINE const b3Vector3& operator[](int i) const { btFullAssert(0 <= i && i < 3); return m_el[i]; @@ -159,21 +159,21 @@ public: /** @brief Multiply by the target matrix on the right * @param m Rotation matrix to be applied * Equivilant to this = this * m */ - btMatrix3x3& operator*=(const btMatrix3x3& m); + b3Matrix3x3& operator*=(const b3Matrix3x3& m); /** @brief Adds by the target matrix on the right * @param m matrix to be applied * Equivilant to this = this + m */ - btMatrix3x3& operator+=(const btMatrix3x3& m); + b3Matrix3x3& operator+=(const b3Matrix3x3& m); /** @brief Substractss by the target matrix on the right * @param m matrix to be applied * Equivilant to this = this - m */ - btMatrix3x3& operator-=(const btMatrix3x3& m); + b3Matrix3x3& operator-=(const b3Matrix3x3& m); /** @brief Set from the rotational part of a 4x4 OpenGL matrix * @param m A pointer to the beginning of the array of scalars*/ - void setFromOpenGLSubMatrix(const btScalar *m) + void setFromOpenGLSubMatrix(const b3Scalar *m) { m_el[0].setValue(m[0],m[4],m[8]); m_el[1].setValue(m[1],m[5],m[9]); @@ -190,9 +190,9 @@ public: * @param zx Bottom Left * @param zy Bottom Middle * @param zz Bottom Right*/ - void setValue(const btScalar& xx, const btScalar& xy, const btScalar& xz, - const btScalar& yx, const btScalar& yy, const btScalar& yz, - const btScalar& zx, const btScalar& zy, const btScalar& zz) + void setValue(const b3Scalar& xx, const b3Scalar& xy, const b3Scalar& xz, + const b3Scalar& yx, const b3Scalar& yy, const b3Scalar& yz, + const b3Scalar& zx, const b3Scalar& zy, const b3Scalar& zz) { m_el[0].setValue(xx,xy,xz); m_el[1].setValue(yx,yy,yz); @@ -201,11 +201,11 @@ public: /** @brief Set the matrix from a quaternion * @param q The Quaternion to match */ - void setRotation(const btQuaternion& q) + void setRotation(const b3Quaternion& q) { - btScalar d = q.length2(); - btFullAssert(d != btScalar(0.0)); - btScalar s = btScalar(2.0) / d; + b3Scalar d = q.length2(); + btFullAssert(d != b3Scalar(0.0)); + b3Scalar s = b3Scalar(2.0) / d; #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vs, Q = q.get128(); @@ -259,14 +259,14 @@ public: m_el[1] = V2; m_el[2] = V3; #else - btScalar xs = q.getX() * s, ys = q.getY() * s, zs = q.getZ() * s; - btScalar wx = q.getW() * xs, wy = q.getW() * ys, wz = q.getW() * zs; - btScalar xx = q.getX() * xs, xy = q.getX() * ys, xz = q.getX() * zs; - btScalar yy = q.getY() * ys, yz = q.getY() * zs, zz = q.getZ() * zs; + b3Scalar xs = q.getX() * s, ys = q.getY() * s, zs = q.getZ() * s; + b3Scalar wx = q.getW() * xs, wy = q.getW() * ys, wz = q.getW() * zs; + b3Scalar xx = q.getX() * xs, xy = q.getX() * ys, xz = q.getX() * zs; + b3Scalar yy = q.getY() * ys, yz = q.getY() * zs, zz = q.getZ() * zs; setValue( - btScalar(1.0) - (yy + zz), xy - wz, xz + wy, - xy + wz, btScalar(1.0) - (xx + zz), yz - wx, - xz - wy, yz + wx, btScalar(1.0) - (xx + yy)); + b3Scalar(1.0) - (yy + zz), xy - wz, xz + wy, + xy + wz, b3Scalar(1.0) - (xx + zz), yz - wx, + xz - wy, yz + wx, b3Scalar(1.0) - (xx + yy)); #endif } @@ -276,7 +276,7 @@ public: * @param pitch Pitch about X axis * @param roll Roll about Z axis */ - void setEulerYPR(const btScalar& yaw, const btScalar& pitch, const btScalar& roll) + void setEulerYPR(const b3Scalar& yaw, const b3Scalar& pitch, const b3Scalar& roll) { setEulerZYX(roll, pitch, yaw); } @@ -290,18 +290,18 @@ public: * angles are applied in ZYX order. I.e a vector is first rotated * about X then Y and then Z **/ - void setEulerZYX(btScalar eulerX,btScalar eulerY,btScalar eulerZ) { + void setEulerZYX(b3Scalar eulerX,b3Scalar eulerY,b3Scalar eulerZ) { ///@todo proposed to reverse this since it's labeled zyx but takes arguments xyz and it will match all other parts of the code - btScalar ci ( btCos(eulerX)); - btScalar cj ( btCos(eulerY)); - btScalar ch ( btCos(eulerZ)); - btScalar si ( btSin(eulerX)); - btScalar sj ( btSin(eulerY)); - btScalar sh ( btSin(eulerZ)); - btScalar cc = ci * ch; - btScalar cs = ci * sh; - btScalar sc = si * ch; - btScalar ss = si * sh; + b3Scalar ci ( btCos(eulerX)); + b3Scalar cj ( btCos(eulerY)); + b3Scalar ch ( btCos(eulerZ)); + b3Scalar si ( btSin(eulerX)); + b3Scalar sj ( btSin(eulerY)); + b3Scalar sh ( btSin(eulerZ)); + b3Scalar cc = ci * ch; + b3Scalar cs = ci * sh; + b3Scalar sc = si * ch; + b3Scalar ss = si * sh; setValue(cj * ch, sj * sc - cs, sj * cc + ss, cj * sh, sj * ss + cc, sj * cs - sc, @@ -316,30 +316,30 @@ public: m_el[1] = v0100; m_el[2] = v0010; #else - setValue(btScalar(1.0), btScalar(0.0), btScalar(0.0), - btScalar(0.0), btScalar(1.0), btScalar(0.0), - btScalar(0.0), btScalar(0.0), btScalar(1.0)); + setValue(b3Scalar(1.0), b3Scalar(0.0), b3Scalar(0.0), + b3Scalar(0.0), b3Scalar(1.0), b3Scalar(0.0), + b3Scalar(0.0), b3Scalar(0.0), b3Scalar(1.0)); #endif } - static const btMatrix3x3& getIdentity() + static const b3Matrix3x3& getIdentity() { #if (defined(BT_USE_SSE_IN_API)&& defined (BT_USE_SSE)) || defined(BT_USE_NEON) - static const btMatrix3x3 + static const b3Matrix3x3 identityMatrix(v1000, v0100, v0010); #else - static const btMatrix3x3 + static const b3Matrix3x3 identityMatrix( - btScalar(1.0), btScalar(0.0), btScalar(0.0), - btScalar(0.0), btScalar(1.0), btScalar(0.0), - btScalar(0.0), btScalar(0.0), btScalar(1.0)); + b3Scalar(1.0), b3Scalar(0.0), b3Scalar(0.0), + b3Scalar(0.0), b3Scalar(1.0), b3Scalar(0.0), + b3Scalar(0.0), b3Scalar(0.0), b3Scalar(1.0)); #endif return identityMatrix; } /**@brief Fill the rotational part of an OpenGL matrix and clear the shear/perspective * @param m The array to be filled */ - void getOpenGLSubMatrix(btScalar *m) const + void getOpenGLSubMatrix(b3Scalar *m) const { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 v0 = m_el[0].mVec128; @@ -375,43 +375,43 @@ public: vm[1] = v1; vm[2] = v2; #else - m[0] = btScalar(m_el[0].getX()); - m[1] = btScalar(m_el[1].getX()); - m[2] = btScalar(m_el[2].getX()); - m[3] = btScalar(0.0); - m[4] = btScalar(m_el[0].getY()); - m[5] = btScalar(m_el[1].getY()); - m[6] = btScalar(m_el[2].getY()); - m[7] = btScalar(0.0); - m[8] = btScalar(m_el[0].getZ()); - m[9] = btScalar(m_el[1].getZ()); - m[10] = btScalar(m_el[2].getZ()); - m[11] = btScalar(0.0); + m[0] = b3Scalar(m_el[0].getX()); + m[1] = b3Scalar(m_el[1].getX()); + m[2] = b3Scalar(m_el[2].getX()); + m[3] = b3Scalar(0.0); + m[4] = b3Scalar(m_el[0].getY()); + m[5] = b3Scalar(m_el[1].getY()); + m[6] = b3Scalar(m_el[2].getY()); + m[7] = b3Scalar(0.0); + m[8] = b3Scalar(m_el[0].getZ()); + m[9] = b3Scalar(m_el[1].getZ()); + m[10] = b3Scalar(m_el[2].getZ()); + m[11] = b3Scalar(0.0); #endif } /**@brief Get the matrix represented as a quaternion * @param q The quaternion which will be set */ - void getRotation(btQuaternion& q) const + void getRotation(b3Quaternion& q) const { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE))|| defined (BT_USE_NEON) - btScalar trace = m_el[0].getX() + m_el[1].getY() + m_el[2].getZ(); - btScalar s, x; + b3Scalar trace = m_el[0].getX() + m_el[1].getY() + m_el[2].getZ(); + b3Scalar s, x; union { btSimdFloat4 vec; - btScalar f[4]; + b3Scalar f[4]; } temp; - if (trace > btScalar(0.0)) + if (trace > b3Scalar(0.0)) { - x = trace + btScalar(1.0); + x = trace + b3Scalar(1.0); temp.f[0]=m_el[2].getY() - m_el[1].getZ(); temp.f[1]=m_el[0].getZ() - m_el[2].getX(); temp.f[2]=m_el[1].getX() - m_el[0].getY(); temp.f[3]=x; - //temp.f[3]= s * btScalar(0.5); + //temp.f[3]= s * b3Scalar(0.5); } else { @@ -431,30 +431,30 @@ public: { i = 0; j = 1; k = 2; } } - x = m_el[i][i] - m_el[j][j] - m_el[k][k] + btScalar(1.0); + x = m_el[i][i] - m_el[j][j] - m_el[k][k] + b3Scalar(1.0); temp.f[3] = (m_el[k][j] - m_el[j][k]); temp.f[j] = (m_el[j][i] + m_el[i][j]); temp.f[k] = (m_el[k][i] + m_el[i][k]); temp.f[i] = x; - //temp.f[i] = s * btScalar(0.5); + //temp.f[i] = s * b3Scalar(0.5); } s = btSqrt(x); q.set128(temp.vec); - s = btScalar(0.5) / s; + s = b3Scalar(0.5) / s; q *= s; #else - btScalar trace = m_el[0].getX() + m_el[1].getY() + m_el[2].getZ(); + b3Scalar trace = m_el[0].getX() + m_el[1].getY() + m_el[2].getZ(); - btScalar temp[4]; + b3Scalar temp[4]; - if (trace > btScalar(0.0)) + if (trace > b3Scalar(0.0)) { - btScalar s = btSqrt(trace + btScalar(1.0)); - temp[3]=(s * btScalar(0.5)); - s = btScalar(0.5) / s; + b3Scalar s = btSqrt(trace + b3Scalar(1.0)); + temp[3]=(s * b3Scalar(0.5)); + s = b3Scalar(0.5) / s; temp[0]=((m_el[2].getY() - m_el[1].getZ()) * s); temp[1]=((m_el[0].getZ() - m_el[2].getX()) * s); @@ -468,9 +468,9 @@ public: int j = (i + 1) % 3; int k = (i + 2) % 3; - btScalar s = btSqrt(m_el[i][i] - m_el[j][j] - m_el[k][k] + btScalar(1.0)); - temp[i] = s * btScalar(0.5); - s = btScalar(0.5) / s; + b3Scalar s = btSqrt(m_el[i][i] - m_el[j][j] - m_el[k][k] + b3Scalar(1.0)); + temp[i] = s * b3Scalar(0.5); + s = b3Scalar(0.5) / s; temp[3] = (m_el[k][j] - m_el[j][k]) * s; temp[j] = (m_el[j][i] + m_el[i][j]) * s; @@ -484,13 +484,13 @@ public: * @param yaw Yaw around Y axis * @param pitch Pitch around X axis * @param roll around Z axis */ - void getEulerYPR(btScalar& yaw, btScalar& pitch, btScalar& roll) const + void getEulerYPR(b3Scalar& yaw, b3Scalar& pitch, b3Scalar& roll) const { // first use the normal calculus - yaw = btScalar(btAtan2(m_el[1].getX(), m_el[0].getX())); - pitch = btScalar(btAsin(-m_el[2].getX())); - roll = btScalar(btAtan2(m_el[2].getY(), m_el[2].getZ())); + yaw = b3Scalar(btAtan2(m_el[1].getX(), m_el[0].getX())); + pitch = b3Scalar(btAsin(-m_el[2].getX())); + roll = b3Scalar(btAtan2(m_el[2].getY(), m_el[2].getZ())); // on pitch = +/-HalfPI if (btFabs(pitch)==SIMD_HALF_PI) @@ -513,13 +513,13 @@ public: * @param pitch Pitch around Y axis * @param roll around X axis * @param solution_number Which solution of two possible solutions ( 1 or 2) are possible values*/ - void getEulerZYX(btScalar& yaw, btScalar& pitch, btScalar& roll, unsigned int solution_number = 1) const + void getEulerZYX(b3Scalar& yaw, b3Scalar& pitch, b3Scalar& roll, unsigned int solution_number = 1) const { struct Euler { - btScalar yaw; - btScalar pitch; - btScalar roll; + b3Scalar yaw; + b3Scalar pitch; + b3Scalar roll; }; Euler euler_out; @@ -533,18 +533,18 @@ public: euler_out2.yaw = 0; // From difference of angles formula - btScalar delta = btAtan2(m_el[0].getX(),m_el[0].getZ()); + b3Scalar delta = btAtan2(m_el[0].getX(),m_el[0].getZ()); if (m_el[2].getX() > 0) //gimbal locked up { - euler_out.pitch = SIMD_PI / btScalar(2.0); - euler_out2.pitch = SIMD_PI / btScalar(2.0); + euler_out.pitch = SIMD_PI / b3Scalar(2.0); + euler_out2.pitch = SIMD_PI / b3Scalar(2.0); euler_out.roll = euler_out.pitch + delta; euler_out2.roll = euler_out.pitch + delta; } else // gimbal locked down { - euler_out.pitch = -SIMD_PI / btScalar(2.0); - euler_out2.pitch = -SIMD_PI / btScalar(2.0); + euler_out.pitch = -SIMD_PI / b3Scalar(2.0); + euler_out2.pitch = -SIMD_PI / b3Scalar(2.0); euler_out.roll = -euler_out.pitch + delta; euler_out2.roll = -euler_out.pitch + delta; } @@ -582,12 +582,12 @@ public: /**@brief Create a scaled copy of the matrix * @param s Scaling vector The elements of the vector will scale each column */ - btMatrix3x3 scaled(const btVector3& s) const + b3Matrix3x3 scaled(const b3Vector3& s) const { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE))|| defined (BT_USE_NEON) - return btMatrix3x3(m_el[0] * s, m_el[1] * s, m_el[2] * s); + return b3Matrix3x3(m_el[0] * s, m_el[1] * s, m_el[2] * s); #else - return btMatrix3x3( + return b3Matrix3x3( m_el[0].getX() * s.getX(), m_el[0].getY() * s.getY(), m_el[0].getZ() * s.getZ(), m_el[1].getX() * s.getX(), m_el[1].getY() * s.getY(), m_el[1].getZ() * s.getZ(), m_el[2].getX() * s.getX(), m_el[2].getY() * s.getY(), m_el[2].getZ() * s.getZ()); @@ -595,28 +595,28 @@ public: } /**@brief Return the determinant of the matrix */ - btScalar determinant() const; + b3Scalar determinant() const; /**@brief Return the adjoint of the matrix */ - btMatrix3x3 adjoint() const; + b3Matrix3x3 adjoint() const; /**@brief Return the matrix with all values non negative */ - btMatrix3x3 absolute() const; + b3Matrix3x3 absolute() const; /**@brief Return the transpose of the matrix */ - btMatrix3x3 transpose() const; + b3Matrix3x3 transpose() const; /**@brief Return the inverse of the matrix */ - btMatrix3x3 inverse() const; + b3Matrix3x3 inverse() const; - btMatrix3x3 transposeTimes(const btMatrix3x3& m) const; - btMatrix3x3 timesTranspose(const btMatrix3x3& m) const; + b3Matrix3x3 transposeTimes(const b3Matrix3x3& m) const; + b3Matrix3x3 timesTranspose(const b3Matrix3x3& m) const; - SIMD_FORCE_INLINE btScalar tdotx(const btVector3& v) const + SIMD_FORCE_INLINE b3Scalar tdotx(const b3Vector3& v) const { return m_el[0].getX() * v.getX() + m_el[1].getX() * v.getY() + m_el[2].getX() * v.getZ(); } - SIMD_FORCE_INLINE btScalar tdoty(const btVector3& v) const + SIMD_FORCE_INLINE b3Scalar tdoty(const b3Vector3& v) const { return m_el[0].getY() * v.getX() + m_el[1].getY() * v.getY() + m_el[2].getY() * v.getZ(); } - SIMD_FORCE_INLINE btScalar tdotz(const btVector3& v) const + SIMD_FORCE_INLINE b3Scalar tdotz(const b3Vector3& v) const { return m_el[0].getZ() * v.getX() + m_el[1].getZ() * v.getY() + m_el[2].getZ() * v.getZ(); } @@ -631,7 +631,7 @@ public: * * Note that this matrix is assumed to be symmetric. */ - void diagonalize(btMatrix3x3& rot, btScalar threshold, int maxSteps) + void diagonalize(b3Matrix3x3& rot, b3Scalar threshold, int maxSteps) { rot.setIdentity(); for (int step = maxSteps; step > 0; step--) @@ -640,8 +640,8 @@ public: int p = 0; int q = 1; int r = 2; - btScalar max = btFabs(m_el[0][1]); - btScalar v = btFabs(m_el[0][2]); + b3Scalar max = btFabs(m_el[0][1]); + b3Scalar v = btFabs(m_el[0][2]); if (v > max) { q = 2; @@ -657,7 +657,7 @@ public: max = v; } - btScalar t = threshold * (btFabs(m_el[0][0]) + btFabs(m_el[1][1]) + btFabs(m_el[2][2])); + b3Scalar t = threshold * (btFabs(m_el[0][0]) + btFabs(m_el[1][1]) + btFabs(m_el[2][2])); if (max <= t) { if (max <= SIMD_EPSILON * t) @@ -668,12 +668,12 @@ public: } // compute Jacobi rotation J which leads to a zero for element [p][q] - btScalar mpq = m_el[p][q]; - btScalar theta = (m_el[q][q] - m_el[p][p]) / (2 * mpq); - btScalar theta2 = theta * theta; - btScalar cos; - btScalar sin; - if (theta2 * theta2 < btScalar(10 / SIMD_EPSILON)) + b3Scalar mpq = m_el[p][q]; + b3Scalar theta = (m_el[q][q] - m_el[p][p]) / (2 * mpq); + b3Scalar theta2 = theta * theta; + b3Scalar cos; + b3Scalar sin; + if (theta2 * theta2 < b3Scalar(10 / SIMD_EPSILON)) { t = (theta >= 0) ? 1 / (theta + btSqrt(1 + theta2)) : 1 / (theta - btSqrt(1 + theta2)); @@ -683,8 +683,8 @@ public: else { // approximation for large theta-value, i.e., a nearly diagonal matrix - t = 1 / (theta * (2 + btScalar(0.5) / theta2)); - cos = 1 - btScalar(0.5) * t * t; + t = 1 / (theta * (2 + b3Scalar(0.5) / theta2)); + cos = 1 - b3Scalar(0.5) * t * t; sin = cos * t; } @@ -692,15 +692,15 @@ public: m_el[p][q] = m_el[q][p] = 0; m_el[p][p] -= t * mpq; m_el[q][q] += t * mpq; - btScalar mrp = m_el[r][p]; - btScalar mrq = m_el[r][q]; + b3Scalar mrp = m_el[r][p]; + b3Scalar mrq = m_el[r][q]; m_el[r][p] = m_el[p][r] = cos * mrp - sin * mrq; m_el[r][q] = m_el[q][r] = cos * mrq + sin * mrp; // apply rotation to rot (rot = rot * J) for (int i = 0; i < 3; i++) { - btVector3& row = rot[i]; + b3Vector3& row = rot[i]; mrp = row[p]; mrq = row[q]; row[p] = cos * mrp - sin * mrq; @@ -719,7 +719,7 @@ public: * @param c1 The second column to use for calculating the cofactor * See http://en.wikipedia.org/wiki/Cofactor_(linear_algebra) for more details */ - btScalar cofac(int r1, int c1, int r2, int c2) const + b3Scalar cofac(int r1, int c1, int r2, int c2) const { return m_el[r1][c1] * m_el[r2][c2] - m_el[r1][c2] * m_el[r2][c1]; } @@ -737,8 +737,8 @@ public: }; -SIMD_FORCE_INLINE btMatrix3x3& -btMatrix3x3::operator*=(const btMatrix3x3& m) +SIMD_FORCE_INLINE b3Matrix3x3& +b3Matrix3x3::operator*=(const b3Matrix3x3& m) { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 rv00, rv01, rv02; @@ -827,8 +827,8 @@ btMatrix3x3::operator*=(const btMatrix3x3& m) return *this; } -SIMD_FORCE_INLINE btMatrix3x3& -btMatrix3x3::operator+=(const btMatrix3x3& m) +SIMD_FORCE_INLINE b3Matrix3x3& +b3Matrix3x3::operator+=(const b3Matrix3x3& m) { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE))|| defined (BT_USE_NEON) m_el[0].mVec128 = m_el[0].mVec128 + m.m_el[0].mVec128; @@ -849,38 +849,38 @@ btMatrix3x3::operator+=(const btMatrix3x3& m) return *this; } -SIMD_FORCE_INLINE btMatrix3x3 -operator*(const btMatrix3x3& m, const btScalar & k) +SIMD_FORCE_INLINE b3Matrix3x3 +operator*(const b3Matrix3x3& m, const b3Scalar & k) { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE)) __m128 vk = bt_splat_ps(_mm_load_ss((float *)&k), 0x80); - return btMatrix3x3( + return b3Matrix3x3( _mm_mul_ps(m[0].mVec128, vk), _mm_mul_ps(m[1].mVec128, vk), _mm_mul_ps(m[2].mVec128, vk)); #elif defined(BT_USE_NEON) - return btMatrix3x3( + return b3Matrix3x3( vmulq_n_f32(m[0].mVec128, k), vmulq_n_f32(m[1].mVec128, k), vmulq_n_f32(m[2].mVec128, k)); #else - return btMatrix3x3( + return b3Matrix3x3( m[0].getX()*k,m[0].getY()*k,m[0].getZ()*k, m[1].getX()*k,m[1].getY()*k,m[1].getZ()*k, m[2].getX()*k,m[2].getY()*k,m[2].getZ()*k); #endif } -SIMD_FORCE_INLINE btMatrix3x3 -operator+(const btMatrix3x3& m1, const btMatrix3x3& m2) +SIMD_FORCE_INLINE b3Matrix3x3 +operator+(const b3Matrix3x3& m1, const b3Matrix3x3& m2) { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE))|| defined (BT_USE_NEON) - return btMatrix3x3( + return b3Matrix3x3( m1[0].mVec128 + m2[0].mVec128, m1[1].mVec128 + m2[1].mVec128, m1[2].mVec128 + m2[2].mVec128); #else - return btMatrix3x3( + return b3Matrix3x3( m1[0][0]+m2[0][0], m1[0][1]+m2[0][1], m1[0][2]+m2[0][2], @@ -895,16 +895,16 @@ operator+(const btMatrix3x3& m1, const btMatrix3x3& m2) #endif } -SIMD_FORCE_INLINE btMatrix3x3 -operator-(const btMatrix3x3& m1, const btMatrix3x3& m2) +SIMD_FORCE_INLINE b3Matrix3x3 +operator-(const b3Matrix3x3& m1, const b3Matrix3x3& m2) { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE))|| defined (BT_USE_NEON) - return btMatrix3x3( + return b3Matrix3x3( m1[0].mVec128 - m2[0].mVec128, m1[1].mVec128 - m2[1].mVec128, m1[2].mVec128 - m2[2].mVec128); #else - return btMatrix3x3( + return b3Matrix3x3( m1[0][0]-m2[0][0], m1[0][1]-m2[0][1], m1[0][2]-m2[0][2], @@ -920,8 +920,8 @@ operator-(const btMatrix3x3& m1, const btMatrix3x3& m2) } -SIMD_FORCE_INLINE btMatrix3x3& -btMatrix3x3::operator-=(const btMatrix3x3& m) +SIMD_FORCE_INLINE b3Matrix3x3& +b3Matrix3x3::operator-=(const b3Matrix3x3& m) { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE))|| defined (BT_USE_NEON) m_el[0].mVec128 = m_el[0].mVec128 - m.m_el[0].mVec128; @@ -943,36 +943,36 @@ btMatrix3x3::operator-=(const btMatrix3x3& m) } -SIMD_FORCE_INLINE btScalar -btMatrix3x3::determinant() const +SIMD_FORCE_INLINE b3Scalar +b3Matrix3x3::determinant() const { return btTriple((*this)[0], (*this)[1], (*this)[2]); } -SIMD_FORCE_INLINE btMatrix3x3 -btMatrix3x3::absolute() const +SIMD_FORCE_INLINE b3Matrix3x3 +b3Matrix3x3::absolute() const { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE)) - return btMatrix3x3( + return b3Matrix3x3( _mm_and_ps(m_el[0].mVec128, btvAbsfMask), _mm_and_ps(m_el[1].mVec128, btvAbsfMask), _mm_and_ps(m_el[2].mVec128, btvAbsfMask)); #elif defined(BT_USE_NEON) - return btMatrix3x3( + return b3Matrix3x3( (float32x4_t)vandq_s32((int32x4_t)m_el[0].mVec128, btv3AbsMask), (float32x4_t)vandq_s32((int32x4_t)m_el[1].mVec128, btv3AbsMask), (float32x4_t)vandq_s32((int32x4_t)m_el[2].mVec128, btv3AbsMask)); #else - return btMatrix3x3( + return b3Matrix3x3( btFabs(m_el[0].getX()), btFabs(m_el[0].getY()), btFabs(m_el[0].getZ()), btFabs(m_el[1].getX()), btFabs(m_el[1].getY()), btFabs(m_el[1].getZ()), btFabs(m_el[2].getX()), btFabs(m_el[2].getY()), btFabs(m_el[2].getZ())); #endif } -SIMD_FORCE_INLINE btMatrix3x3 -btMatrix3x3::transpose() const +SIMD_FORCE_INLINE b3Matrix3x3 +b3Matrix3x3::transpose() const { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE)) __m128 v0 = m_el[0].mVec128; @@ -990,7 +990,7 @@ btMatrix3x3::transpose() const v2 = btCastdTo128f(_mm_move_sd(btCastfTo128d(v2), btCastfTo128d(vT))); // z0 z1 z2 0 - return btMatrix3x3( v0, v1, v2 ); + return b3Matrix3x3( v0, v1, v2 ); #elif defined(BT_USE_NEON) // note: zeros the w channel. We can preserve it at the cost of two more vtrn instructions. static const uint32x2_t zMask = (const uint32x2_t) {-1, 0 }; @@ -1000,36 +1000,36 @@ btMatrix3x3::transpose() const float32x4_t v1 = vcombine_f32( vget_low_f32(top.val[1]), bl.val[1] ); float32x2_t q = (float32x2_t) vand_u32( (uint32x2_t) vget_high_f32( m_el[2].mVec128), zMask ); float32x4_t v2 = vcombine_f32( vget_high_f32(top.val[0]), q ); // z0 z1 z2 0 - return btMatrix3x3( v0, v1, v2 ); + return b3Matrix3x3( v0, v1, v2 ); #else - return btMatrix3x3( m_el[0].getX(), m_el[1].getX(), m_el[2].getX(), + return b3Matrix3x3( m_el[0].getX(), m_el[1].getX(), m_el[2].getX(), m_el[0].getY(), m_el[1].getY(), m_el[2].getY(), m_el[0].getZ(), m_el[1].getZ(), m_el[2].getZ()); #endif } -SIMD_FORCE_INLINE btMatrix3x3 -btMatrix3x3::adjoint() const +SIMD_FORCE_INLINE b3Matrix3x3 +b3Matrix3x3::adjoint() const { - return btMatrix3x3(cofac(1, 1, 2, 2), cofac(0, 2, 2, 1), cofac(0, 1, 1, 2), + return b3Matrix3x3(cofac(1, 1, 2, 2), cofac(0, 2, 2, 1), cofac(0, 1, 1, 2), cofac(1, 2, 2, 0), cofac(0, 0, 2, 2), cofac(0, 2, 1, 0), cofac(1, 0, 2, 1), cofac(0, 1, 2, 0), cofac(0, 0, 1, 1)); } -SIMD_FORCE_INLINE btMatrix3x3 -btMatrix3x3::inverse() const +SIMD_FORCE_INLINE b3Matrix3x3 +b3Matrix3x3::inverse() const { - btVector3 co(cofac(1, 1, 2, 2), cofac(1, 2, 2, 0), cofac(1, 0, 2, 1)); - btScalar det = (*this)[0].dot(co); - btFullAssert(det != btScalar(0.0)); - btScalar s = btScalar(1.0) / det; - return btMatrix3x3(co.getX() * s, cofac(0, 2, 2, 1) * s, cofac(0, 1, 1, 2) * s, + b3Vector3 co(cofac(1, 1, 2, 2), cofac(1, 2, 2, 0), cofac(1, 0, 2, 1)); + b3Scalar det = (*this)[0].dot(co); + btFullAssert(det != b3Scalar(0.0)); + b3Scalar s = b3Scalar(1.0) / det; + return b3Matrix3x3(co.getX() * s, cofac(0, 2, 2, 1) * s, cofac(0, 1, 1, 2) * s, co.getY() * s, cofac(0, 0, 2, 2) * s, cofac(0, 2, 1, 0) * s, co.getZ() * s, cofac(0, 1, 2, 0) * s, cofac(0, 0, 1, 1) * s); } -SIMD_FORCE_INLINE btMatrix3x3 -btMatrix3x3::transposeTimes(const btMatrix3x3& m) const +SIMD_FORCE_INLINE b3Matrix3x3 +b3Matrix3x3::transposeTimes(const b3Matrix3x3& m) const { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE)) // zeros w @@ -1049,7 +1049,7 @@ btMatrix3x3::transposeTimes(const btMatrix3x3& m) const r0 = _mm_add_ps( r0, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0))); r1 = _mm_add_ps( r1, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0x55))); r2 = _mm_add_ps( r2, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0xaa))); - return btMatrix3x3( r0, r1, r2 ); + return b3Matrix3x3( r0, r1, r2 ); #elif defined BT_USE_NEON // zeros w @@ -1069,9 +1069,9 @@ btMatrix3x3::transposeTimes(const btMatrix3x3& m) const r0 = vmlaq_lane_f32( r0, m2, vget_low_f32(row), 0); r1 = vmlaq_lane_f32( r1, m2, vget_low_f32(row), 1); r2 = vmlaq_lane_f32( r2, m2, vget_high_f32(row), 0); - return btMatrix3x3( r0, r1, r2 ); + return b3Matrix3x3( r0, r1, r2 ); #else - return btMatrix3x3( + return b3Matrix3x3( m_el[0].getX() * m[0].getX() + m_el[1].getX() * m[1].getX() + m_el[2].getX() * m[2].getX(), m_el[0].getX() * m[0].getY() + m_el[1].getX() * m[1].getY() + m_el[2].getX() * m[2].getY(), m_el[0].getX() * m[0].getZ() + m_el[1].getX() * m[1].getZ() + m_el[2].getX() * m[2].getZ(), @@ -1084,15 +1084,15 @@ btMatrix3x3::transposeTimes(const btMatrix3x3& m) const #endif } -SIMD_FORCE_INLINE btMatrix3x3 -btMatrix3x3::timesTranspose(const btMatrix3x3& m) const +SIMD_FORCE_INLINE b3Matrix3x3 +b3Matrix3x3::timesTranspose(const b3Matrix3x3& m) const { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE)) __m128 a0 = m_el[0].mVec128; __m128 a1 = m_el[1].mVec128; __m128 a2 = m_el[2].mVec128; - btMatrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here + b3Matrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here __m128 mx = mT[0].mVec128; __m128 my = mT[1].mVec128; __m128 mz = mT[2].mVec128; @@ -1106,14 +1106,14 @@ btMatrix3x3::timesTranspose(const btMatrix3x3& m) const r0 = _mm_add_ps(r0, _mm_mul_ps(mz, _mm_shuffle_ps(a0, a0, 0xaa))); r1 = _mm_add_ps(r1, _mm_mul_ps(mz, _mm_shuffle_ps(a1, a1, 0xaa))); r2 = _mm_add_ps(r2, _mm_mul_ps(mz, _mm_shuffle_ps(a2, a2, 0xaa))); - return btMatrix3x3( r0, r1, r2); + return b3Matrix3x3( r0, r1, r2); #elif defined BT_USE_NEON float32x4_t a0 = m_el[0].mVec128; float32x4_t a1 = m_el[1].mVec128; float32x4_t a2 = m_el[2].mVec128; - btMatrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here + b3Matrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here float32x4_t mx = mT[0].mVec128; float32x4_t my = mT[1].mVec128; float32x4_t mz = mT[2].mVec128; @@ -1127,29 +1127,29 @@ btMatrix3x3::timesTranspose(const btMatrix3x3& m) const r0 = vmlaq_lane_f32( r0, mz, vget_high_f32(a0), 0); r1 = vmlaq_lane_f32( r1, mz, vget_high_f32(a1), 0); r2 = vmlaq_lane_f32( r2, mz, vget_high_f32(a2), 0); - return btMatrix3x3( r0, r1, r2 ); + return b3Matrix3x3( r0, r1, r2 ); #else - return btMatrix3x3( + return b3Matrix3x3( m_el[0].dot(m[0]), m_el[0].dot(m[1]), m_el[0].dot(m[2]), m_el[1].dot(m[0]), m_el[1].dot(m[1]), m_el[1].dot(m[2]), m_el[2].dot(m[0]), m_el[2].dot(m[1]), m_el[2].dot(m[2])); #endif } -SIMD_FORCE_INLINE btVector3 -operator*(const btMatrix3x3& m, const btVector3& v) +SIMD_FORCE_INLINE b3Vector3 +operator*(const b3Matrix3x3& m, const b3Vector3& v) { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE))|| defined (BT_USE_NEON) return v.dot3(m[0], m[1], m[2]); #else - return btVector3(m[0].dot(v), m[1].dot(v), m[2].dot(v)); + return b3Vector3(m[0].dot(v), m[1].dot(v), m[2].dot(v)); #endif } -SIMD_FORCE_INLINE btVector3 -operator*(const btVector3& v, const btMatrix3x3& m) +SIMD_FORCE_INLINE b3Vector3 +operator*(const b3Vector3& v, const b3Matrix3x3& m) { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE)) @@ -1164,7 +1164,7 @@ operator*(const btVector3& v, const btMatrix3x3& m) c0 = _mm_add_ps(c0, c1); c2 = _mm_mul_ps(c2, _mm_and_ps(m[2].mVec128, btvFFF0fMask) ); - return btVector3(_mm_add_ps(c0, c2)); + return b3Vector3(_mm_add_ps(c0, c2)); #elif defined(BT_USE_NEON) const float32x4_t vv = v.mVec128; const float32x2_t vlo = vget_low_f32(vv); @@ -1182,14 +1182,14 @@ operator*(const btVector3& v, const btMatrix3x3& m) c0 = vaddq_f32(c0, c1); c0 = vaddq_f32(c0, c2); - return btVector3(c0); + return b3Vector3(c0); #else - return btVector3(m.tdotx(v), m.tdoty(v), m.tdotz(v)); + return b3Vector3(m.tdotx(v), m.tdoty(v), m.tdotz(v)); #endif } -SIMD_FORCE_INLINE btMatrix3x3 -operator*(const btMatrix3x3& m1, const btMatrix3x3& m2) +SIMD_FORCE_INLINE b3Matrix3x3 +operator*(const b3Matrix3x3& m1, const b3Matrix3x3& m2) { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE)) @@ -1235,7 +1235,7 @@ operator*(const btMatrix3x3& m1, const btMatrix3x3& m2) c1 = _mm_add_ps(c1, m11); c2 = _mm_add_ps(c2, m12); - return btMatrix3x3(c0, c1, c2); + return b3Matrix3x3(c0, c1, c2); #elif defined(BT_USE_NEON) @@ -1263,10 +1263,10 @@ operator*(const btMatrix3x3& m1, const btMatrix3x3& m2) rv1 = vmlaq_lane_f32(rv1, mv2, vget_high_f32(v1), 0); rv2 = vmlaq_lane_f32(rv2, mv2, vget_high_f32(v2), 0); - return btMatrix3x3(rv0, rv1, rv2); + return b3Matrix3x3(rv0, rv1, rv2); #else - return btMatrix3x3( + return b3Matrix3x3( m2.tdotx( m1[0]), m2.tdoty( m1[0]), m2.tdotz( m1[0]), m2.tdotx( m1[1]), m2.tdoty( m1[1]), m2.tdotz( m1[1]), m2.tdotx( m1[2]), m2.tdoty( m1[2]), m2.tdotz( m1[2])); @@ -1274,8 +1274,8 @@ operator*(const btMatrix3x3& m1, const btMatrix3x3& m2) } /* -SIMD_FORCE_INLINE btMatrix3x3 btMultTransposeLeft(const btMatrix3x3& m1, const btMatrix3x3& m2) { -return btMatrix3x3( +SIMD_FORCE_INLINE b3Matrix3x3 btMultTransposeLeft(const b3Matrix3x3& m1, const b3Matrix3x3& m2) { +return b3Matrix3x3( m1[0][0] * m2[0][0] + m1[1][0] * m2[1][0] + m1[2][0] * m2[2][0], m1[0][0] * m2[0][1] + m1[1][0] * m2[1][1] + m1[2][0] * m2[2][1], m1[0][0] * m2[0][2] + m1[1][0] * m2[1][2] + m1[2][0] * m2[2][2], @@ -1290,7 +1290,7 @@ m1[0][2] * m2[0][2] + m1[1][2] * m2[1][2] + m1[2][2] * m2[2][2]); /**@brief Equality operator between two matrices * It will test all elements are equal. */ -SIMD_FORCE_INLINE bool operator==(const btMatrix3x3& m1, const btMatrix3x3& m2) +SIMD_FORCE_INLINE bool operator==(const b3Matrix3x3& m1, const b3Matrix3x3& m2) { #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE)) @@ -1327,32 +1327,32 @@ struct btMatrix3x3DoubleData -SIMD_FORCE_INLINE void btMatrix3x3::serialize(struct btMatrix3x3Data& dataOut) const +SIMD_FORCE_INLINE void b3Matrix3x3::serialize(struct btMatrix3x3Data& dataOut) const { for (int i=0;i<3;i++) m_el[i].serialize(dataOut.m_el[i]); } -SIMD_FORCE_INLINE void btMatrix3x3::serializeFloat(struct btMatrix3x3FloatData& dataOut) const +SIMD_FORCE_INLINE void b3Matrix3x3::serializeFloat(struct btMatrix3x3FloatData& dataOut) const { for (int i=0;i<3;i++) m_el[i].serializeFloat(dataOut.m_el[i]); } -SIMD_FORCE_INLINE void btMatrix3x3::deSerialize(const struct btMatrix3x3Data& dataIn) +SIMD_FORCE_INLINE void b3Matrix3x3::deSerialize(const struct btMatrix3x3Data& dataIn) { for (int i=0;i<3;i++) m_el[i].deSerialize(dataIn.m_el[i]); } -SIMD_FORCE_INLINE void btMatrix3x3::deSerializeFloat(const struct btMatrix3x3FloatData& dataIn) +SIMD_FORCE_INLINE void b3Matrix3x3::deSerializeFloat(const struct btMatrix3x3FloatData& dataIn) { for (int i=0;i<3;i++) m_el[i].deSerializeFloat(dataIn.m_el[i]); } -SIMD_FORCE_INLINE void btMatrix3x3::deSerializeDouble(const struct btMatrix3x3DoubleData& dataIn) +SIMD_FORCE_INLINE void b3Matrix3x3::deSerializeDouble(const struct btMatrix3x3DoubleData& dataIn) { for (int i=0;i<3;i++) m_el[i].deSerializeDouble(dataIn.m_el[i]); diff --git a/src/BulletCommon/btMinMax.h b/src/BulletCommon/b3MinMax.h similarity index 98% rename from src/BulletCommon/btMinMax.h rename to src/BulletCommon/b3MinMax.h index 5b436e9ba..0f4f5c4c2 100644 --- a/src/BulletCommon/btMinMax.h +++ b/src/BulletCommon/b3MinMax.h @@ -17,7 +17,7 @@ subject to the following restrictions: #ifndef BT_GEN_MINMAX_H #define BT_GEN_MINMAX_H -#include "btScalar.h" +#include "b3Scalar.h" template SIMD_FORCE_INLINE const T& btMin(const T& a, const T& b) diff --git a/src/BulletCommon/btPoolAllocator.h b/src/BulletCommon/b3PoolAllocator.h similarity index 92% rename from src/BulletCommon/btPoolAllocator.h rename to src/BulletCommon/b3PoolAllocator.h index ef2084537..f572153b4 100644 --- a/src/BulletCommon/btPoolAllocator.h +++ b/src/BulletCommon/b3PoolAllocator.h @@ -16,11 +16,11 @@ subject to the following restrictions: #ifndef _BT_POOL_ALLOCATOR_H #define _BT_POOL_ALLOCATOR_H -#include "btScalar.h" -#include "btAlignedAllocator.h" +#include "b3Scalar.h" +#include "b3AlignedAllocator.h" -///The btPoolAllocator class allows to efficiently allocate a large pool of objects, instead of dynamically allocating them separately. -class btPoolAllocator +///The b3PoolAllocator class allows to efficiently allocate a large pool of objects, instead of dynamically allocating them separately. +class b3PoolAllocator { int m_elemSize; int m_maxElements; @@ -30,7 +30,7 @@ class btPoolAllocator public: - btPoolAllocator(int elemSize, int maxElements) + b3PoolAllocator(int elemSize, int maxElements) :m_elemSize(elemSize), m_maxElements(maxElements) { @@ -47,7 +47,7 @@ public: *(void**)p = 0; } - ~btPoolAllocator() + ~b3PoolAllocator() { btAlignedFree( m_pool); } diff --git a/src/BulletCommon/btQuadWord.h b/src/BulletCommon/b3QuadWord.h similarity index 67% rename from src/BulletCommon/btQuadWord.h rename to src/BulletCommon/b3QuadWord.h index 488546424..740d67205 100644 --- a/src/BulletCommon/btQuadWord.h +++ b/src/BulletCommon/b3QuadWord.h @@ -16,8 +16,8 @@ subject to the following restrictions: #ifndef BT_SIMD_QUADWORD_H #define BT_SIMD_QUADWORD_H -#include "btScalar.h" -#include "btMinMax.h" +#include "b3Scalar.h" +#include "b3MinMax.h" @@ -27,13 +27,13 @@ subject to the following restrictions: #include #endif -/**@brief The btQuadWord class is base class for btVector3 and btQuaternion. +/**@brief The b3QuadWord class is base class for b3Vector3 and b3Quaternion. * Some issues under PS3 Linux with IBM 2.1 SDK, gcc compiler prevent from using aligned quadword. */ #ifndef USE_LIBSPE2 -ATTRIBUTE_ALIGNED16(class) btQuadWord +ATTRIBUTE_ALIGNED16(class) b3QuadWord #else -class btQuadWord +class b3QuadWord #endif { protected: @@ -41,7 +41,7 @@ protected: #if defined (__SPU__) && defined (__CELLOS_LV2__) union { vec_float4 mVec128; - btScalar m_floats[4]; + b3Scalar m_floats[4]; }; public: vec_float4 get128() const @@ -54,8 +54,8 @@ public: #if defined(BT_USE_SSE) || defined(BT_USE_NEON) union { btSimdFloat4 mVec128; - btScalar m_floats[4]; - struct {btScalar x,y,z,w;}; + b3Scalar m_floats[4]; + struct {b3Scalar x,y,z,w;}; }; public: SIMD_FORCE_INLINE btSimdFloat4 get128() const @@ -67,7 +67,7 @@ public: mVec128 = v128; } #else - btScalar m_floats[4]; + b3Scalar m_floats[4]; #endif // BT_USE_SSE #endif //__CELLOS_LV2__ __SPU__ @@ -77,20 +77,20 @@ public: #if defined(BT_USE_SSE) || defined(BT_USE_NEON) // Set Vector - SIMD_FORCE_INLINE btQuadWord(const btSimdFloat4 vec) + SIMD_FORCE_INLINE b3QuadWord(const btSimdFloat4 vec) { mVec128 = vec; } // Copy constructor - SIMD_FORCE_INLINE btQuadWord(const btQuadWord& rhs) + SIMD_FORCE_INLINE b3QuadWord(const b3QuadWord& rhs) { mVec128 = rhs.mVec128; } // Assignment Operator - SIMD_FORCE_INLINE btQuadWord& - operator=(const btQuadWord& v) + SIMD_FORCE_INLINE b3QuadWord& + operator=(const b3QuadWord& v) { mVec128 = v.mVec128; @@ -100,29 +100,29 @@ public: #endif /**@brief Return the x value */ - SIMD_FORCE_INLINE const btScalar& getX() const { return m_floats[0]; } + SIMD_FORCE_INLINE const b3Scalar& getX() const { return m_floats[0]; } /**@brief Return the y value */ - SIMD_FORCE_INLINE const btScalar& getY() const { return m_floats[1]; } + SIMD_FORCE_INLINE const b3Scalar& getY() const { return m_floats[1]; } /**@brief Return the z value */ - SIMD_FORCE_INLINE const btScalar& getZ() const { return m_floats[2]; } + SIMD_FORCE_INLINE const b3Scalar& getZ() const { return m_floats[2]; } /**@brief Set the x value */ - SIMD_FORCE_INLINE void setX(btScalar _x) { m_floats[0] = _x;}; + SIMD_FORCE_INLINE void setX(b3Scalar _x) { m_floats[0] = _x;}; /**@brief Set the y value */ - SIMD_FORCE_INLINE void setY(btScalar _y) { m_floats[1] = _y;}; + SIMD_FORCE_INLINE void setY(b3Scalar _y) { m_floats[1] = _y;}; /**@brief Set the z value */ - SIMD_FORCE_INLINE void setZ(btScalar _z) { m_floats[2] = _z;}; + SIMD_FORCE_INLINE void setZ(b3Scalar _z) { m_floats[2] = _z;}; /**@brief Set the w value */ - SIMD_FORCE_INLINE void setW(btScalar _w) { m_floats[3] = _w;}; + SIMD_FORCE_INLINE void setW(b3Scalar _w) { m_floats[3] = _w;}; /**@brief Return the x value */ - //SIMD_FORCE_INLINE btScalar& operator[](int i) { return (&m_floats[0])[i]; } - //SIMD_FORCE_INLINE const btScalar& operator[](int i) const { return (&m_floats[0])[i]; } - ///operator btScalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons. - SIMD_FORCE_INLINE operator btScalar *() { return &m_floats[0]; } - SIMD_FORCE_INLINE operator const btScalar *() const { return &m_floats[0]; } + //SIMD_FORCE_INLINE b3Scalar& operator[](int i) { return (&m_floats[0])[i]; } + //SIMD_FORCE_INLINE const b3Scalar& operator[](int i) const { return (&m_floats[0])[i]; } + ///operator b3Scalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons. + SIMD_FORCE_INLINE operator b3Scalar *() { return &m_floats[0]; } + SIMD_FORCE_INLINE operator const b3Scalar *() const { return &m_floats[0]; } - SIMD_FORCE_INLINE bool operator==(const btQuadWord& other) const + SIMD_FORCE_INLINE bool operator==(const b3QuadWord& other) const { #ifdef BT_USE_SSE return (0xf == _mm_movemask_ps((__m128)_mm_cmpeq_ps(mVec128, other.mVec128))); @@ -134,7 +134,7 @@ public: #endif } - SIMD_FORCE_INLINE bool operator!=(const btQuadWord& other) const + SIMD_FORCE_INLINE bool operator!=(const b3QuadWord& other) const { return !(*this == other); } @@ -144,7 +144,7 @@ public: * @param y Value of y * @param z Value of z */ - SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z) + SIMD_FORCE_INLINE void setValue(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z) { m_floats[0]=_x; m_floats[1]=_y; @@ -152,7 +152,7 @@ public: m_floats[3] = 0.f; } -/* void getValue(btScalar *m) const +/* void getValue(b3Scalar *m) const { m[0] = m_floats[0]; m[1] = m_floats[1]; @@ -165,7 +165,7 @@ public: * @param z Value of z * @param w Value of w */ - SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z,const btScalar& _w) + SIMD_FORCE_INLINE void setValue(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z,const b3Scalar& _w) { m_floats[0]=_x; m_floats[1]=_y; @@ -173,8 +173,8 @@ public: m_floats[3]=_w; } /**@brief No initialization constructor */ - SIMD_FORCE_INLINE btQuadWord() - // :m_floats[0](btScalar(0.)),m_floats[1](btScalar(0.)),m_floats[2](btScalar(0.)),m_floats[3](btScalar(0.)) + SIMD_FORCE_INLINE b3QuadWord() + // :m_floats[0](b3Scalar(0.)),m_floats[1](b3Scalar(0.)),m_floats[2](b3Scalar(0.)),m_floats[3](b3Scalar(0.)) { } @@ -183,7 +183,7 @@ public: * @param y Value of y * @param z Value of z */ - SIMD_FORCE_INLINE btQuadWord(const btScalar& _x, const btScalar& _y, const btScalar& _z) + SIMD_FORCE_INLINE b3QuadWord(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z) { m_floats[0] = _x, m_floats[1] = _y, m_floats[2] = _z, m_floats[3] = 0.0f; } @@ -194,15 +194,15 @@ public: * @param z Value of z * @param w Value of w */ - SIMD_FORCE_INLINE btQuadWord(const btScalar& _x, const btScalar& _y, const btScalar& _z,const btScalar& _w) + SIMD_FORCE_INLINE b3QuadWord(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z,const b3Scalar& _w) { m_floats[0] = _x, m_floats[1] = _y, m_floats[2] = _z, m_floats[3] = _w; } - /**@brief Set each element to the max of the current values and the values of another btQuadWord - * @param other The other btQuadWord to compare with + /**@brief Set each element to the max of the current values and the values of another b3QuadWord + * @param other The other b3QuadWord to compare with */ - SIMD_FORCE_INLINE void setMax(const btQuadWord& other) + SIMD_FORCE_INLINE void setMax(const b3QuadWord& other) { #ifdef BT_USE_SSE mVec128 = _mm_max_ps(mVec128, other.mVec128); @@ -215,10 +215,10 @@ public: btSetMax(m_floats[3], other.m_floats[3]); #endif } - /**@brief Set each element to the min of the current values and the values of another btQuadWord - * @param other The other btQuadWord to compare with + /**@brief Set each element to the min of the current values and the values of another b3QuadWord + * @param other The other b3QuadWord to compare with */ - SIMD_FORCE_INLINE void setMin(const btQuadWord& other) + SIMD_FORCE_INLINE void setMin(const b3QuadWord& other) { #ifdef BT_USE_SSE mVec128 = _mm_min_ps(mVec128, other.mVec128); diff --git a/src/BulletCommon/btQuaternion.h b/src/BulletCommon/b3Quaternion.h similarity index 75% rename from src/BulletCommon/btQuaternion.h rename to src/BulletCommon/b3Quaternion.h index 843dedfa5..083f52c7c 100644 --- a/src/BulletCommon/btQuaternion.h +++ b/src/BulletCommon/b3Quaternion.h @@ -18,8 +18,8 @@ subject to the following restrictions: #define BT_SIMD__QUATERNION_H_ -#include "btVector3.h" -#include "btQuadWord.h" +#include "b3Vector3.h" +#include "b3QuadWord.h" @@ -38,28 +38,28 @@ const btSimdFloat4 ATTRIBUTE_ALIGNED16(vPPPM) = {+0.0f, +0.0f, +0.0f, -0.0f}; #endif -/**@brief The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatrix3x3, btVector3 and btTransform. */ -class btQuaternion : public btQuadWord { +/**@brief The b3Quaternion implements quaternion to perform linear algebra rotations in combination with b3Matrix3x3, b3Vector3 and b3Transform. */ +class b3Quaternion : public b3QuadWord { public: /**@brief No initialization constructor */ - btQuaternion() {} + b3Quaternion() {} #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))|| defined(BT_USE_NEON) // Set Vector - SIMD_FORCE_INLINE btQuaternion(const btSimdFloat4 vec) + SIMD_FORCE_INLINE b3Quaternion(const btSimdFloat4 vec) { mVec128 = vec; } // Copy constructor - SIMD_FORCE_INLINE btQuaternion(const btQuaternion& rhs) + SIMD_FORCE_INLINE b3Quaternion(const b3Quaternion& rhs) { mVec128 = rhs.mVec128; } // Assignment Operator - SIMD_FORCE_INLINE btQuaternion& - operator=(const btQuaternion& v) + SIMD_FORCE_INLINE b3Quaternion& + operator=(const b3Quaternion& v) { mVec128 = v.mVec128; @@ -68,18 +68,18 @@ public: #endif - // template - // explicit Quaternion(const btScalar *v) : Tuple4(v) {} + // template + // explicit Quaternion(const b3Scalar *v) : Tuple4(v) {} /**@brief Constructor from scalars */ - btQuaternion(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w) - : btQuadWord(_x, _y, _z, _w) + b3Quaternion(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z, const b3Scalar& _w) + : b3QuadWord(_x, _y, _z, _w) { btAssert(!((_x==1.f) && (_y==0.f) && (_z==0.f) && (_w==0.f))); } /**@brief Axis angle Constructor * @param axis The axis which the rotation is around * @param angle The magnitude of the rotation around the angle (Radians) */ - btQuaternion(const btVector3& _axis, const btScalar& _angle) + b3Quaternion(const b3Vector3& _axis, const b3Scalar& _angle) { setRotation(_axis, _angle); } @@ -87,7 +87,7 @@ public: * @param yaw Angle around Y unless BT_EULER_DEFAULT_ZYX defined then Z * @param pitch Angle around X unless BT_EULER_DEFAULT_ZYX defined then Y * @param roll Angle around Z unless BT_EULER_DEFAULT_ZYX defined then X */ - btQuaternion(const btScalar& yaw, const btScalar& pitch, const btScalar& roll) + b3Quaternion(const b3Scalar& yaw, const b3Scalar& pitch, const b3Scalar& roll) { #ifndef BT_EULER_DEFAULT_ZYX setEuler(yaw, pitch, roll); @@ -98,29 +98,29 @@ public: /**@brief Set the rotation using axis angle notation * @param axis The axis around which to rotate * @param angle The magnitude of the rotation in Radians */ - void setRotation(const btVector3& axis, const btScalar& _angle) + void setRotation(const b3Vector3& axis, const b3Scalar& _angle) { - btScalar d = axis.length(); - btAssert(d != btScalar(0.0)); - btScalar s = btSin(_angle * btScalar(0.5)) / d; + b3Scalar d = axis.length(); + btAssert(d != b3Scalar(0.0)); + b3Scalar s = btSin(_angle * b3Scalar(0.5)) / d; setValue(axis.getX() * s, axis.getY() * s, axis.getZ() * s, - btCos(_angle * btScalar(0.5))); + btCos(_angle * b3Scalar(0.5))); } /**@brief Set the quaternion using Euler angles * @param yaw Angle around Y * @param pitch Angle around X * @param roll Angle around Z */ - void setEuler(const btScalar& yaw, const btScalar& pitch, const btScalar& roll) + void setEuler(const b3Scalar& yaw, const b3Scalar& pitch, const b3Scalar& roll) { - btScalar halfYaw = btScalar(yaw) * btScalar(0.5); - btScalar halfPitch = btScalar(pitch) * btScalar(0.5); - btScalar halfRoll = btScalar(roll) * btScalar(0.5); - btScalar cosYaw = btCos(halfYaw); - btScalar sinYaw = btSin(halfYaw); - btScalar cosPitch = btCos(halfPitch); - btScalar sinPitch = btSin(halfPitch); - btScalar cosRoll = btCos(halfRoll); - btScalar sinRoll = btSin(halfRoll); + b3Scalar halfYaw = b3Scalar(yaw) * b3Scalar(0.5); + b3Scalar halfPitch = b3Scalar(pitch) * b3Scalar(0.5); + b3Scalar halfRoll = b3Scalar(roll) * b3Scalar(0.5); + b3Scalar cosYaw = btCos(halfYaw); + b3Scalar sinYaw = btSin(halfYaw); + b3Scalar cosPitch = btCos(halfPitch); + b3Scalar sinPitch = btSin(halfPitch); + b3Scalar cosRoll = btCos(halfRoll); + b3Scalar sinRoll = btSin(halfRoll); setValue(cosRoll * sinPitch * cosYaw + sinRoll * cosPitch * sinYaw, cosRoll * cosPitch * sinYaw - sinRoll * sinPitch * cosYaw, sinRoll * cosPitch * cosYaw - cosRoll * sinPitch * sinYaw, @@ -130,17 +130,17 @@ public: * @param yaw Angle around Z * @param pitch Angle around Y * @param roll Angle around X */ - void setEulerZYX(const btScalar& yaw, const btScalar& pitch, const btScalar& roll) + void setEulerZYX(const b3Scalar& yaw, const b3Scalar& pitch, const b3Scalar& roll) { - btScalar halfYaw = btScalar(yaw) * btScalar(0.5); - btScalar halfPitch = btScalar(pitch) * btScalar(0.5); - btScalar halfRoll = btScalar(roll) * btScalar(0.5); - btScalar cosYaw = btCos(halfYaw); - btScalar sinYaw = btSin(halfYaw); - btScalar cosPitch = btCos(halfPitch); - btScalar sinPitch = btSin(halfPitch); - btScalar cosRoll = btCos(halfRoll); - btScalar sinRoll = btSin(halfRoll); + b3Scalar halfYaw = b3Scalar(yaw) * b3Scalar(0.5); + b3Scalar halfPitch = b3Scalar(pitch) * b3Scalar(0.5); + b3Scalar halfRoll = b3Scalar(roll) * b3Scalar(0.5); + b3Scalar cosYaw = btCos(halfYaw); + b3Scalar sinYaw = btSin(halfYaw); + b3Scalar cosPitch = btCos(halfPitch); + b3Scalar sinPitch = btSin(halfPitch); + b3Scalar cosRoll = btCos(halfRoll); + b3Scalar sinRoll = btSin(halfRoll); setValue(sinRoll * cosPitch * cosYaw - cosRoll * sinPitch * sinYaw, //x cosRoll * sinPitch * cosYaw + sinRoll * cosPitch * sinYaw, //y cosRoll * cosPitch * sinYaw - sinRoll * sinPitch * cosYaw, //z @@ -148,7 +148,7 @@ public: } /**@brief Add two quaternions * @param q The quaternion to add to this one */ - SIMD_FORCE_INLINE btQuaternion& operator+=(const btQuaternion& q) + SIMD_FORCE_INLINE b3Quaternion& operator+=(const b3Quaternion& q) { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) mVec128 = _mm_add_ps(mVec128, q.mVec128); @@ -165,7 +165,7 @@ public: /**@brief Subtract out a quaternion * @param q The quaternion to subtract from this one */ - btQuaternion& operator-=(const btQuaternion& q) + b3Quaternion& operator-=(const b3Quaternion& q) { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) mVec128 = _mm_sub_ps(mVec128, q.mVec128); @@ -182,7 +182,7 @@ public: /**@brief Scale this quaternion * @param s The scalar to scale by */ - btQuaternion& operator*=(const btScalar& s) + b3Quaternion& operator*=(const b3Scalar& s) { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vs = _mm_load_ss(&s); // (S 0 0 0) @@ -202,7 +202,7 @@ public: /**@brief Multiply this quaternion by q on the right * @param q The other quaternion * Equivilant to this = this * q */ - btQuaternion& operator*=(const btQuaternion& q) + b3Quaternion& operator*=(const b3Quaternion& q) { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vQ2 = q.get128(); @@ -285,7 +285,7 @@ public: } /**@brief Return the dot product between this quaternion and another * @param q The other quaternion */ - btScalar dot(const btQuaternion& q) const + b3Scalar dot(const b3Quaternion& q) const { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vd; @@ -312,20 +312,20 @@ public: } /**@brief Return the length squared of the quaternion */ - btScalar length2() const + b3Scalar length2() const { return dot(*this); } /**@brief Return the length of the quaternion */ - btScalar length() const + b3Scalar length() const { return btSqrt(length2()); } /**@brief Normalize the quaternion * Such that x^2 + y^2 + z^2 +w^2 = 1 */ - btQuaternion& normalize() + b3Quaternion& normalize() { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vd; @@ -350,127 +350,127 @@ public: /**@brief Return a scaled version of this quaternion * @param s The scale factor */ - SIMD_FORCE_INLINE btQuaternion - operator*(const btScalar& s) const + SIMD_FORCE_INLINE b3Quaternion + operator*(const b3Scalar& s) const { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vs = _mm_load_ss(&s); // (S 0 0 0) vs = bt_pshufd_ps(vs, 0x00); // (S S S S) - return btQuaternion(_mm_mul_ps(mVec128, vs)); + return b3Quaternion(_mm_mul_ps(mVec128, vs)); #elif defined(BT_USE_NEON) - return btQuaternion(vmulq_n_f32(mVec128, s)); + return b3Quaternion(vmulq_n_f32(mVec128, s)); #else - return btQuaternion(getX() * s, getY() * s, getZ() * s, m_floats[3] * s); + return b3Quaternion(getX() * s, getY() * s, getZ() * s, m_floats[3] * s); #endif } /**@brief Return an inversely scaled versionof this quaternion * @param s The inverse scale factor */ - btQuaternion operator/(const btScalar& s) const + b3Quaternion operator/(const b3Scalar& s) const { - btAssert(s != btScalar(0.0)); - return *this * (btScalar(1.0) / s); + btAssert(s != b3Scalar(0.0)); + return *this * (b3Scalar(1.0) / s); } /**@brief Inversely scale this quaternion * @param s The scale factor */ - btQuaternion& operator/=(const btScalar& s) + b3Quaternion& operator/=(const b3Scalar& s) { - btAssert(s != btScalar(0.0)); - return *this *= btScalar(1.0) / s; + btAssert(s != b3Scalar(0.0)); + return *this *= b3Scalar(1.0) / s; } /**@brief Return a normalized version of this quaternion */ - btQuaternion normalized() const + b3Quaternion normalized() const { return *this / length(); } /**@brief Return the angle between this quaternion and the other * @param q The other quaternion */ - btScalar angle(const btQuaternion& q) const + b3Scalar angle(const b3Quaternion& q) const { - btScalar s = btSqrt(length2() * q.length2()); - btAssert(s != btScalar(0.0)); + b3Scalar s = btSqrt(length2() * q.length2()); + btAssert(s != b3Scalar(0.0)); return btAcos(dot(q) / s); } /**@brief Return the angle of rotation represented by this quaternion */ - btScalar getAngle() const + b3Scalar getAngle() const { - btScalar s = btScalar(2.) * btAcos(m_floats[3]); + b3Scalar s = b3Scalar(2.) * btAcos(m_floats[3]); return s; } /**@brief Return the axis of the rotation represented by this quaternion */ - btVector3 getAxis() const + b3Vector3 getAxis() const { - btScalar s_squared = 1.f-m_floats[3]*m_floats[3]; + b3Scalar s_squared = 1.f-m_floats[3]*m_floats[3]; - if (s_squared < btScalar(10.) * SIMD_EPSILON) //Check for divide by zero - return btVector3(1.0, 0.0, 0.0); // Arbitrary - btScalar s = 1.f/btSqrt(s_squared); - return btVector3(m_floats[0] * s, m_floats[1] * s, m_floats[2] * s); + if (s_squared < b3Scalar(10.) * SIMD_EPSILON) //Check for divide by zero + return b3Vector3(1.0, 0.0, 0.0); // Arbitrary + b3Scalar s = 1.f/btSqrt(s_squared); + return b3Vector3(m_floats[0] * s, m_floats[1] * s, m_floats[2] * s); } /**@brief Return the inverse of this quaternion */ - btQuaternion inverse() const + b3Quaternion inverse() const { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) - return btQuaternion(_mm_xor_ps(mVec128, vQInv)); + return b3Quaternion(_mm_xor_ps(mVec128, vQInv)); #elif defined(BT_USE_NEON) - return btQuaternion((btSimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)vQInv)); + return b3Quaternion((btSimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)vQInv)); #else - return btQuaternion(-m_floats[0], -m_floats[1], -m_floats[2], m_floats[3]); + return b3Quaternion(-m_floats[0], -m_floats[1], -m_floats[2], m_floats[3]); #endif } /**@brief Return the sum of this quaternion and the other * @param q2 The other quaternion */ - SIMD_FORCE_INLINE btQuaternion - operator+(const btQuaternion& q2) const + SIMD_FORCE_INLINE b3Quaternion + operator+(const b3Quaternion& q2) const { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) - return btQuaternion(_mm_add_ps(mVec128, q2.mVec128)); + return b3Quaternion(_mm_add_ps(mVec128, q2.mVec128)); #elif defined(BT_USE_NEON) - return btQuaternion(vaddq_f32(mVec128, q2.mVec128)); + return b3Quaternion(vaddq_f32(mVec128, q2.mVec128)); #else - const btQuaternion& q1 = *this; - return btQuaternion(q1.getX() + q2.getX(), q1.getY() + q2.getY(), q1.getZ() + q2.getZ(), q1.m_floats[3] + q2.m_floats[3]); + const b3Quaternion& q1 = *this; + return b3Quaternion(q1.getX() + q2.getX(), q1.getY() + q2.getY(), q1.getZ() + q2.getZ(), q1.m_floats[3] + q2.m_floats[3]); #endif } /**@brief Return the difference between this quaternion and the other * @param q2 The other quaternion */ - SIMD_FORCE_INLINE btQuaternion - operator-(const btQuaternion& q2) const + SIMD_FORCE_INLINE b3Quaternion + operator-(const b3Quaternion& q2) const { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) - return btQuaternion(_mm_sub_ps(mVec128, q2.mVec128)); + return b3Quaternion(_mm_sub_ps(mVec128, q2.mVec128)); #elif defined(BT_USE_NEON) - return btQuaternion(vsubq_f32(mVec128, q2.mVec128)); + return b3Quaternion(vsubq_f32(mVec128, q2.mVec128)); #else - const btQuaternion& q1 = *this; - return btQuaternion(q1.getX() - q2.getX(), q1.getY() - q2.getY(), q1.getZ() - q2.getZ(), q1.m_floats[3] - q2.m_floats[3]); + const b3Quaternion& q1 = *this; + return b3Quaternion(q1.getX() - q2.getX(), q1.getY() - q2.getY(), q1.getZ() - q2.getZ(), q1.m_floats[3] - q2.m_floats[3]); #endif } /**@brief Return the negative of this quaternion * This simply negates each element */ - SIMD_FORCE_INLINE btQuaternion operator-() const + SIMD_FORCE_INLINE b3Quaternion operator-() const { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) - return btQuaternion(_mm_xor_ps(mVec128, btvMzeroMask)); + return b3Quaternion(_mm_xor_ps(mVec128, btvMzeroMask)); #elif defined(BT_USE_NEON) - return btQuaternion((btSimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)btvMzeroMask) ); + return b3Quaternion((btSimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)btvMzeroMask) ); #else - const btQuaternion& q2 = *this; - return btQuaternion( - q2.getX(), - q2.getY(), - q2.getZ(), - q2.m_floats[3]); + const b3Quaternion& q2 = *this; + return b3Quaternion( - q2.getX(), - q2.getY(), - q2.getZ(), - q2.m_floats[3]); #endif } /**@todo document this and it's use */ - SIMD_FORCE_INLINE btQuaternion farthest( const btQuaternion& qd) const + SIMD_FORCE_INLINE b3Quaternion farthest( const b3Quaternion& qd) const { - btQuaternion diff,sum; + b3Quaternion diff,sum; diff = *this - qd; sum = *this + qd; if( diff.dot(diff) > sum.dot(sum) ) @@ -479,9 +479,9 @@ public: } /**@todo document this and it's use */ - SIMD_FORCE_INLINE btQuaternion nearest( const btQuaternion& qd) const + SIMD_FORCE_INLINE b3Quaternion nearest( const b3Quaternion& qd) const { - btQuaternion diff,sum; + b3Quaternion diff,sum; diff = *this - qd; sum = *this + qd; if( diff.dot(diff) < sum.dot(sum) ) @@ -494,23 +494,23 @@ public: * @param q The other quaternion to interpolate with * @param t The ratio between this and q to interpolate. If t = 0 the result is this, if t=1 the result is q. * Slerp interpolates assuming constant velocity. */ - btQuaternion slerp(const btQuaternion& q, const btScalar& t) const + b3Quaternion slerp(const b3Quaternion& q, const b3Scalar& t) const { - btScalar magnitude = btSqrt(length2() * q.length2()); - btAssert(magnitude > btScalar(0)); + b3Scalar magnitude = btSqrt(length2() * q.length2()); + btAssert(magnitude > b3Scalar(0)); - btScalar product = dot(q) / magnitude; - if (btFabs(product) < btScalar(1)) + b3Scalar product = dot(q) / magnitude; + if (btFabs(product) < b3Scalar(1)) { // Take care of long angle case see http://en.wikipedia.org/wiki/Slerp - const btScalar sign = (product < 0) ? btScalar(-1) : btScalar(1); + const b3Scalar sign = (product < 0) ? b3Scalar(-1) : b3Scalar(1); - const btScalar theta = btAcos(sign * product); - const btScalar s1 = btSin(sign * t * theta); - const btScalar d = btScalar(1.0) / btSin(theta); - const btScalar s0 = btSin((btScalar(1.0) - t) * theta); + const b3Scalar theta = btAcos(sign * product); + const b3Scalar s1 = btSin(sign * t * theta); + const b3Scalar d = b3Scalar(1.0) / btSin(theta); + const b3Scalar s0 = btSin((b3Scalar(1.0) - t) * theta); - return btQuaternion( + return b3Quaternion( (m_floats[0] * s0 + q.getX() * s1) * d, (m_floats[1] * s0 + q.getY() * s1) * d, (m_floats[2] * s0 + q.getZ() * s1) * d, @@ -522,13 +522,13 @@ public: } } - static const btQuaternion& getIdentity() + static const b3Quaternion& getIdentity() { - static const btQuaternion identityQuat(btScalar(0.),btScalar(0.),btScalar(0.),btScalar(1.)); + static const b3Quaternion identityQuat(b3Scalar(0.),b3Scalar(0.),b3Scalar(0.),b3Scalar(1.)); return identityQuat; } - SIMD_FORCE_INLINE const btScalar& getW() const { return m_floats[3]; } + SIMD_FORCE_INLINE const b3Scalar& getW() const { return m_floats[3]; } }; @@ -538,8 +538,8 @@ public: /**@brief Return the product of two quaternions */ -SIMD_FORCE_INLINE btQuaternion -operator*(const btQuaternion& q1, const btQuaternion& q2) +SIMD_FORCE_INLINE b3Quaternion +operator*(const b3Quaternion& q1, const b3Quaternion& q2) { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vQ1 = q1.get128(); @@ -570,7 +570,7 @@ operator*(const btQuaternion& q1, const btQuaternion& q2) A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element A0 = A0 + A1; // AB03 + AB12 - return btQuaternion(A0); + return b3Quaternion(A0); #elif defined(BT_USE_NEON) @@ -615,10 +615,10 @@ operator*(const btQuaternion& q1, const btQuaternion& q2) A1 = (btSimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)vPPPM); A0 = vaddq_f32(A0, A1); // AB03 + AB12 - return btQuaternion(A0); + return b3Quaternion(A0); #else - return btQuaternion( + return b3Quaternion( q1.getW() * q2.getX() + q1.getX() * q2.getW() + q1.getY() * q2.getZ() - q1.getZ() * q2.getY(), q1.getW() * q2.getY() + q1.getY() * q2.getW() + q1.getZ() * q2.getX() - q1.getX() * q2.getZ(), q1.getW() * q2.getZ() + q1.getZ() * q2.getW() + q1.getX() * q2.getY() - q1.getY() * q2.getX(), @@ -626,8 +626,8 @@ operator*(const btQuaternion& q1, const btQuaternion& q2) #endif } -SIMD_FORCE_INLINE btQuaternion -operator*(const btQuaternion& q, const btVector3& w) +SIMD_FORCE_INLINE b3Quaternion +operator*(const b3Quaternion& q, const b3Vector3& w) { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vQ1 = q.get128(); @@ -653,7 +653,7 @@ operator*(const btQuaternion& q, const btVector3& w) A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element A1 = A1 - A3; // AB123 = AB12 - AB3 - return btQuaternion(A1); + return b3Quaternion(A1); #elif defined(BT_USE_NEON) @@ -698,10 +698,10 @@ operator*(const btQuaternion& q, const btVector3& w) A1 = vsubq_f32(A1, A3); // AB123 = AB12 - AB3 - return btQuaternion(A1); + return b3Quaternion(A1); #else - return btQuaternion( + return b3Quaternion( q.getW() * w.getX() + q.getY() * w.getZ() - q.getZ() * w.getY(), q.getW() * w.getY() + q.getZ() * w.getX() - q.getX() * w.getZ(), q.getW() * w.getZ() + q.getX() * w.getY() - q.getY() * w.getX(), @@ -709,8 +709,8 @@ operator*(const btQuaternion& q, const btVector3& w) #endif } -SIMD_FORCE_INLINE btQuaternion -operator*(const btVector3& w, const btQuaternion& q) +SIMD_FORCE_INLINE b3Quaternion +operator*(const b3Vector3& w, const b3Quaternion& q) { #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vQ1 = w.get128(); @@ -736,7 +736,7 @@ operator*(const btVector3& w, const btQuaternion& q) A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element A1 = A1 - A3; // AB123 = AB12 - AB3 - return btQuaternion(A1); + return b3Quaternion(A1); #elif defined(BT_USE_NEON) @@ -781,10 +781,10 @@ operator*(const btVector3& w, const btQuaternion& q) A1 = vsubq_f32(A1, A3); // AB123 = AB12 - AB3 - return btQuaternion(A1); + return b3Quaternion(A1); #else - return btQuaternion( + return b3Quaternion( +w.getX() * q.getW() + w.getY() * q.getZ() - w.getZ() * q.getY(), +w.getY() * q.getW() + w.getZ() * q.getX() - w.getX() * q.getZ(), +w.getZ() * q.getW() + w.getX() * q.getY() - w.getY() * q.getX(), @@ -793,30 +793,30 @@ operator*(const btVector3& w, const btQuaternion& q) } /**@brief Calculate the dot product between two quaternions */ -SIMD_FORCE_INLINE btScalar -dot(const btQuaternion& q1, const btQuaternion& q2) +SIMD_FORCE_INLINE b3Scalar +dot(const b3Quaternion& q1, const b3Quaternion& q2) { return q1.dot(q2); } /**@brief Return the length of a quaternion */ -SIMD_FORCE_INLINE btScalar -length(const btQuaternion& q) +SIMD_FORCE_INLINE b3Scalar +length(const b3Quaternion& q) { return q.length(); } /**@brief Return the angle between two quaternions*/ -SIMD_FORCE_INLINE btScalar -btAngle(const btQuaternion& q1, const btQuaternion& q2) +SIMD_FORCE_INLINE b3Scalar +btAngle(const b3Quaternion& q1, const b3Quaternion& q2) { return q1.angle(q2); } /**@brief Return the inverse of a quaternion*/ -SIMD_FORCE_INLINE btQuaternion -inverse(const btQuaternion& q) +SIMD_FORCE_INLINE b3Quaternion +inverse(const b3Quaternion& q) { return q.inverse(); } @@ -826,47 +826,47 @@ inverse(const btQuaternion& q) * @param q2 The second quaternion * @param t The ration between q1 and q2. t = 0 return q1, t=1 returns q2 * Slerp assumes constant velocity between positions. */ -SIMD_FORCE_INLINE btQuaternion -slerp(const btQuaternion& q1, const btQuaternion& q2, const btScalar& t) +SIMD_FORCE_INLINE b3Quaternion +slerp(const b3Quaternion& q1, const b3Quaternion& q2, const b3Scalar& t) { return q1.slerp(q2, t); } -SIMD_FORCE_INLINE btVector3 -quatRotate(const btQuaternion& rotation, const btVector3& v) +SIMD_FORCE_INLINE b3Vector3 +quatRotate(const b3Quaternion& rotation, const b3Vector3& v) { - btQuaternion q = rotation * v; + b3Quaternion q = rotation * v; q *= rotation.inverse(); #if defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) - return btVector3(_mm_and_ps(q.get128(), btvFFF0fMask)); + return b3Vector3(_mm_and_ps(q.get128(), btvFFF0fMask)); #elif defined(BT_USE_NEON) - return btVector3((float32x4_t)vandq_s32((int32x4_t)q.get128(), btvFFF0Mask)); + return b3Vector3((float32x4_t)vandq_s32((int32x4_t)q.get128(), btvFFF0Mask)); #else - return btVector3(q.getX(),q.getY(),q.getZ()); + return b3Vector3(q.getX(),q.getY(),q.getZ()); #endif } -SIMD_FORCE_INLINE btQuaternion -shortestArcQuat(const btVector3& v0, const btVector3& v1) // Game Programming Gems 2.10. make sure v0,v1 are normalized +SIMD_FORCE_INLINE b3Quaternion +shortestArcQuat(const b3Vector3& v0, const b3Vector3& v1) // Game Programming Gems 2.10. make sure v0,v1 are normalized { - btVector3 c = v0.cross(v1); - btScalar d = v0.dot(v1); + b3Vector3 c = v0.cross(v1); + b3Scalar d = v0.dot(v1); if (d < -1.0 + SIMD_EPSILON) { - btVector3 n,unused; + b3Vector3 n,unused; btPlaneSpace1(v0,n,unused); - return btQuaternion(n.getX(),n.getY(),n.getZ(),0.0f); // just pick any vector that is orthogonal to v0 + return b3Quaternion(n.getX(),n.getY(),n.getZ(),0.0f); // just pick any vector that is orthogonal to v0 } - btScalar s = btSqrt((1.0f + d) * 2.0f); - btScalar rs = 1.0f / s; + b3Scalar s = btSqrt((1.0f + d) * 2.0f); + b3Scalar rs = 1.0f / s; - return btQuaternion(c.getX()*rs,c.getY()*rs,c.getZ()*rs,s * 0.5f); + return b3Quaternion(c.getX()*rs,c.getY()*rs,c.getZ()*rs,s * 0.5f); } -SIMD_FORCE_INLINE btQuaternion -shortestArcQuatNormalize2(btVector3& v0,btVector3& v1) +SIMD_FORCE_INLINE b3Quaternion +shortestArcQuatNormalize2(b3Vector3& v0,b3Vector3& v1) { v0.normalize(); v1.normalize(); diff --git a/src/BulletCommon/btQuickprof.cpp b/src/BulletCommon/b3Quickprof.cpp similarity index 99% rename from src/BulletCommon/btQuickprof.cpp rename to src/BulletCommon/b3Quickprof.cpp index 544aee89d..7bc2fed98 100644 --- a/src/BulletCommon/btQuickprof.cpp +++ b/src/BulletCommon/b3Quickprof.cpp @@ -13,7 +13,7 @@ // Credits: The Clock class was inspired by the Timer classes in // Ogre (www.ogre3d.org). -#include "btQuickprof.h" +#include "b3Quickprof.h" #ifndef BT_NO_PROFILE diff --git a/src/BulletCommon/btQuickprof.h b/src/BulletCommon/b3Quickprof.h similarity index 98% rename from src/BulletCommon/btQuickprof.h rename to src/BulletCommon/b3Quickprof.h index 93f3f4a60..7dfdf5d98 100644 --- a/src/BulletCommon/btQuickprof.h +++ b/src/BulletCommon/b3Quickprof.h @@ -19,8 +19,8 @@ //#define BT_NO_PROFILE 1 #ifndef BT_NO_PROFILE #include //@todo remove this, backwards compatibility -#include "btScalar.h" -#include "btAlignedAllocator.h" +#include "b3Scalar.h" +#include "b3AlignedAllocator.h" #include diff --git a/src/BulletCommon/btRandom.h b/src/BulletCommon/b3Random.h similarity index 100% rename from src/BulletCommon/btRandom.h rename to src/BulletCommon/b3Random.h diff --git a/src/BulletCommon/btScalar.h b/src/BulletCommon/b3Scalar.h similarity index 82% rename from src/BulletCommon/btScalar.h rename to src/BulletCommon/b3Scalar.h index 3a94054e9..25c3a83a6 100644 --- a/src/BulletCommon/btScalar.h +++ b/src/BulletCommon/b3Scalar.h @@ -249,13 +249,13 @@ inline int btGetVersion() #endif -///The btScalar type abstracts floating point numbers, to easily switch between double and single floating point precision. +///The b3Scalar type abstracts floating point numbers, to easily switch between double and single floating point precision. #if defined(BT_USE_DOUBLE_PRECISION) -typedef double btScalar; +typedef double b3Scalar; //this number could be bigger in double precision #define BT_LARGE_FLOAT 1e30 #else -typedef float btScalar; +typedef float b3Scalar; //keep BT_LARGE_FLOAT*BT_LARGE_FLOAT < FLT_MAX #define BT_LARGE_FLOAT 1e18f #endif @@ -339,23 +339,23 @@ typedef float32x4_t btSimdFloat4; #if defined(BT_USE_DOUBLE_PRECISION) || defined(BT_FORCE_DOUBLE_FUNCTIONS) -SIMD_FORCE_INLINE btScalar btSqrt(btScalar x) { return sqrt(x); } -SIMD_FORCE_INLINE btScalar btFabs(btScalar x) { return fabs(x); } -SIMD_FORCE_INLINE btScalar btCos(btScalar x) { return cos(x); } -SIMD_FORCE_INLINE btScalar btSin(btScalar x) { return sin(x); } -SIMD_FORCE_INLINE btScalar btTan(btScalar x) { return tan(x); } -SIMD_FORCE_INLINE btScalar btAcos(btScalar x) { if (xbtScalar(1)) x=btScalar(1); return acos(x); } -SIMD_FORCE_INLINE btScalar btAsin(btScalar x) { if (xbtScalar(1)) x=btScalar(1); return asin(x); } -SIMD_FORCE_INLINE btScalar btAtan(btScalar x) { return atan(x); } -SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y) { return atan2(x, y); } -SIMD_FORCE_INLINE btScalar btExp(btScalar x) { return exp(x); } -SIMD_FORCE_INLINE btScalar btLog(btScalar x) { return log(x); } -SIMD_FORCE_INLINE btScalar btPow(btScalar x,btScalar y) { return pow(x,y); } -SIMD_FORCE_INLINE btScalar btFmod(btScalar x,btScalar y) { return fmod(x,y); } +SIMD_FORCE_INLINE b3Scalar btSqrt(b3Scalar x) { return sqrt(x); } +SIMD_FORCE_INLINE b3Scalar btFabs(b3Scalar x) { return fabs(x); } +SIMD_FORCE_INLINE b3Scalar btCos(b3Scalar x) { return cos(x); } +SIMD_FORCE_INLINE b3Scalar btSin(b3Scalar x) { return sin(x); } +SIMD_FORCE_INLINE b3Scalar btTan(b3Scalar x) { return tan(x); } +SIMD_FORCE_INLINE b3Scalar btAcos(b3Scalar x) { if (xb3Scalar(1)) x=b3Scalar(1); return acos(x); } +SIMD_FORCE_INLINE b3Scalar btAsin(b3Scalar x) { if (xb3Scalar(1)) x=b3Scalar(1); return asin(x); } +SIMD_FORCE_INLINE b3Scalar btAtan(b3Scalar x) { return atan(x); } +SIMD_FORCE_INLINE b3Scalar btAtan2(b3Scalar x, b3Scalar y) { return atan2(x, y); } +SIMD_FORCE_INLINE b3Scalar btExp(b3Scalar x) { return exp(x); } +SIMD_FORCE_INLINE b3Scalar btLog(b3Scalar x) { return log(x); } +SIMD_FORCE_INLINE b3Scalar btPow(b3Scalar x,b3Scalar y) { return pow(x,y); } +SIMD_FORCE_INLINE b3Scalar btFmod(b3Scalar x,b3Scalar y) { return fmod(x,y); } #else -SIMD_FORCE_INLINE btScalar btSqrt(btScalar y) +SIMD_FORCE_INLINE b3Scalar btSqrt(b3Scalar y) { #ifdef USE_APPROXIMATION double x, z, tempf; @@ -364,52 +364,52 @@ SIMD_FORCE_INLINE btScalar btSqrt(btScalar y) tempf = y; *tfptr = (0xbfcdd90a - *tfptr)>>1; /* estimate of 1/sqrt(y) */ x = tempf; - z = y*btScalar(0.5); - x = (btScalar(1.5)*x)-(x*x)*(x*z); /* iteration formula */ - x = (btScalar(1.5)*x)-(x*x)*(x*z); - x = (btScalar(1.5)*x)-(x*x)*(x*z); - x = (btScalar(1.5)*x)-(x*x)*(x*z); - x = (btScalar(1.5)*x)-(x*x)*(x*z); + z = y*b3Scalar(0.5); + x = (b3Scalar(1.5)*x)-(x*x)*(x*z); /* iteration formula */ + x = (b3Scalar(1.5)*x)-(x*x)*(x*z); + x = (b3Scalar(1.5)*x)-(x*x)*(x*z); + x = (b3Scalar(1.5)*x)-(x*x)*(x*z); + x = (b3Scalar(1.5)*x)-(x*x)*(x*z); return x*y; #else return sqrtf(y); #endif } -SIMD_FORCE_INLINE btScalar btFabs(btScalar x) { return fabsf(x); } -SIMD_FORCE_INLINE btScalar btCos(btScalar x) { return cosf(x); } -SIMD_FORCE_INLINE btScalar btSin(btScalar x) { return sinf(x); } -SIMD_FORCE_INLINE btScalar btTan(btScalar x) { return tanf(x); } -SIMD_FORCE_INLINE btScalar btAcos(btScalar x) { - if (xbtScalar(1)) - x=btScalar(1); +SIMD_FORCE_INLINE b3Scalar btFabs(b3Scalar x) { return fabsf(x); } +SIMD_FORCE_INLINE b3Scalar btCos(b3Scalar x) { return cosf(x); } +SIMD_FORCE_INLINE b3Scalar btSin(b3Scalar x) { return sinf(x); } +SIMD_FORCE_INLINE b3Scalar btTan(b3Scalar x) { return tanf(x); } +SIMD_FORCE_INLINE b3Scalar btAcos(b3Scalar x) { + if (xb3Scalar(1)) + x=b3Scalar(1); return acosf(x); } -SIMD_FORCE_INLINE btScalar btAsin(btScalar x) { - if (xbtScalar(1)) - x=btScalar(1); +SIMD_FORCE_INLINE b3Scalar btAsin(b3Scalar x) { + if (xb3Scalar(1)) + x=b3Scalar(1); return asinf(x); } -SIMD_FORCE_INLINE btScalar btAtan(btScalar x) { return atanf(x); } -SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y) { return atan2f(x, y); } -SIMD_FORCE_INLINE btScalar btExp(btScalar x) { return expf(x); } -SIMD_FORCE_INLINE btScalar btLog(btScalar x) { return logf(x); } -SIMD_FORCE_INLINE btScalar btPow(btScalar x,btScalar y) { return powf(x,y); } -SIMD_FORCE_INLINE btScalar btFmod(btScalar x,btScalar y) { return fmodf(x,y); } +SIMD_FORCE_INLINE b3Scalar btAtan(b3Scalar x) { return atanf(x); } +SIMD_FORCE_INLINE b3Scalar btAtan2(b3Scalar x, b3Scalar y) { return atan2f(x, y); } +SIMD_FORCE_INLINE b3Scalar btExp(b3Scalar x) { return expf(x); } +SIMD_FORCE_INLINE b3Scalar btLog(b3Scalar x) { return logf(x); } +SIMD_FORCE_INLINE b3Scalar btPow(b3Scalar x,b3Scalar y) { return powf(x,y); } +SIMD_FORCE_INLINE b3Scalar btFmod(b3Scalar x,b3Scalar y) { return fmodf(x,y); } #endif -#define SIMD_2_PI btScalar(6.283185307179586232) -#define SIMD_PI (SIMD_2_PI * btScalar(0.5)) -#define SIMD_HALF_PI (SIMD_2_PI * btScalar(0.25)) -#define SIMD_RADS_PER_DEG (SIMD_2_PI / btScalar(360.0)) -#define SIMD_DEGS_PER_RAD (btScalar(360.0) / SIMD_2_PI) -#define SIMDSQRT12 btScalar(0.7071067811865475244008443621048490) +#define SIMD_2_PI b3Scalar(6.283185307179586232) +#define SIMD_PI (SIMD_2_PI * b3Scalar(0.5)) +#define SIMD_HALF_PI (SIMD_2_PI * b3Scalar(0.25)) +#define SIMD_RADS_PER_DEG (SIMD_2_PI / b3Scalar(360.0)) +#define SIMD_DEGS_PER_RAD (b3Scalar(360.0) / SIMD_2_PI) +#define SIMDSQRT12 b3Scalar(0.7071067811865475244008443621048490) -#define btRecipSqrt(x) ((btScalar)(btScalar(1.0)/btSqrt(btScalar(x)))) /* reciprocal square root */ +#define btRecipSqrt(x) ((b3Scalar)(b3Scalar(1.0)/btSqrt(b3Scalar(x)))) /* reciprocal square root */ #ifdef BT_USE_DOUBLE_PRECISION @@ -420,48 +420,48 @@ SIMD_FORCE_INLINE btScalar btFmod(btScalar x,btScalar y) { return fmodf(x,y); } #define SIMD_INFINITY FLT_MAX #endif -SIMD_FORCE_INLINE btScalar btAtan2Fast(btScalar y, btScalar x) +SIMD_FORCE_INLINE b3Scalar btAtan2Fast(b3Scalar y, b3Scalar x) { - btScalar coeff_1 = SIMD_PI / 4.0f; - btScalar coeff_2 = 3.0f * coeff_1; - btScalar abs_y = btFabs(y); - btScalar angle; + b3Scalar coeff_1 = SIMD_PI / 4.0f; + b3Scalar coeff_2 = 3.0f * coeff_1; + b3Scalar abs_y = btFabs(y); + b3Scalar angle; if (x >= 0.0f) { - btScalar r = (x - abs_y) / (x + abs_y); + b3Scalar r = (x - abs_y) / (x + abs_y); angle = coeff_1 - coeff_1 * r; } else { - btScalar r = (x + abs_y) / (abs_y - x); + b3Scalar r = (x + abs_y) / (abs_y - x); angle = coeff_2 - coeff_1 * r; } return (y < 0.0f) ? -angle : angle; } -SIMD_FORCE_INLINE bool btFuzzyZero(btScalar x) { return btFabs(x) < SIMD_EPSILON; } +SIMD_FORCE_INLINE bool btFuzzyZero(b3Scalar x) { return btFabs(x) < SIMD_EPSILON; } -SIMD_FORCE_INLINE bool btEqual(btScalar a, btScalar eps) { +SIMD_FORCE_INLINE bool btEqual(b3Scalar a, b3Scalar eps) { return (((a) <= eps) && !((a) < -eps)); } -SIMD_FORCE_INLINE bool btGreaterEqual (btScalar a, btScalar eps) { +SIMD_FORCE_INLINE bool btGreaterEqual (b3Scalar a, b3Scalar eps) { return (!((a) <= eps)); } -SIMD_FORCE_INLINE int btIsNegative(btScalar x) { - return x < btScalar(0.0) ? 1 : 0; +SIMD_FORCE_INLINE int btIsNegative(b3Scalar x) { + return x < b3Scalar(0.0) ? 1 : 0; } -SIMD_FORCE_INLINE btScalar btRadians(btScalar x) { return x * SIMD_RADS_PER_DEG; } -SIMD_FORCE_INLINE btScalar btDegrees(btScalar x) { return x * SIMD_DEGS_PER_RAD; } +SIMD_FORCE_INLINE b3Scalar btRadians(b3Scalar x) { return x * SIMD_RADS_PER_DEG; } +SIMD_FORCE_INLINE b3Scalar btDegrees(b3Scalar x) { return x * SIMD_DEGS_PER_RAD; } #define BT_DECLARE_HANDLE(name) typedef struct name##__ { int unused; } *name #ifndef btFsel -SIMD_FORCE_INLINE btScalar btFsel(btScalar a, btScalar b, btScalar c) +SIMD_FORCE_INLINE b3Scalar btFsel(b3Scalar a, b3Scalar b, b3Scalar c) { return a >= 0 ? b : c; } #endif -#define btFsels(a,b,c) (btScalar)btFsel(a,b,c) +#define btFsels(a,b,c) (b3Scalar)btFsel(a,b,c) SIMD_FORCE_INLINE bool btMachineIsLittleEndian() @@ -497,7 +497,7 @@ SIMD_FORCE_INLINE int btSelect(unsigned condition, int valueIfConditionNonZero, SIMD_FORCE_INLINE float btSelect(unsigned condition, float valueIfConditionNonZero, float valueIfConditionZero) { #ifdef BT_HAVE_NATIVE_FSEL - return (float)btFsel((btScalar)condition - btScalar(1.0f), valueIfConditionNonZero, valueIfConditionZero); + return (float)btFsel((b3Scalar)condition - b3Scalar(1.0f), valueIfConditionNonZero, valueIfConditionZero); #else return (condition != 0) ? valueIfConditionNonZero : valueIfConditionZero; #endif @@ -602,7 +602,7 @@ SIMD_FORCE_INLINE double btUnswapEndianDouble(const unsigned char *src) } // returns normalized value in range [-SIMD_PI, SIMD_PI] -SIMD_FORCE_INLINE btScalar btNormalizeAngle(btScalar angleInRadians) +SIMD_FORCE_INLINE b3Scalar btNormalizeAngle(b3Scalar angleInRadians) { angleInRadians = btFmod(angleInRadians, SIMD_2_PI); if(angleInRadians < -SIMD_PI) diff --git a/src/BulletCommon/btStackAlloc.h b/src/BulletCommon/b3StackAlloc.h similarity index 91% rename from src/BulletCommon/btStackAlloc.h rename to src/BulletCommon/b3StackAlloc.h index 397b08487..00f75593f 100644 --- a/src/BulletCommon/btStackAlloc.h +++ b/src/BulletCommon/b3StackAlloc.h @@ -20,10 +20,10 @@ Nov.2006 #ifndef BT_STACK_ALLOC #define BT_STACK_ALLOC -#include "btScalar.h" //for btAssert -#include "btAlignedAllocator.h" +#include "b3Scalar.h" //for btAssert +#include "b3AlignedAllocator.h" -///The btBlock class is an internal structure for the btStackAlloc memory allocator. +///The btBlock class is an internal structure for the b3StackAlloc memory allocator. struct btBlock { btBlock* previous; @@ -31,12 +31,12 @@ struct btBlock }; ///The StackAlloc class provides some fast stack-based memory allocator (LIFO last-in first-out) -class btStackAlloc +class b3StackAlloc { public: - btStackAlloc(unsigned int size) { ctor();create(size); } - ~btStackAlloc() { destroy(); } + b3StackAlloc(unsigned int size) { ctor();create(size); } + ~b3StackAlloc() { destroy(); } inline void create(unsigned int size) { diff --git a/src/BulletCommon/btTransform.h b/src/BulletCommon/b3Transform.h similarity index 62% rename from src/BulletCommon/btTransform.h rename to src/BulletCommon/b3Transform.h index 0744b5647..90284fa62 100644 --- a/src/BulletCommon/btTransform.h +++ b/src/BulletCommon/b3Transform.h @@ -18,7 +18,7 @@ subject to the following restrictions: #define BT_TRANSFORM_H -#include "btMatrix3x3.h" +#include "b3Matrix3x3.h" #ifdef BT_USE_DOUBLE_PRECISION #define btTransformData btTransformDoubleData @@ -29,44 +29,44 @@ subject to the following restrictions: -/**@brief The btTransform class supports rigid transforms with only translation and rotation and no scaling/shear. - *It can be used in combination with btVector3, btQuaternion and btMatrix3x3 linear algebra classes. */ -ATTRIBUTE_ALIGNED16(class) btTransform { +/**@brief The b3Transform class supports rigid transforms with only translation and rotation and no scaling/shear. + *It can be used in combination with b3Vector3, b3Quaternion and b3Matrix3x3 linear algebra classes. */ +ATTRIBUTE_ALIGNED16(class) b3Transform { ///Storage for the rotation - btMatrix3x3 m_basis; + b3Matrix3x3 m_basis; ///Storage for the translation - btVector3 m_origin; + b3Vector3 m_origin; public: /**@brief No initialization constructor */ - btTransform() {} - /**@brief Constructor from btQuaternion (optional btVector3 ) + b3Transform() {} + /**@brief Constructor from b3Quaternion (optional b3Vector3 ) * @param q Rotation from quaternion * @param c Translation from Vector (default 0,0,0) */ - explicit SIMD_FORCE_INLINE btTransform(const btQuaternion& q, - const btVector3& c = btVector3(btScalar(0), btScalar(0), btScalar(0))) + explicit SIMD_FORCE_INLINE b3Transform(const b3Quaternion& q, + const b3Vector3& c = b3Vector3(b3Scalar(0), b3Scalar(0), b3Scalar(0))) : m_basis(q), m_origin(c) {} - /**@brief Constructor from btMatrix3x3 (optional btVector3) + /**@brief Constructor from b3Matrix3x3 (optional b3Vector3) * @param b Rotation from Matrix * @param c Translation from Vector default (0,0,0)*/ - explicit SIMD_FORCE_INLINE btTransform(const btMatrix3x3& b, - const btVector3& c = btVector3(btScalar(0), btScalar(0), btScalar(0))) + explicit SIMD_FORCE_INLINE b3Transform(const b3Matrix3x3& b, + const b3Vector3& c = b3Vector3(b3Scalar(0), b3Scalar(0), b3Scalar(0))) : m_basis(b), m_origin(c) {} /**@brief Copy constructor */ - SIMD_FORCE_INLINE btTransform (const btTransform& other) + SIMD_FORCE_INLINE b3Transform (const b3Transform& other) : m_basis(other.m_basis), m_origin(other.m_origin) { } /**@brief Assignment Operator */ - SIMD_FORCE_INLINE btTransform& operator=(const btTransform& other) + SIMD_FORCE_INLINE b3Transform& operator=(const b3Transform& other) { m_basis = other.m_basis; m_origin = other.m_origin; @@ -78,49 +78,49 @@ public: * @param t1 Transform 1 * @param t2 Transform 2 * This = Transform1 * Transform2 */ - SIMD_FORCE_INLINE void mult(const btTransform& t1, const btTransform& t2) { + SIMD_FORCE_INLINE void mult(const b3Transform& t1, const b3Transform& t2) { m_basis = t1.m_basis * t2.m_basis; m_origin = t1(t2.m_origin); } -/* void multInverseLeft(const btTransform& t1, const btTransform& t2) { - btVector3 v = t2.m_origin - t1.m_origin; +/* void multInverseLeft(const b3Transform& t1, const b3Transform& t2) { + b3Vector3 v = t2.m_origin - t1.m_origin; m_basis = btMultTransposeLeft(t1.m_basis, t2.m_basis); m_origin = v * t1.m_basis; } */ /**@brief Return the transform of the vector */ - SIMD_FORCE_INLINE btVector3 operator()(const btVector3& x) const + SIMD_FORCE_INLINE b3Vector3 operator()(const b3Vector3& x) const { return x.dot3(m_basis[0], m_basis[1], m_basis[2]) + m_origin; } /**@brief Return the transform of the vector */ - SIMD_FORCE_INLINE btVector3 operator*(const btVector3& x) const + SIMD_FORCE_INLINE b3Vector3 operator*(const b3Vector3& x) const { return (*this)(x); } - /**@brief Return the transform of the btQuaternion */ - SIMD_FORCE_INLINE btQuaternion operator*(const btQuaternion& q) const + /**@brief Return the transform of the b3Quaternion */ + SIMD_FORCE_INLINE b3Quaternion operator*(const b3Quaternion& q) const { return getRotation() * q; } /**@brief Return the basis matrix for the rotation */ - SIMD_FORCE_INLINE btMatrix3x3& getBasis() { return m_basis; } + SIMD_FORCE_INLINE b3Matrix3x3& getBasis() { return m_basis; } /**@brief Return the basis matrix for the rotation */ - SIMD_FORCE_INLINE const btMatrix3x3& getBasis() const { return m_basis; } + SIMD_FORCE_INLINE const b3Matrix3x3& getBasis() const { return m_basis; } /**@brief Return the origin vector translation */ - SIMD_FORCE_INLINE btVector3& getOrigin() { return m_origin; } + SIMD_FORCE_INLINE b3Vector3& getOrigin() { return m_origin; } /**@brief Return the origin vector translation */ - SIMD_FORCE_INLINE const btVector3& getOrigin() const { return m_origin; } + SIMD_FORCE_INLINE const b3Vector3& getOrigin() const { return m_origin; } /**@brief Return a quaternion representing the rotation */ - btQuaternion getRotation() const { - btQuaternion q; + b3Quaternion getRotation() const { + b3Quaternion q; m_basis.getRotation(q); return q; } @@ -128,7 +128,7 @@ public: /**@brief Set from an array * @param m A pointer to a 15 element array (12 rotation(row major padded on the right by 1), and 3 translation */ - void setFromOpenGLMatrix(const btScalar *m) + void setFromOpenGLMatrix(const b3Scalar *m) { m_basis.setFromOpenGLSubMatrix(m); m_origin.setValue(m[12],m[13],m[14]); @@ -136,33 +136,33 @@ public: /**@brief Fill an array representation * @param m A pointer to a 15 element array (12 rotation(row major padded on the right by 1), and 3 translation */ - void getOpenGLMatrix(btScalar *m) const + void getOpenGLMatrix(b3Scalar *m) const { m_basis.getOpenGLSubMatrix(m); m[12] = m_origin.getX(); m[13] = m_origin.getY(); m[14] = m_origin.getZ(); - m[15] = btScalar(1.0); + m[15] = b3Scalar(1.0); } /**@brief Set the translational element * @param origin The vector to set the translation to */ - SIMD_FORCE_INLINE void setOrigin(const btVector3& origin) + SIMD_FORCE_INLINE void setOrigin(const b3Vector3& origin) { m_origin = origin; } - SIMD_FORCE_INLINE btVector3 invXform(const btVector3& inVec) const; + SIMD_FORCE_INLINE b3Vector3 invXform(const b3Vector3& inVec) const; - /**@brief Set the rotational element by btMatrix3x3 */ - SIMD_FORCE_INLINE void setBasis(const btMatrix3x3& basis) + /**@brief Set the rotational element by b3Matrix3x3 */ + SIMD_FORCE_INLINE void setBasis(const b3Matrix3x3& basis) { m_basis = basis; } - /**@brief Set the rotational element by btQuaternion */ - SIMD_FORCE_INLINE void setRotation(const btQuaternion& q) + /**@brief Set the rotational element by b3Quaternion */ + SIMD_FORCE_INLINE void setRotation(const b3Quaternion& q) { m_basis.setRotation(q); } @@ -172,12 +172,12 @@ public: void setIdentity() { m_basis.setIdentity(); - m_origin.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0)); + m_origin.setValue(b3Scalar(0.0), b3Scalar(0.0), b3Scalar(0.0)); } /**@brief Multiply this Transform by another(this = this * another) * @param t The other transform */ - btTransform& operator*=(const btTransform& t) + b3Transform& operator*=(const b3Transform& t) { m_origin += m_basis * t.m_origin; m_basis *= t.m_basis; @@ -185,24 +185,24 @@ public: } /**@brief Return the inverse of this transform */ - btTransform inverse() const + b3Transform inverse() const { - btMatrix3x3 inv = m_basis.transpose(); - return btTransform(inv, inv * -m_origin); + b3Matrix3x3 inv = m_basis.transpose(); + return b3Transform(inv, inv * -m_origin); } /**@brief Return the inverse of this transform times the other transform * @param t The other transform * return this.inverse() * the other */ - btTransform inverseTimes(const btTransform& t) const; + b3Transform inverseTimes(const b3Transform& t) const; /**@brief Return the product of this transform and the other */ - btTransform operator*(const btTransform& t) const; + b3Transform operator*(const b3Transform& t) const; /**@brief Return an identity transform */ - static const btTransform& getIdentity() + static const b3Transform& getIdentity() { - static const btTransform identityTransform(btMatrix3x3::getIdentity()); + static const b3Transform identityTransform(b3Matrix3x3::getIdentity()); return identityTransform; } @@ -219,30 +219,30 @@ public: }; -SIMD_FORCE_INLINE btVector3 -btTransform::invXform(const btVector3& inVec) const +SIMD_FORCE_INLINE b3Vector3 +b3Transform::invXform(const b3Vector3& inVec) const { - btVector3 v = inVec - m_origin; + b3Vector3 v = inVec - m_origin; return (m_basis.transpose() * v); } -SIMD_FORCE_INLINE btTransform -btTransform::inverseTimes(const btTransform& t) const +SIMD_FORCE_INLINE b3Transform +b3Transform::inverseTimes(const b3Transform& t) const { - btVector3 v = t.getOrigin() - m_origin; - return btTransform(m_basis.transposeTimes(t.m_basis), + b3Vector3 v = t.getOrigin() - m_origin; + return b3Transform(m_basis.transposeTimes(t.m_basis), v * m_basis); } -SIMD_FORCE_INLINE btTransform -btTransform::operator*(const btTransform& t) const +SIMD_FORCE_INLINE b3Transform +b3Transform::operator*(const b3Transform& t) const { - return btTransform(m_basis * t.m_basis, + return b3Transform(m_basis * t.m_basis, (*this)(t.m_origin)); } /**@brief Test if two transforms have all elements equal */ -SIMD_FORCE_INLINE bool operator==(const btTransform& t1, const btTransform& t2) +SIMD_FORCE_INLINE bool operator==(const b3Transform& t1, const b3Transform& t2) { return ( t1.getBasis() == t2.getBasis() && t1.getOrigin() == t2.getOrigin() ); @@ -264,32 +264,32 @@ struct btTransformDoubleData -SIMD_FORCE_INLINE void btTransform::serialize(btTransformData& dataOut) const +SIMD_FORCE_INLINE void b3Transform::serialize(btTransformData& dataOut) const { m_basis.serialize(dataOut.m_basis); m_origin.serialize(dataOut.m_origin); } -SIMD_FORCE_INLINE void btTransform::serializeFloat(btTransformFloatData& dataOut) const +SIMD_FORCE_INLINE void b3Transform::serializeFloat(btTransformFloatData& dataOut) const { m_basis.serializeFloat(dataOut.m_basis); m_origin.serializeFloat(dataOut.m_origin); } -SIMD_FORCE_INLINE void btTransform::deSerialize(const btTransformData& dataIn) +SIMD_FORCE_INLINE void b3Transform::deSerialize(const btTransformData& dataIn) { m_basis.deSerialize(dataIn.m_basis); m_origin.deSerialize(dataIn.m_origin); } -SIMD_FORCE_INLINE void btTransform::deSerializeFloat(const btTransformFloatData& dataIn) +SIMD_FORCE_INLINE void b3Transform::deSerializeFloat(const btTransformFloatData& dataIn) { m_basis.deSerializeFloat(dataIn.m_basis); m_origin.deSerializeFloat(dataIn.m_origin); } -SIMD_FORCE_INLINE void btTransform::deSerializeDouble(const btTransformDoubleData& dataIn) +SIMD_FORCE_INLINE void b3Transform::deSerializeDouble(const btTransformDoubleData& dataIn) { m_basis.deSerializeDouble(dataIn.m_basis); m_origin.deSerializeDouble(dataIn.m_origin); diff --git a/src/BulletCommon/b3TransformUtil.h b/src/BulletCommon/b3TransformUtil.h new file mode 100644 index 000000000..99df37791 --- /dev/null +++ b/src/BulletCommon/b3TransformUtil.h @@ -0,0 +1,228 @@ +/* +Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ + +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. +*/ + + +#ifndef BT_TRANSFORM_UTIL_H +#define BT_TRANSFORM_UTIL_H + +#include "b3Transform.h" +#define ANGULAR_MOTION_THRESHOLD b3Scalar(0.5)*SIMD_HALF_PI + + + + +SIMD_FORCE_INLINE b3Vector3 btAabbSupport(const b3Vector3& halfExtents,const b3Vector3& supportDir) +{ + return b3Vector3(supportDir.getX() < b3Scalar(0.0) ? -halfExtents.getX() : halfExtents.getX(), + supportDir.getY() < b3Scalar(0.0) ? -halfExtents.getY() : halfExtents.getY(), + supportDir.getZ() < b3Scalar(0.0) ? -halfExtents.getZ() : halfExtents.getZ()); +} + + + + + + +/// Utils related to temporal transforms +class b3TransformUtil +{ + +public: + + static void integrateTransform(const b3Transform& curTrans,const b3Vector3& linvel,const b3Vector3& angvel,b3Scalar timeStep,b3Transform& predictedTransform) + { + predictedTransform.setOrigin(curTrans.getOrigin() + linvel * timeStep); +// #define QUATERNION_DERIVATIVE + #ifdef QUATERNION_DERIVATIVE + b3Quaternion predictedOrn = curTrans.getRotation(); + predictedOrn += (angvel * predictedOrn) * (timeStep * b3Scalar(0.5)); + predictedOrn.normalize(); + #else + //Exponential map + //google for "Practical Parameterization of Rotations Using the Exponential Map", F. Sebastian Grassia + + b3Vector3 axis; + b3Scalar fAngle = angvel.length(); + //limit the angular motion + if (fAngle*timeStep > ANGULAR_MOTION_THRESHOLD) + { + fAngle = ANGULAR_MOTION_THRESHOLD / timeStep; + } + + if ( fAngle < b3Scalar(0.001) ) + { + // use Taylor's expansions of sync function + axis = angvel*( b3Scalar(0.5)*timeStep-(timeStep*timeStep*timeStep)*(b3Scalar(0.020833333333))*fAngle*fAngle ); + } + else + { + // sync(fAngle) = sin(c*fAngle)/t + axis = angvel*( btSin(b3Scalar(0.5)*fAngle*timeStep)/fAngle ); + } + b3Quaternion dorn (axis.getX(),axis.getY(),axis.getZ(),btCos( fAngle*timeStep*b3Scalar(0.5) )); + b3Quaternion orn0 = curTrans.getRotation(); + + b3Quaternion predictedOrn = dorn * orn0; + predictedOrn.normalize(); + #endif + predictedTransform.setRotation(predictedOrn); + } + + static void calculateVelocityQuaternion(const b3Vector3& pos0,const b3Vector3& pos1,const b3Quaternion& orn0,const b3Quaternion& orn1,b3Scalar timeStep,b3Vector3& linVel,b3Vector3& angVel) + { + linVel = (pos1 - pos0) / timeStep; + b3Vector3 axis; + b3Scalar angle; + if (orn0 != orn1) + { + calculateDiffAxisAngleQuaternion(orn0,orn1,axis,angle); + angVel = axis * angle / timeStep; + } else + { + angVel.setValue(0,0,0); + } + } + + static void calculateDiffAxisAngleQuaternion(const b3Quaternion& orn0,const b3Quaternion& orn1a,b3Vector3& axis,b3Scalar& angle) + { + b3Quaternion orn1 = orn0.nearest(orn1a); + b3Quaternion dorn = orn1 * orn0.inverse(); + angle = dorn.getAngle(); + axis = b3Vector3(dorn.getX(),dorn.getY(),dorn.getZ()); + axis[3] = b3Scalar(0.); + //check for axis length + b3Scalar len = axis.length2(); + if (len < SIMD_EPSILON*SIMD_EPSILON) + axis = b3Vector3(b3Scalar(1.),b3Scalar(0.),b3Scalar(0.)); + else + axis /= btSqrt(len); + } + + static void calculateVelocity(const b3Transform& transform0,const b3Transform& transform1,b3Scalar timeStep,b3Vector3& linVel,b3Vector3& angVel) + { + linVel = (transform1.getOrigin() - transform0.getOrigin()) / timeStep; + b3Vector3 axis; + b3Scalar angle; + calculateDiffAxisAngle(transform0,transform1,axis,angle); + angVel = axis * angle / timeStep; + } + + static void calculateDiffAxisAngle(const b3Transform& transform0,const b3Transform& transform1,b3Vector3& axis,b3Scalar& angle) + { + b3Matrix3x3 dmat = transform1.getBasis() * transform0.getBasis().inverse(); + b3Quaternion dorn; + dmat.getRotation(dorn); + + ///floating point inaccuracy can lead to w component > 1..., which breaks + dorn.normalize(); + + angle = dorn.getAngle(); + axis = b3Vector3(dorn.getX(),dorn.getY(),dorn.getZ()); + axis[3] = b3Scalar(0.); + //check for axis length + b3Scalar len = axis.length2(); + if (len < SIMD_EPSILON*SIMD_EPSILON) + axis = b3Vector3(b3Scalar(1.),b3Scalar(0.),b3Scalar(0.)); + else + axis /= btSqrt(len); + } + +}; + + +///The btConvexSeparatingDistanceUtil can help speed up convex collision detection +///by conservatively updating a cached separating distance/vector instead of re-calculating the closest distance +class btConvexSeparatingDistanceUtil +{ + b3Quaternion m_ornA; + b3Quaternion m_ornB; + b3Vector3 m_posA; + b3Vector3 m_posB; + + b3Vector3 m_separatingNormal; + + b3Scalar m_boundingRadiusA; + b3Scalar m_boundingRadiusB; + b3Scalar m_separatingDistance; + +public: + + btConvexSeparatingDistanceUtil(b3Scalar boundingRadiusA,b3Scalar boundingRadiusB) + :m_boundingRadiusA(boundingRadiusA), + m_boundingRadiusB(boundingRadiusB), + m_separatingDistance(0.f) + { + } + + b3Scalar getConservativeSeparatingDistance() + { + return m_separatingDistance; + } + + void updateSeparatingDistance(const b3Transform& transA,const b3Transform& transB) + { + const b3Vector3& toPosA = transA.getOrigin(); + const b3Vector3& toPosB = transB.getOrigin(); + b3Quaternion toOrnA = transA.getRotation(); + b3Quaternion toOrnB = transB.getRotation(); + + if (m_separatingDistance>0.f) + { + + + b3Vector3 linVelA,angVelA,linVelB,angVelB; + b3TransformUtil::calculateVelocityQuaternion(m_posA,toPosA,m_ornA,toOrnA,b3Scalar(1.),linVelA,angVelA); + b3TransformUtil::calculateVelocityQuaternion(m_posB,toPosB,m_ornB,toOrnB,b3Scalar(1.),linVelB,angVelB); + b3Scalar maxAngularProjectedVelocity = angVelA.length() * m_boundingRadiusA + angVelB.length() * m_boundingRadiusB; + b3Vector3 relLinVel = (linVelB-linVelA); + b3Scalar relLinVelocLength = relLinVel.dot(m_separatingNormal); + if (relLinVelocLength<0.f) + { + relLinVelocLength = 0.f; + } + + b3Scalar projectedMotion = maxAngularProjectedVelocity +relLinVelocLength; + m_separatingDistance -= projectedMotion; + } + + m_posA = toPosA; + m_posB = toPosB; + m_ornA = toOrnA; + m_ornB = toOrnB; + } + + void initSeparatingDistance(const b3Vector3& separatingVector,b3Scalar separatingDistance,const b3Transform& transA,const b3Transform& transB) + { + m_separatingDistance = separatingDistance; + + if (m_separatingDistance>0.f) + { + m_separatingNormal = separatingVector; + + const b3Vector3& toPosA = transA.getOrigin(); + const b3Vector3& toPosB = transB.getOrigin(); + b3Quaternion toOrnA = transA.getRotation(); + b3Quaternion toOrnB = transB.getRotation(); + m_posA = toPosA; + m_posB = toPosB; + m_ornA = toOrnA; + m_ornB = toOrnB; + } + } + +}; + + +#endif //BT_TRANSFORM_UTIL_H + diff --git a/src/BulletCommon/btVector3.cpp b/src/BulletCommon/b3Vector3.cpp similarity index 99% rename from src/BulletCommon/btVector3.cpp rename to src/BulletCommon/b3Vector3.cpp index 24bd521a9..46df728cf 100644 --- a/src/BulletCommon/btVector3.cpp +++ b/src/BulletCommon/b3Vector3.cpp @@ -19,7 +19,7 @@ #define BT_USE_SSE_IN_API #endif -#include "btVector3.h" +#include "b3Vector3.h" #if defined (BT_USE_SSE) || defined (BT_USE_NEON) diff --git a/src/BulletCommon/btVector3.h b/src/BulletCommon/b3Vector3.h similarity index 76% rename from src/BulletCommon/btVector3.h rename to src/BulletCommon/b3Vector3.h index 312286940..e6fa49c90 100644 --- a/src/BulletCommon/btVector3.h +++ b/src/BulletCommon/b3Vector3.h @@ -18,9 +18,9 @@ subject to the following restrictions: #define BT_VECTOR3_H //#include -#include "btScalar.h" -#include "btMinMax.h" -#include "btAlignedAllocator.h" +#include "b3Scalar.h" +#include "b3MinMax.h" +#include "b3AlignedAllocator.h" #ifdef BT_USE_DOUBLE_PRECISION #define btVector3Data btVector3DoubleData @@ -71,18 +71,18 @@ const int32x4_t ATTRIBUTE_ALIGNED16(btv3AbsMask) = (int32x4_t){0x7FFFFFFF, 0x7FF #endif -/**@brief btVector3 can be used to represent 3D points and vectors. - * It has an un-used w component to suit 16-byte alignment when btVector3 is stored in containers. This extra component can be used by derived classes (Quaternion?) or by user +/**@brief b3Vector3 can be used to represent 3D points and vectors. + * It has an un-used w component to suit 16-byte alignment when b3Vector3 is stored in containers. This extra component can be used by derived classes (Quaternion?) or by user * Ideally, this class should be replaced by a platform optimized SIMD version that keeps the data in registers */ -ATTRIBUTE_ALIGNED16(class) btVector3 +ATTRIBUTE_ALIGNED16(class) b3Vector3 { public: BT_DECLARE_ALIGNED_ALLOCATOR(); #if defined (__SPU__) && defined (__CELLOS_LV2__) - btScalar m_floats[4]; + b3Scalar m_floats[4]; public: SIMD_FORCE_INLINE const vec_float4& get128() const { @@ -93,8 +93,8 @@ public: #if defined (BT_USE_SSE) || defined(BT_USE_NEON) // _WIN32 || ARM union { btSimdFloat4 mVec128; - btScalar m_floats[4]; - struct {btScalar x,y,z,w;}; + b3Scalar m_floats[4]; + struct {b3Scalar x,y,z,w;}; }; SIMD_FORCE_INLINE btSimdFloat4 get128() const @@ -106,14 +106,14 @@ public: mVec128 = v128; } #else - btScalar m_floats[4]; + b3Scalar m_floats[4]; #endif #endif //__CELLOS_LV2__ __SPU__ public: /**@brief No initialization constructor */ - SIMD_FORCE_INLINE btVector3() + SIMD_FORCE_INLINE b3Vector3() { } @@ -125,30 +125,30 @@ public: * @param y Y value * @param z Z value */ - SIMD_FORCE_INLINE btVector3(const btScalar& _x, const btScalar& _y, const btScalar& _z) + SIMD_FORCE_INLINE b3Vector3(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z) { m_floats[0] = _x; m_floats[1] = _y; m_floats[2] = _z; - m_floats[3] = btScalar(0.f); + m_floats[3] = b3Scalar(0.f); } #if (defined (BT_USE_SSE_IN_API) && defined (BT_USE_SSE) )|| defined (BT_USE_NEON) // Set Vector - SIMD_FORCE_INLINE btVector3( btSimdFloat4 v) + SIMD_FORCE_INLINE b3Vector3( btSimdFloat4 v) { mVec128 = v; } // Copy constructor - SIMD_FORCE_INLINE btVector3(const btVector3& rhs) + SIMD_FORCE_INLINE b3Vector3(const b3Vector3& rhs) { mVec128 = rhs.mVec128; } // Assignment Operator - SIMD_FORCE_INLINE btVector3& - operator=(const btVector3& v) + SIMD_FORCE_INLINE b3Vector3& + operator=(const b3Vector3& v) { mVec128 = v.mVec128; @@ -158,7 +158,7 @@ public: /**@brief Add a vector to this one * @param The vector to add to this one */ - SIMD_FORCE_INLINE btVector3& operator+=(const btVector3& v) + SIMD_FORCE_INLINE b3Vector3& operator+=(const b3Vector3& v) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) mVec128 = _mm_add_ps(mVec128, v.mVec128); @@ -175,7 +175,7 @@ public: /**@brief Subtract a vector from this one * @param The vector to subtract */ - SIMD_FORCE_INLINE btVector3& operator-=(const btVector3& v) + SIMD_FORCE_INLINE b3Vector3& operator-=(const b3Vector3& v) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) mVec128 = _mm_sub_ps(mVec128, v.mVec128); @@ -191,7 +191,7 @@ public: /**@brief Scale the vector * @param s Scale factor */ - SIMD_FORCE_INLINE btVector3& operator*=(const btScalar& s) + SIMD_FORCE_INLINE b3Vector3& operator*=(const b3Scalar& s) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vs = _mm_load_ss(&s); // (S 0 0 0) @@ -209,9 +209,9 @@ public: /**@brief Inversely scale the vector * @param s Scale factor to divide by */ - SIMD_FORCE_INLINE btVector3& operator/=(const btScalar& s) + SIMD_FORCE_INLINE b3Vector3& operator/=(const b3Scalar& s) { - btFullAssert(s != btScalar(0.0)); + btFullAssert(s != b3Scalar(0.0)); #if 0 //defined(BT_USE_SSE_IN_API) // this code is not faster ! @@ -223,13 +223,13 @@ public: return *this; #else - return *this *= btScalar(1.0) / s; + return *this *= b3Scalar(1.0) / s; #endif } /**@brief Return the dot product * @param v The other vector in the dot product */ - SIMD_FORCE_INLINE btScalar dot(const btVector3& v) const + SIMD_FORCE_INLINE b3Scalar dot(const b3Vector3& v) const { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vd = _mm_mul_ps(mVec128, v.mVec128); @@ -251,28 +251,28 @@ public: } /**@brief Return the length of the vector squared */ - SIMD_FORCE_INLINE btScalar length2() const + SIMD_FORCE_INLINE b3Scalar length2() const { return dot(*this); } /**@brief Return the length of the vector */ - SIMD_FORCE_INLINE btScalar length() const + SIMD_FORCE_INLINE b3Scalar length() const { return btSqrt(length2()); } /**@brief Return the distance squared between the ends of this and another vector * This is symantically treating the vector like a point */ - SIMD_FORCE_INLINE btScalar distance2(const btVector3& v) const; + SIMD_FORCE_INLINE b3Scalar distance2(const b3Vector3& v) const; /**@brief Return the distance between the ends of this and another vector * This is symantically treating the vector like a point */ - SIMD_FORCE_INLINE btScalar distance(const btVector3& v) const; + SIMD_FORCE_INLINE b3Scalar distance(const b3Vector3& v) const; - SIMD_FORCE_INLINE btVector3& safeNormalize() + SIMD_FORCE_INLINE b3Vector3& safeNormalize() { - btVector3 absVec = this->absolute(); + b3Vector3 absVec = this->absolute(); int maxIndex = absVec.maxAxis(); if (absVec[maxIndex]>0) { @@ -285,7 +285,7 @@ public: /**@brief Normalize this vector * x^2 + y^2 + z^2 = 1 */ - SIMD_FORCE_INLINE btVector3& normalize() + SIMD_FORCE_INLINE b3Vector3& normalize() { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) // dot product first @@ -328,31 +328,31 @@ public: } /**@brief Return a normalized version of this vector */ - SIMD_FORCE_INLINE btVector3 normalized() const; + SIMD_FORCE_INLINE b3Vector3 normalized() const; /**@brief Return a rotated version of this vector * @param wAxis The axis to rotate about * @param angle The angle to rotate by */ - SIMD_FORCE_INLINE btVector3 rotate( const btVector3& wAxis, const btScalar angle ) const; + SIMD_FORCE_INLINE b3Vector3 rotate( const b3Vector3& wAxis, const b3Scalar angle ) const; /**@brief Return the angle between this and another vector * @param v The other vector */ - SIMD_FORCE_INLINE btScalar angle(const btVector3& v) const + SIMD_FORCE_INLINE b3Scalar angle(const b3Vector3& v) const { - btScalar s = btSqrt(length2() * v.length2()); - btFullAssert(s != btScalar(0.0)); + b3Scalar s = btSqrt(length2() * v.length2()); + btFullAssert(s != b3Scalar(0.0)); return btAcos(dot(v) / s); } /**@brief Return a vector will the absolute values of each element */ - SIMD_FORCE_INLINE btVector3 absolute() const + SIMD_FORCE_INLINE b3Vector3 absolute() const { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) - return btVector3(_mm_and_ps(mVec128, btv3AbsfMask)); + return b3Vector3(_mm_and_ps(mVec128, btv3AbsfMask)); #elif defined(BT_USE_NEON) - return btVector3(vabsq_f32(mVec128)); + return b3Vector3(vabsq_f32(mVec128)); #else - return btVector3( + return b3Vector3( btFabs(m_floats[0]), btFabs(m_floats[1]), btFabs(m_floats[2])); @@ -361,7 +361,7 @@ public: /**@brief Return the cross product between this and another vector * @param v The other vector */ - SIMD_FORCE_INLINE btVector3 cross(const btVector3& v) const + SIMD_FORCE_INLINE b3Vector3 cross(const b3Vector3& v) const { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 T, V; @@ -374,7 +374,7 @@ public: V = _mm_sub_ps(V, T); V = bt_pshufd_ps(V, BT_SHUFFLE(1, 2, 0, 3)); - return btVector3(V); + return b3Vector3(V); #elif defined(BT_USE_NEON) float32x4_t T, V; // form (Y, Z, X, _) of mVec128 and v.mVec128 @@ -391,16 +391,16 @@ public: V = vcombine_f32(vext_f32(Vlow, vget_high_f32(V), 1), Vlow); V = (float32x4_t)vandq_s32((int32x4_t)V, btvFFF0Mask); - return btVector3(V); + return b3Vector3(V); #else - return btVector3( + return b3Vector3( m_floats[1] * v.m_floats[2] - m_floats[2] * v.m_floats[1], m_floats[2] * v.m_floats[0] - m_floats[0] * v.m_floats[2], m_floats[0] * v.m_floats[1] - m_floats[1] * v.m_floats[0]); #endif } - SIMD_FORCE_INLINE btScalar triple(const btVector3& v1, const btVector3& v2) const + SIMD_FORCE_INLINE b3Scalar triple(const b3Vector3& v1, const b3Vector3& v2) const { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) // cross: @@ -475,11 +475,11 @@ public: } - SIMD_FORCE_INLINE void setInterpolate3(const btVector3& v0, const btVector3& v1, btScalar rt) + SIMD_FORCE_INLINE void setInterpolate3(const b3Vector3& v0, const b3Vector3& v1, b3Scalar rt) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vrt = _mm_load_ss(&rt); // (rt 0 0 0) - btScalar s = btScalar(1.0) - rt; + b3Scalar s = b3Scalar(1.0) - rt; __m128 vs = _mm_load_ss(&s); // (S 0 0 0) vs = bt_pshufd_ps(vs, 0x80); // (S S S 0.0) __m128 r0 = _mm_mul_ps(v0.mVec128, vs); @@ -492,7 +492,7 @@ public: mVec128 = vmulq_n_f32(mVec128, rt); mVec128 = vaddq_f32(mVec128, v0.mVec128); #else - btScalar s = btScalar(1.0) - rt; + b3Scalar s = b3Scalar(1.0) - rt; m_floats[0] = s * v0.m_floats[0] + rt * v1.m_floats[0]; m_floats[1] = s * v0.m_floats[1] + rt * v1.m_floats[1]; m_floats[2] = s * v0.m_floats[2] + rt * v1.m_floats[2]; @@ -504,7 +504,7 @@ public: /**@brief Return the linear interpolation between this and another vector * @param v The other vector * @param t The ration of this to v (t = 0 => return this, t=1 => return other) */ - SIMD_FORCE_INLINE btVector3 lerp(const btVector3& v, const btScalar& t) const + SIMD_FORCE_INLINE b3Vector3 lerp(const b3Vector3& v, const b3Scalar& t) const { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vt = _mm_load_ss(&t); // (t 0 0 0) @@ -513,16 +513,16 @@ public: vl = _mm_mul_ps(vl, vt); vl = _mm_add_ps(vl, mVec128); - return btVector3(vl); + return b3Vector3(vl); #elif defined(BT_USE_NEON) float32x4_t vl = vsubq_f32(v.mVec128, mVec128); vl = vmulq_n_f32(vl, t); vl = vaddq_f32(vl, mVec128); - return btVector3(vl); + return b3Vector3(vl); #else return - btVector3( m_floats[0] + (v.m_floats[0] - m_floats[0]) * t, + b3Vector3( m_floats[0] + (v.m_floats[0] - m_floats[0]) * t, m_floats[1] + (v.m_floats[1] - m_floats[1]) * t, m_floats[2] + (v.m_floats[2] - m_floats[2]) * t); #endif @@ -530,7 +530,7 @@ public: /**@brief Elementwise multiply this vector by the other * @param v The other vector */ - SIMD_FORCE_INLINE btVector3& operator*=(const btVector3& v) + SIMD_FORCE_INLINE b3Vector3& operator*=(const b3Vector3& v) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) mVec128 = _mm_mul_ps(mVec128, v.mVec128); @@ -545,30 +545,30 @@ public: } /**@brief Return the x value */ - SIMD_FORCE_INLINE const btScalar& getX() const { return m_floats[0]; } + SIMD_FORCE_INLINE const b3Scalar& getX() const { return m_floats[0]; } /**@brief Return the y value */ - SIMD_FORCE_INLINE const btScalar& getY() const { return m_floats[1]; } + SIMD_FORCE_INLINE const b3Scalar& getY() const { return m_floats[1]; } /**@brief Return the z value */ - SIMD_FORCE_INLINE const btScalar& getZ() const { return m_floats[2]; } + SIMD_FORCE_INLINE const b3Scalar& getZ() const { return m_floats[2]; } /**@brief Return the w value */ - SIMD_FORCE_INLINE const btScalar& getW() const { return m_floats[3]; } + SIMD_FORCE_INLINE const b3Scalar& getW() const { return m_floats[3]; } /**@brief Set the x value */ - SIMD_FORCE_INLINE void setX(btScalar _x) { m_floats[0] = _x;}; + SIMD_FORCE_INLINE void setX(b3Scalar _x) { m_floats[0] = _x;}; /**@brief Set the y value */ - SIMD_FORCE_INLINE void setY(btScalar _y) { m_floats[1] = _y;}; + SIMD_FORCE_INLINE void setY(b3Scalar _y) { m_floats[1] = _y;}; /**@brief Set the z value */ - SIMD_FORCE_INLINE void setZ(btScalar _z) { m_floats[2] = _z;}; + SIMD_FORCE_INLINE void setZ(b3Scalar _z) { m_floats[2] = _z;}; /**@brief Set the w value */ - SIMD_FORCE_INLINE void setW(btScalar _w) { m_floats[3] = _w;}; + SIMD_FORCE_INLINE void setW(b3Scalar _w) { m_floats[3] = _w;}; - //SIMD_FORCE_INLINE btScalar& operator[](int i) { return (&m_floats[0])[i]; } - //SIMD_FORCE_INLINE const btScalar& operator[](int i) const { return (&m_floats[0])[i]; } - ///operator btScalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons. - SIMD_FORCE_INLINE operator btScalar *() { return &m_floats[0]; } - SIMD_FORCE_INLINE operator const btScalar *() const { return &m_floats[0]; } + //SIMD_FORCE_INLINE b3Scalar& operator[](int i) { return (&m_floats[0])[i]; } + //SIMD_FORCE_INLINE const b3Scalar& operator[](int i) const { return (&m_floats[0])[i]; } + ///operator b3Scalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons. + SIMD_FORCE_INLINE operator b3Scalar *() { return &m_floats[0]; } + SIMD_FORCE_INLINE operator const b3Scalar *() const { return &m_floats[0]; } - SIMD_FORCE_INLINE bool operator==(const btVector3& other) const + SIMD_FORCE_INLINE bool operator==(const b3Vector3& other) const { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) return (0xf == _mm_movemask_ps((__m128)_mm_cmpeq_ps(mVec128, other.mVec128))); @@ -580,15 +580,15 @@ public: #endif } - SIMD_FORCE_INLINE bool operator!=(const btVector3& other) const + SIMD_FORCE_INLINE bool operator!=(const b3Vector3& other) const { return !(*this == other); } - /**@brief Set each element to the max of the current values and the values of another btVector3 - * @param other The other btVector3 to compare with + /**@brief Set each element to the max of the current values and the values of another b3Vector3 + * @param other The other b3Vector3 to compare with */ - SIMD_FORCE_INLINE void setMax(const btVector3& other) + SIMD_FORCE_INLINE void setMax(const b3Vector3& other) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) mVec128 = _mm_max_ps(mVec128, other.mVec128); @@ -602,10 +602,10 @@ public: #endif } - /**@brief Set each element to the min of the current values and the values of another btVector3 - * @param other The other btVector3 to compare with + /**@brief Set each element to the min of the current values and the values of another b3Vector3 + * @param other The other b3Vector3 to compare with */ - SIMD_FORCE_INLINE void setMin(const btVector3& other) + SIMD_FORCE_INLINE void setMin(const b3Vector3& other) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) mVec128 = _mm_min_ps(mVec128, other.mVec128); @@ -619,15 +619,15 @@ public: #endif } - SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z) + SIMD_FORCE_INLINE void setValue(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z) { m_floats[0]=_x; m_floats[1]=_y; m_floats[2]=_z; - m_floats[3] = btScalar(0.f); + m_floats[3] = b3Scalar(0.f); } - void getSkewSymmetricMatrix(btVector3* v0,btVector3* v1,btVector3* v2) const + void getSkewSymmetricMatrix(b3Vector3* v0,b3Vector3* v1,b3Vector3* v2) const { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) @@ -658,13 +658,13 @@ public: int32x4_t vi = vdupq_n_s32(0); mVec128 = vreinterpretq_f32_s32(vi); #else - setValue(btScalar(0.),btScalar(0.),btScalar(0.)); + setValue(b3Scalar(0.),b3Scalar(0.),b3Scalar(0.)); #endif } SIMD_FORCE_INLINE bool isZero() const { - return m_floats[0] == btScalar(0) && m_floats[1] == btScalar(0) && m_floats[2] == btScalar(0); + return m_floats[0] == b3Scalar(0) && m_floats[1] == b3Scalar(0) && m_floats[2] == b3Scalar(0); } SIMD_FORCE_INLINE bool fuzzyZero() const @@ -688,16 +688,16 @@ public: * @param array The other vectors * @param array_count The number of other vectors * @param dotOut The maximum dot product */ - SIMD_FORCE_INLINE long maxDot( const btVector3 *array, long array_count, btScalar &dotOut ) const; + SIMD_FORCE_INLINE long maxDot( const b3Vector3 *array, long array_count, b3Scalar &dotOut ) const; /**@brief returns index of minimum dot product between this and vectors in array[] * @param array The other vectors * @param array_count The number of other vectors * @param dotOut The minimum dot product */ - SIMD_FORCE_INLINE long minDot( const btVector3 *array, long array_count, btScalar &dotOut ) const; + SIMD_FORCE_INLINE long minDot( const b3Vector3 *array, long array_count, b3Scalar &dotOut ) const; - /* create a vector as btVector3( this->dot( btVector3 v0 ), this->dot( btVector3 v1), this->dot( btVector3 v2 )) */ - SIMD_FORCE_INLINE btVector3 dot3( const btVector3 &v0, const btVector3 &v1, const btVector3 &v2 ) const + /* create a vector as b3Vector3( this->dot( b3Vector3 v0 ), this->dot( b3Vector3 v1), this->dot( b3Vector3 v2 )) */ + SIMD_FORCE_INLINE b3Vector3 dot3( const b3Vector3 &v0, const b3Vector3 &v1, const b3Vector3 &v2 ) const { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) @@ -711,7 +711,7 @@ public: r = _mm_add_ps( r, _mm_movehl_ps( b2, b0 )); a2 = _mm_and_ps( a2, btvxyzMaskf); r = _mm_add_ps( r, btCastdTo128f (_mm_move_sd( btCastfTo128d(a2), btCastfTo128d(b1) ))); - return btVector3(r); + return b3Vector3(r); #elif defined(BT_USE_NEON) static const uint32x4_t xyzMask = (const uint32x4_t){ -1, -1, -1, 0 }; @@ -722,23 +722,23 @@ public: a2 = (float32x4_t) vandq_u32((uint32x4_t) a2, xyzMask ); float32x2_t b0 = vadd_f32( vpadd_f32( vget_low_f32(a0), vget_low_f32(a1)), zLo.val[0] ); float32x2_t b1 = vpadd_f32( vpadd_f32( vget_low_f32(a2), vget_high_f32(a2)), vdup_n_f32(0.0f)); - return btVector3( vcombine_f32(b0, b1) ); + return b3Vector3( vcombine_f32(b0, b1) ); #else - return btVector3( dot(v0), dot(v1), dot(v2)); + return b3Vector3( dot(v0), dot(v1), dot(v2)); #endif } }; /**@brief Return the sum of two vectors (Point symantics)*/ -SIMD_FORCE_INLINE btVector3 -operator+(const btVector3& v1, const btVector3& v2) +SIMD_FORCE_INLINE b3Vector3 +operator+(const b3Vector3& v1, const b3Vector3& v2) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) - return btVector3(_mm_add_ps(v1.mVec128, v2.mVec128)); + return b3Vector3(_mm_add_ps(v1.mVec128, v2.mVec128)); #elif defined(BT_USE_NEON) - return btVector3(vaddq_f32(v1.mVec128, v2.mVec128)); + return b3Vector3(vaddq_f32(v1.mVec128, v2.mVec128)); #else - return btVector3( + return b3Vector3( v1.m_floats[0] + v2.m_floats[0], v1.m_floats[1] + v2.m_floats[1], v1.m_floats[2] + v2.m_floats[2]); @@ -746,15 +746,15 @@ operator+(const btVector3& v1, const btVector3& v2) } /**@brief Return the elementwise product of two vectors */ -SIMD_FORCE_INLINE btVector3 -operator*(const btVector3& v1, const btVector3& v2) +SIMD_FORCE_INLINE b3Vector3 +operator*(const b3Vector3& v1, const b3Vector3& v2) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) - return btVector3(_mm_mul_ps(v1.mVec128, v2.mVec128)); + return b3Vector3(_mm_mul_ps(v1.mVec128, v2.mVec128)); #elif defined(BT_USE_NEON) - return btVector3(vmulq_f32(v1.mVec128, v2.mVec128)); + return b3Vector3(vmulq_f32(v1.mVec128, v2.mVec128)); #else - return btVector3( + return b3Vector3( v1.m_floats[0] * v2.m_floats[0], v1.m_floats[1] * v2.m_floats[1], v1.m_floats[2] * v2.m_floats[2]); @@ -762,19 +762,19 @@ operator*(const btVector3& v1, const btVector3& v2) } /**@brief Return the difference between two vectors */ -SIMD_FORCE_INLINE btVector3 -operator-(const btVector3& v1, const btVector3& v2) +SIMD_FORCE_INLINE b3Vector3 +operator-(const b3Vector3& v1, const b3Vector3& v2) { #if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) // without _mm_and_ps this code causes slowdown in Concave moving __m128 r = _mm_sub_ps(v1.mVec128, v2.mVec128); - return btVector3(_mm_and_ps(r, btvFFF0fMask)); + return b3Vector3(_mm_and_ps(r, btvFFF0fMask)); #elif defined(BT_USE_NEON) float32x4_t r = vsubq_f32(v1.mVec128, v2.mVec128); - return btVector3((float32x4_t)vandq_s32((int32x4_t)r, btvFFF0Mask)); + return b3Vector3((float32x4_t)vandq_s32((int32x4_t)r, btvFFF0Mask)); #else - return btVector3( + return b3Vector3( v1.m_floats[0] - v2.m_floats[0], v1.m_floats[1] - v2.m_floats[1], v1.m_floats[2] - v2.m_floats[2]); @@ -782,67 +782,67 @@ operator-(const btVector3& v1, const btVector3& v2) } /**@brief Return the negative of the vector */ -SIMD_FORCE_INLINE btVector3 -operator-(const btVector3& v) +SIMD_FORCE_INLINE b3Vector3 +operator-(const b3Vector3& v) { #if (defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE)) __m128 r = _mm_xor_ps(v.mVec128, btvMzeroMask); - return btVector3(_mm_and_ps(r, btvFFF0fMask)); + return b3Vector3(_mm_and_ps(r, btvFFF0fMask)); #elif defined(BT_USE_NEON) - return btVector3((btSimdFloat4)veorq_s32((int32x4_t)v.mVec128, (int32x4_t)btvMzeroMask)); + return b3Vector3((btSimdFloat4)veorq_s32((int32x4_t)v.mVec128, (int32x4_t)btvMzeroMask)); #else - return btVector3(-v.m_floats[0], -v.m_floats[1], -v.m_floats[2]); + return b3Vector3(-v.m_floats[0], -v.m_floats[1], -v.m_floats[2]); #endif } /**@brief Return the vector scaled by s */ -SIMD_FORCE_INLINE btVector3 -operator*(const btVector3& v, const btScalar& s) +SIMD_FORCE_INLINE b3Vector3 +operator*(const b3Vector3& v, const b3Scalar& s) { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 vs = _mm_load_ss(&s); // (S 0 0 0) vs = bt_pshufd_ps(vs, 0x80); // (S S S 0.0) - return btVector3(_mm_mul_ps(v.mVec128, vs)); + return b3Vector3(_mm_mul_ps(v.mVec128, vs)); #elif defined(BT_USE_NEON) float32x4_t r = vmulq_n_f32(v.mVec128, s); - return btVector3((float32x4_t)vandq_s32((int32x4_t)r, btvFFF0Mask)); + return b3Vector3((float32x4_t)vandq_s32((int32x4_t)r, btvFFF0Mask)); #else - return btVector3(v.m_floats[0] * s, v.m_floats[1] * s, v.m_floats[2] * s); + return b3Vector3(v.m_floats[0] * s, v.m_floats[1] * s, v.m_floats[2] * s); #endif } /**@brief Return the vector scaled by s */ -SIMD_FORCE_INLINE btVector3 -operator*(const btScalar& s, const btVector3& v) +SIMD_FORCE_INLINE b3Vector3 +operator*(const b3Scalar& s, const b3Vector3& v) { return v * s; } /**@brief Return the vector inversely scaled by s */ -SIMD_FORCE_INLINE btVector3 -operator/(const btVector3& v, const btScalar& s) +SIMD_FORCE_INLINE b3Vector3 +operator/(const b3Vector3& v, const b3Scalar& s) { - btFullAssert(s != btScalar(0.0)); + btFullAssert(s != b3Scalar(0.0)); #if 0 //defined(BT_USE_SSE_IN_API) // this code is not faster ! __m128 vs = _mm_load_ss(&s); vs = _mm_div_ss(v1110, vs); vs = bt_pshufd_ps(vs, 0x00); // (S S S S) - return btVector3(_mm_mul_ps(v.mVec128, vs)); + return b3Vector3(_mm_mul_ps(v.mVec128, vs)); #else - return v * (btScalar(1.0) / s); + return v * (b3Scalar(1.0) / s); #endif } /**@brief Return the vector inversely scaled by s */ -SIMD_FORCE_INLINE btVector3 -operator/(const btVector3& v1, const btVector3& v2) +SIMD_FORCE_INLINE b3Vector3 +operator/(const b3Vector3& v1, const b3Vector3& v2) { #if (defined(BT_USE_SSE_IN_API)&& defined (BT_USE_SSE)) __m128 vec = _mm_div_ps(v1.mVec128, v2.mVec128); vec = _mm_and_ps(vec, btvFFF0fMask); - return btVector3(vec); + return b3Vector3(vec); #elif defined(BT_USE_NEON) float32x4_t x, y, v, m; @@ -856,9 +856,9 @@ operator/(const btVector3& v1, const btVector3& v2) v = vmulq_f32(v, x); // x*vv v = vmulq_f32(v, m); // (x*vv)*(2-vv*y) = x*(vv(2-vv*y)) ~~~ x/y - return btVector3(v); + return b3Vector3(v); #else - return btVector3( + return b3Vector3( v1.m_floats[0] / v2.m_floats[0], v1.m_floats[1] / v2.m_floats[1], v1.m_floats[2] / v2.m_floats[2]); @@ -866,44 +866,44 @@ operator/(const btVector3& v1, const btVector3& v2) } /**@brief Return the dot product between two vectors */ -SIMD_FORCE_INLINE btScalar -btDot(const btVector3& v1, const btVector3& v2) +SIMD_FORCE_INLINE b3Scalar +btDot(const b3Vector3& v1, const b3Vector3& v2) { return v1.dot(v2); } /**@brief Return the distance squared between two vectors */ -SIMD_FORCE_INLINE btScalar -btDistance2(const btVector3& v1, const btVector3& v2) +SIMD_FORCE_INLINE b3Scalar +btDistance2(const b3Vector3& v1, const b3Vector3& v2) { return v1.distance2(v2); } /**@brief Return the distance between two vectors */ -SIMD_FORCE_INLINE btScalar -btDistance(const btVector3& v1, const btVector3& v2) +SIMD_FORCE_INLINE b3Scalar +btDistance(const b3Vector3& v1, const b3Vector3& v2) { return v1.distance(v2); } /**@brief Return the angle between two vectors */ -SIMD_FORCE_INLINE btScalar -btAngle(const btVector3& v1, const btVector3& v2) +SIMD_FORCE_INLINE b3Scalar +btAngle(const b3Vector3& v1, const b3Vector3& v2) { return v1.angle(v2); } /**@brief Return the cross product of two vectors */ -SIMD_FORCE_INLINE btVector3 -btCross(const btVector3& v1, const btVector3& v2) +SIMD_FORCE_INLINE b3Vector3 +btCross(const b3Vector3& v1, const b3Vector3& v2) { return v1.cross(v2); } -SIMD_FORCE_INLINE btScalar -btTriple(const btVector3& v1, const btVector3& v2, const btVector3& v3) +SIMD_FORCE_INLINE b3Scalar +btTriple(const b3Vector3& v1, const b3Vector3& v2, const b3Vector3& v3) { return v1.triple(v2, v3); } @@ -912,28 +912,28 @@ btTriple(const btVector3& v1, const btVector3& v2, const btVector3& v3) * @param v1 One vector * @param v2 The other vector * @param t The ration of this to v (t = 0 => return v1, t=1 => return v2) */ -SIMD_FORCE_INLINE btVector3 -lerp(const btVector3& v1, const btVector3& v2, const btScalar& t) +SIMD_FORCE_INLINE b3Vector3 +lerp(const b3Vector3& v1, const b3Vector3& v2, const b3Scalar& t) { return v1.lerp(v2, t); } -SIMD_FORCE_INLINE btScalar btVector3::distance2(const btVector3& v) const +SIMD_FORCE_INLINE b3Scalar b3Vector3::distance2(const b3Vector3& v) const { return (v - *this).length2(); } -SIMD_FORCE_INLINE btScalar btVector3::distance(const btVector3& v) const +SIMD_FORCE_INLINE b3Scalar b3Vector3::distance(const b3Vector3& v) const { return (v - *this).length(); } -SIMD_FORCE_INLINE btVector3 btVector3::normalized() const +SIMD_FORCE_INLINE b3Vector3 b3Vector3::normalized() const { #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) - btVector3 norm = *this; + b3Vector3 norm = *this; return norm.normalize(); #else @@ -941,17 +941,17 @@ SIMD_FORCE_INLINE btVector3 btVector3::normalized() const #endif } -SIMD_FORCE_INLINE btVector3 btVector3::rotate( const btVector3& wAxis, const btScalar _angle ) const +SIMD_FORCE_INLINE b3Vector3 b3Vector3::rotate( const b3Vector3& wAxis, const b3Scalar _angle ) const { // wAxis must be a unit lenght vector #if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE) __m128 O = _mm_mul_ps(wAxis.mVec128, mVec128); - btScalar ssin = btSin( _angle ); + b3Scalar ssin = btSin( _angle ); __m128 C = wAxis.cross( mVec128 ).mVec128; O = _mm_and_ps(O, btvFFF0fMask); - btScalar scos = btCos( _angle ); + b3Scalar scos = btCos( _angle ); __m128 vsin = _mm_load_ss(&ssin); // (S 0 0 0) __m128 vcos = _mm_load_ss(&scos); // (S 0 0 0) @@ -971,11 +971,11 @@ SIMD_FORCE_INLINE btVector3 btVector3::rotate( const btVector3& wAxis, const btS vcos = vcos * X; O = O + vcos; - return btVector3(O); + return b3Vector3(O); #else - btVector3 o = wAxis * wAxis.dot( *this ); - btVector3 _x = *this - o; - btVector3 _y; + b3Vector3 o = wAxis * wAxis.dot( *this ); + b3Vector3 _x = *this - o; + b3Vector3 _y; _y = wAxis.cross( *this ); @@ -983,7 +983,7 @@ SIMD_FORCE_INLINE btVector3 btVector3::rotate( const btVector3& wAxis, const btS #endif } -SIMD_FORCE_INLINE long btVector3::maxDot( const btVector3 *array, long array_count, btScalar &dotOut ) const +SIMD_FORCE_INLINE long b3Vector3::maxDot( const b3Vector3 *array, long array_count, b3Scalar &dotOut ) const { #if defined (BT_USE_SSE) || defined (BT_USE_NEON) #if defined _WIN32 || defined (BT_USE_SSE) @@ -998,12 +998,12 @@ SIMD_FORCE_INLINE long btVector3::maxDot( const btVector3 *array, long arra #endif//BT_USE_SSE || BT_USE_NEON { - btScalar maxDot = -SIMD_INFINITY; + b3Scalar maxDot = -SIMD_INFINITY; int i = 0; int ptIndex = -1; for( i = 0; i < array_count; i++ ) { - btScalar dot = array[i].dot(*this); + b3Scalar dot = array[i].dot(*this); if( dot > maxDot ) { @@ -1020,7 +1020,7 @@ SIMD_FORCE_INLINE long btVector3::maxDot( const btVector3 *array, long arra #endif } -SIMD_FORCE_INLINE long btVector3::minDot( const btVector3 *array, long array_count, btScalar &dotOut ) const +SIMD_FORCE_INLINE long b3Vector3::minDot( const b3Vector3 *array, long array_count, b3Scalar &dotOut ) const { #if defined (BT_USE_SSE) || defined (BT_USE_NEON) #if defined BT_USE_SSE @@ -1036,13 +1036,13 @@ SIMD_FORCE_INLINE long btVector3::minDot( const btVector3 *array, long arra if( array_count < scalar_cutoff ) #endif//BT_USE_SSE || BT_USE_NEON { - btScalar minDot = SIMD_INFINITY; + b3Scalar minDot = SIMD_INFINITY; int i = 0; int ptIndex = -1; for( i = 0; i < array_count; i++ ) { - btScalar dot = array[i].dot(*this); + b3Scalar dot = array[i].dot(*this); if( dot < minDot ) { @@ -1061,15 +1061,15 @@ SIMD_FORCE_INLINE long btVector3::minDot( const btVector3 *array, long arra } -class btVector4 : public btVector3 +class btVector4 : public b3Vector3 { public: SIMD_FORCE_INLINE btVector4() {} - SIMD_FORCE_INLINE btVector4(const btScalar& _x, const btScalar& _y, const btScalar& _z,const btScalar& _w) - : btVector3(_x,_y,_z) + SIMD_FORCE_INLINE btVector4(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z,const b3Scalar& _w) + : b3Vector3(_x,_y,_z) { m_floats[3] = _w; } @@ -1080,7 +1080,7 @@ public: mVec128 = vec; } - SIMD_FORCE_INLINE btVector4(const btVector3& rhs) + SIMD_FORCE_INLINE btVector4(const b3Vector3& rhs) { mVec128 = rhs.mVec128; } @@ -1109,13 +1109,13 @@ public: } - btScalar getW() const { return m_floats[3];} + b3Scalar getW() const { return m_floats[3];} SIMD_FORCE_INLINE int maxAxis4() const { int maxIndex = -1; - btScalar maxVal = btScalar(-BT_LARGE_FLOAT); + b3Scalar maxVal = b3Scalar(-BT_LARGE_FLOAT); if (m_floats[0] > maxVal) { maxIndex = 0; @@ -1144,7 +1144,7 @@ public: SIMD_FORCE_INLINE int minAxis4() const { int minIndex = -1; - btScalar minVal = btScalar(BT_LARGE_FLOAT); + b3Scalar minVal = b3Scalar(BT_LARGE_FLOAT); if (m_floats[0] < minVal) { minIndex = 0; @@ -1185,7 +1185,7 @@ public: */ -/* void getValue(btScalar *m) const +/* void getValue(b3Scalar *m) const { m[0] = m_floats[0]; m[1] = m_floats[1]; @@ -1198,7 +1198,7 @@ public: * @param z Value of z * @param w Value of w */ - SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z,const btScalar& _w) + SIMD_FORCE_INLINE void setValue(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z,const b3Scalar& _w) { m_floats[0]=_x; m_floats[1]=_y; @@ -1211,7 +1211,7 @@ public: ///btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization -SIMD_FORCE_INLINE void btSwapScalarEndian(const btScalar& sourceVal, btScalar& destVal) +SIMD_FORCE_INLINE void btSwapScalarEndian(const b3Scalar& sourceVal, b3Scalar& destVal) { #ifdef BT_USE_DOUBLE_PRECISION unsigned char* dest = (unsigned char*) &destVal; @@ -1234,7 +1234,7 @@ SIMD_FORCE_INLINE void btSwapScalarEndian(const btScalar& sourceVal, btScalar& d #endif //BT_USE_DOUBLE_PRECISION } ///btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization -SIMD_FORCE_INLINE void btSwapVector3Endian(const btVector3& sourceVec, btVector3& destVec) +SIMD_FORCE_INLINE void btSwapVector3Endian(const b3Vector3& sourceVec, b3Vector3& destVec) { for (int i=0;i<4;i++) { @@ -1244,10 +1244,10 @@ SIMD_FORCE_INLINE void btSwapVector3Endian(const btVector3& sourceVec, btVector3 } ///btUnSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization -SIMD_FORCE_INLINE void btUnSwapVector3Endian(btVector3& vector) +SIMD_FORCE_INLINE void btUnSwapVector3Endian(b3Vector3& vector) { - btVector3 swappedVec; + b3Vector3 swappedVec; for (int i=0;i<4;i++) { btSwapScalarEndian(vector[i],swappedVec[i]); @@ -1260,8 +1260,8 @@ SIMD_FORCE_INLINE void btPlaneSpace1 (const T& n, T& p, T& q) { if (btFabs(n[2]) > SIMDSQRT12) { // choose p in y-z plane - btScalar a = n[1]*n[1] + n[2]*n[2]; - btScalar k = btRecipSqrt (a); + b3Scalar a = n[1]*n[1] + n[2]*n[2]; + b3Scalar k = btRecipSqrt (a); p[0] = 0; p[1] = -n[2]*k; p[2] = n[1]*k; @@ -1272,8 +1272,8 @@ SIMD_FORCE_INLINE void btPlaneSpace1 (const T& n, T& p, T& q) } else { // choose p in x-y plane - btScalar a = n[0]*n[0] + n[1]*n[1]; - btScalar k = btRecipSqrt (a); + b3Scalar a = n[0]*n[0] + n[1]*n[1]; + b3Scalar k = btRecipSqrt (a); p[0] = -n[1]*k; p[1] = n[0]*k; p[2] = 0; @@ -1296,42 +1296,42 @@ struct btVector3DoubleData }; -SIMD_FORCE_INLINE void btVector3::serializeFloat(struct btVector3FloatData& dataOut) const +SIMD_FORCE_INLINE void b3Vector3::serializeFloat(struct btVector3FloatData& dataOut) const { ///could also do a memcpy, check if it is worth it for (int i=0;i<4;i++) dataOut.m_floats[i] = float(m_floats[i]); } -SIMD_FORCE_INLINE void btVector3::deSerializeFloat(const struct btVector3FloatData& dataIn) +SIMD_FORCE_INLINE void b3Vector3::deSerializeFloat(const struct btVector3FloatData& dataIn) { for (int i=0;i<4;i++) - m_floats[i] = btScalar(dataIn.m_floats[i]); + m_floats[i] = b3Scalar(dataIn.m_floats[i]); } -SIMD_FORCE_INLINE void btVector3::serializeDouble(struct btVector3DoubleData& dataOut) const +SIMD_FORCE_INLINE void b3Vector3::serializeDouble(struct btVector3DoubleData& dataOut) const { ///could also do a memcpy, check if it is worth it for (int i=0;i<4;i++) dataOut.m_floats[i] = double(m_floats[i]); } -SIMD_FORCE_INLINE void btVector3::deSerializeDouble(const struct btVector3DoubleData& dataIn) +SIMD_FORCE_INLINE void b3Vector3::deSerializeDouble(const struct btVector3DoubleData& dataIn) { for (int i=0;i<4;i++) - m_floats[i] = btScalar(dataIn.m_floats[i]); + m_floats[i] = b3Scalar(dataIn.m_floats[i]); } -SIMD_FORCE_INLINE void btVector3::serialize(struct btVector3Data& dataOut) const +SIMD_FORCE_INLINE void b3Vector3::serialize(struct btVector3Data& dataOut) const { ///could also do a memcpy, check if it is worth it for (int i=0;i<4;i++) dataOut.m_floats[i] = m_floats[i]; } -SIMD_FORCE_INLINE void btVector3::deSerialize(const struct btVector3Data& dataIn) +SIMD_FORCE_INLINE void b3Vector3::deSerialize(const struct btVector3Data& dataIn) { for (int i=0;i<4;i++) m_floats[i] = dataIn.m_floats[i]; diff --git a/src/BulletCommon/btDefaultMotionState.h b/src/BulletCommon/btDefaultMotionState.h deleted file mode 100644 index c90b74923..000000000 --- a/src/BulletCommon/btDefaultMotionState.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef BT_DEFAULT_MOTION_STATE_H -#define BT_DEFAULT_MOTION_STATE_H - -#include "btMotionState.h" - -///The btDefaultMotionState provides a common implementation to synchronize world transforms with offsets. -ATTRIBUTE_ALIGNED16(struct) btDefaultMotionState : public btMotionState -{ - btTransform m_graphicsWorldTrans; - btTransform m_centerOfMassOffset; - btTransform m_startWorldTrans; - void* m_userPointer; - - BT_DECLARE_ALIGNED_ALLOCATOR(); - - btDefaultMotionState(const btTransform& startTrans = btTransform::getIdentity(),const btTransform& centerOfMassOffset = btTransform::getIdentity()) - : m_graphicsWorldTrans(startTrans), - m_centerOfMassOffset(centerOfMassOffset), - m_startWorldTrans(startTrans), - m_userPointer(0) - - { - } - - ///synchronizes world transform from user to physics - virtual void getWorldTransform(btTransform& centerOfMassWorldTrans ) const - { - centerOfMassWorldTrans = m_centerOfMassOffset.inverse() * m_graphicsWorldTrans ; - } - - ///synchronizes world transform from physics to user - ///Bullet only calls the update of worldtransform for active objects - virtual void setWorldTransform(const btTransform& centerOfMassWorldTrans) - { - m_graphicsWorldTrans = centerOfMassWorldTrans * m_centerOfMassOffset ; - } - - - -}; - -#endif //BT_DEFAULT_MOTION_STATE_H diff --git a/src/BulletCommon/btIDebugDraw.h b/src/BulletCommon/btIDebugDraw.h deleted file mode 100644 index 33efaa65b..000000000 --- a/src/BulletCommon/btIDebugDraw.h +++ /dev/null @@ -1,411 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -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. -*/ - - -#ifndef BT_IDEBUG_DRAW__H -#define BT_IDEBUG_DRAW__H - -#include "btVector3.h" -#include "btTransform.h" - - -///The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations. -///Typical use case: create a debug drawer object, and assign it to a btCollisionWorld or btDynamicsWorld using setDebugDrawer and call debugDrawWorld. -///A class that implements the btIDebugDraw interface has to implement the drawLine method at a minimum. -///For color arguments the X,Y,Z components refer to Red, Green and Blue each in the range [0..1] -class btIDebugDraw -{ - public: - - enum DebugDrawModes - { - DBG_NoDebug=0, - DBG_DrawWireframe = 1, - DBG_DrawAabb=2, - DBG_DrawFeaturesText=4, - DBG_DrawContactPoints=8, - DBG_NoDeactivation=16, - DBG_NoHelpText = 32, - DBG_DrawText=64, - DBG_ProfileTimings = 128, - DBG_EnableSatComparison = 256, - DBG_DisableBulletLCP = 512, - DBG_EnableCCD = 1024, - DBG_DrawConstraints = (1 << 11), - DBG_DrawConstraintLimits = (1 << 12), - DBG_FastWireframe = (1<<13), - DBG_DrawNormals = (1<<14), - DBG_DrawBroadphasePairs= (1<<15), - - DBG_MAX_DEBUG_DRAW_MODE - }; - - virtual ~btIDebugDraw() {}; - - virtual void drawLine(const btVector3& from,const btVector3& to,const btVector3& color)=0; - - virtual void drawLine(const btVector3& from,const btVector3& to, const btVector3& fromColor, const btVector3& toColor) - { - (void) toColor; - drawLine (from, to, fromColor); - } - - virtual void drawSphere(btScalar radius, const btTransform& transform, const btVector3& color) - { - - btVector3 start = transform.getOrigin(); - - - const btVector3 xoffs = transform.getBasis() * btVector3(1,0,0); - const btVector3 yoffs = transform.getBasis() * btVector3(0,1,0); - const btVector3 zoffs = transform.getBasis() * btVector3(0,0,1); - - drawArc(start,xoffs,yoffs,radius,radius,0,SIMD_2_PI,color,true,btScalar(10.0)); - drawArc(start,yoffs,zoffs,radius,radius,0,SIMD_2_PI,color,true,btScalar(10.0)); - drawArc(start,zoffs,xoffs,radius,radius,0,SIMD_2_PI,color,true,btScalar(10.0)); -// drawArc(start,zoffs,yoffs,radius,radius,0,SIMD_2_PI,color,false,btScalar(10.0)); - - } - - virtual void drawSphere (const btVector3& p, btScalar radius, const btVector3& color) - { - btTransform tr; - tr.setIdentity(); - tr.setOrigin(p); - drawSphere(radius,tr,color); - } - - virtual void drawTriangle(const btVector3& v0,const btVector3& v1,const btVector3& v2,const btVector3& /*n0*/,const btVector3& /*n1*/,const btVector3& /*n2*/,const btVector3& color, btScalar alpha) - { - drawTriangle(v0,v1,v2,color,alpha); - } - virtual void drawTriangle(const btVector3& v0,const btVector3& v1,const btVector3& v2,const btVector3& color, btScalar /*alpha*/) - { - drawLine(v0,v1,color); - drawLine(v1,v2,color); - drawLine(v2,v0,color); - } - - virtual void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color)=0; - - virtual void reportErrorWarning(const char* warningString) = 0; - - virtual void draw3dText(const btVector3& location,const char* textString) = 0; - - virtual void setDebugMode(int debugMode) =0; - - virtual int getDebugMode() const = 0; - - virtual void drawAabb(const btVector3& from,const btVector3& to,const btVector3& color) - { - - btVector3 halfExtents = (to-from)* 0.5f; - btVector3 center = (to+from) *0.5f; - int i,j; - - btVector3 edgecoord(1.f,1.f,1.f),pa,pb; - for (i=0;i<4;i++) - { - for (j=0;j<3;j++) - { - pa = btVector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1], - edgecoord[2]*halfExtents[2]); - pa+=center; - - int othercoord = j%3; - edgecoord[othercoord]*=-1.f; - pb = btVector3(edgecoord[0]*halfExtents[0], edgecoord[1]*halfExtents[1], - edgecoord[2]*halfExtents[2]); - pb+=center; - - drawLine(pa,pb,color); - } - edgecoord = btVector3(-1.f,-1.f,-1.f); - if (i<3) - edgecoord[i]*=-1.f; - } - } - virtual void drawTransform(const btTransform& transform, btScalar orthoLen) - { - btVector3 start = transform.getOrigin(); - drawLine(start, start+transform.getBasis() * btVector3(orthoLen, 0, 0), btVector3(0.7f,0,0)); - drawLine(start, start+transform.getBasis() * btVector3(0, orthoLen, 0), btVector3(0,0.7f,0)); - drawLine(start, start+transform.getBasis() * btVector3(0, 0, orthoLen), btVector3(0,0,0.7f)); - } - - virtual void drawArc(const btVector3& center, const btVector3& normal, const btVector3& axis, btScalar radiusA, btScalar radiusB, btScalar minAngle, btScalar maxAngle, - const btVector3& color, bool drawSect, btScalar stepDegrees = btScalar(10.f)) - { - const btVector3& vx = axis; - btVector3 vy = normal.cross(axis); - btScalar step = stepDegrees * SIMD_RADS_PER_DEG; - int nSteps = (int)((maxAngle - minAngle) / step); - if(!nSteps) nSteps = 1; - btVector3 prev = center + radiusA * vx * btCos(minAngle) + radiusB * vy * btSin(minAngle); - if(drawSect) - { - drawLine(center, prev, color); - } - for(int i = 1; i <= nSteps; i++) - { - btScalar angle = minAngle + (maxAngle - minAngle) * btScalar(i) / btScalar(nSteps); - btVector3 next = center + radiusA * vx * btCos(angle) + radiusB * vy * btSin(angle); - drawLine(prev, next, color); - prev = next; - } - if(drawSect) - { - drawLine(center, prev, color); - } - } - virtual void drawSpherePatch(const btVector3& center, const btVector3& up, const btVector3& axis, btScalar radius, - btScalar minTh, btScalar maxTh, btScalar minPs, btScalar maxPs, const btVector3& color, btScalar stepDegrees = btScalar(10.f)) - { - btVector3 vA[74]; - btVector3 vB[74]; - btVector3 *pvA = vA, *pvB = vB, *pT; - btVector3 npole = center + up * radius; - btVector3 spole = center - up * radius; - btVector3 arcStart; - btScalar step = stepDegrees * SIMD_RADS_PER_DEG; - const btVector3& kv = up; - const btVector3& iv = axis; - btVector3 jv = kv.cross(iv); - bool drawN = false; - bool drawS = false; - if(minTh <= -SIMD_HALF_PI) - { - minTh = -SIMD_HALF_PI + step; - drawN = true; - } - if(maxTh >= SIMD_HALF_PI) - { - maxTh = SIMD_HALF_PI - step; - drawS = true; - } - if(minTh > maxTh) - { - minTh = -SIMD_HALF_PI + step; - maxTh = SIMD_HALF_PI - step; - drawN = drawS = true; - } - int n_hor = (int)((maxTh - minTh) / step) + 1; - if(n_hor < 2) n_hor = 2; - btScalar step_h = (maxTh - minTh) / btScalar(n_hor - 1); - bool isClosed = false; - if(minPs > maxPs) - { - minPs = -SIMD_PI + step; - maxPs = SIMD_PI; - isClosed = true; - } - else if((maxPs - minPs) >= SIMD_PI * btScalar(2.f)) - { - isClosed = true; - } - else - { - isClosed = false; - } - int n_vert = (int)((maxPs - minPs) / step) + 1; - if(n_vert < 2) n_vert = 2; - btScalar step_v = (maxPs - minPs) / btScalar(n_vert - 1); - for(int i = 0; i < n_hor; i++) - { - btScalar th = minTh + btScalar(i) * step_h; - btScalar sth = radius * btSin(th); - btScalar cth = radius * btCos(th); - for(int j = 0; j < n_vert; j++) - { - btScalar psi = minPs + btScalar(j) * step_v; - btScalar sps = btSin(psi); - btScalar cps = btCos(psi); - pvB[j] = center + cth * cps * iv + cth * sps * jv + sth * kv; - if(i) - { - drawLine(pvA[j], pvB[j], color); - } - else if(drawS) - { - drawLine(spole, pvB[j], color); - } - if(j) - { - drawLine(pvB[j-1], pvB[j], color); - } - else - { - arcStart = pvB[j]; - } - if((i == (n_hor - 1)) && drawN) - { - drawLine(npole, pvB[j], color); - } - if(isClosed) - { - if(j == (n_vert-1)) - { - drawLine(arcStart, pvB[j], color); - } - } - else - { - if(((!i) || (i == (n_hor-1))) && ((!j) || (j == (n_vert-1)))) - { - drawLine(center, pvB[j], color); - } - } - } - pT = pvA; pvA = pvB; pvB = pT; - } - } - - - virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btVector3& color) - { - drawLine(btVector3(bbMin[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMin[1], bbMin[2]), color); - drawLine(btVector3(bbMax[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMax[1], bbMin[2]), color); - drawLine(btVector3(bbMax[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMax[1], bbMin[2]), color); - drawLine(btVector3(bbMin[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMin[1], bbMin[2]), color); - drawLine(btVector3(bbMin[0], bbMin[1], bbMin[2]), btVector3(bbMin[0], bbMin[1], bbMax[2]), color); - drawLine(btVector3(bbMax[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMin[1], bbMax[2]), color); - drawLine(btVector3(bbMax[0], bbMax[1], bbMin[2]), btVector3(bbMax[0], bbMax[1], bbMax[2]), color); - drawLine(btVector3(bbMin[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMax[1], bbMax[2]), color); - drawLine(btVector3(bbMin[0], bbMin[1], bbMax[2]), btVector3(bbMax[0], bbMin[1], bbMax[2]), color); - drawLine(btVector3(bbMax[0], bbMin[1], bbMax[2]), btVector3(bbMax[0], bbMax[1], bbMax[2]), color); - drawLine(btVector3(bbMax[0], bbMax[1], bbMax[2]), btVector3(bbMin[0], bbMax[1], bbMax[2]), color); - drawLine(btVector3(bbMin[0], bbMax[1], bbMax[2]), btVector3(bbMin[0], bbMin[1], bbMax[2]), color); - } - virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btTransform& trans, const btVector3& color) - { - drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), color); - drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), color); - drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), color); - drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), color); - drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), color); - drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), color); - drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), color); - drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), color); - drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), color); - drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), color); - drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), color); - drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), color); - } - - virtual void drawCapsule(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color) - { - btVector3 capStart(0.f,0.f,0.f); - capStart[upAxis] = -halfHeight; - - btVector3 capEnd(0.f,0.f,0.f); - capEnd[upAxis] = halfHeight; - - // Draw the ends - { - - btTransform childTransform = transform; - childTransform.getOrigin() = transform * capStart; - drawSphere(radius, childTransform, color); - } - - { - btTransform childTransform = transform; - childTransform.getOrigin() = transform * capEnd; - drawSphere(radius, childTransform, color); - } - - // Draw some additional lines - btVector3 start = transform.getOrigin(); - - capStart[(upAxis+1)%3] = radius; - capEnd[(upAxis+1)%3] = radius; - drawLine(start+transform.getBasis() * capStart,start+transform.getBasis() * capEnd, color); - capStart[(upAxis+1)%3] = -radius; - capEnd[(upAxis+1)%3] = -radius; - drawLine(start+transform.getBasis() * capStart,start+transform.getBasis() * capEnd, color); - - capStart[(upAxis+1)%3] = 0.f; - capEnd[(upAxis+1)%3] = 0.f; - - capStart[(upAxis+2)%3] = radius; - capEnd[(upAxis+2)%3] = radius; - drawLine(start+transform.getBasis() * capStart,start+transform.getBasis() * capEnd, color); - capStart[(upAxis+2)%3] = -radius; - capEnd[(upAxis+2)%3] = -radius; - drawLine(start+transform.getBasis() * capStart,start+transform.getBasis() * capEnd, color); - } - - virtual void drawCylinder(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color) - { - btVector3 start = transform.getOrigin(); - btVector3 offsetHeight(0,0,0); - offsetHeight[upAxis] = halfHeight; - btVector3 offsetRadius(0,0,0); - offsetRadius[(upAxis+1)%3] = radius; - drawLine(start+transform.getBasis() * (offsetHeight+offsetRadius),start+transform.getBasis() * (-offsetHeight+offsetRadius),color); - drawLine(start+transform.getBasis() * (offsetHeight-offsetRadius),start+transform.getBasis() * (-offsetHeight-offsetRadius),color); - - // Drawing top and bottom caps of the cylinder - btVector3 yaxis(0,0,0); - yaxis[upAxis] = btScalar(1.0); - btVector3 xaxis(0,0,0); - xaxis[(upAxis+1)%3] = btScalar(1.0); - drawArc(start-transform.getBasis()*(offsetHeight),transform.getBasis()*yaxis,transform.getBasis()*xaxis,radius,radius,0,SIMD_2_PI,color,false,btScalar(10.0)); - drawArc(start+transform.getBasis()*(offsetHeight),transform.getBasis()*yaxis,transform.getBasis()*xaxis,radius,radius,0,SIMD_2_PI,color,false,btScalar(10.0)); - } - - virtual void drawCone(btScalar radius, btScalar height, int upAxis, const btTransform& transform, const btVector3& color) - { - - btVector3 start = transform.getOrigin(); - - btVector3 offsetHeight(0,0,0); - offsetHeight[upAxis] = height * btScalar(0.5); - btVector3 offsetRadius(0,0,0); - offsetRadius[(upAxis+1)%3] = radius; - btVector3 offset2Radius(0,0,0); - offset2Radius[(upAxis+2)%3] = radius; - - drawLine(start+transform.getBasis() * (offsetHeight),start+transform.getBasis() * (-offsetHeight+offsetRadius),color); - drawLine(start+transform.getBasis() * (offsetHeight),start+transform.getBasis() * (-offsetHeight-offsetRadius),color); - drawLine(start+transform.getBasis() * (offsetHeight),start+transform.getBasis() * (-offsetHeight+offset2Radius),color); - drawLine(start+transform.getBasis() * (offsetHeight),start+transform.getBasis() * (-offsetHeight-offset2Radius),color); - - // Drawing the base of the cone - btVector3 yaxis(0,0,0); - yaxis[upAxis] = btScalar(1.0); - btVector3 xaxis(0,0,0); - xaxis[(upAxis+1)%3] = btScalar(1.0); - drawArc(start-transform.getBasis()*(offsetHeight),transform.getBasis()*yaxis,transform.getBasis()*xaxis,radius,radius,0,SIMD_2_PI,color,false,10.0); - } - - virtual void drawPlane(const btVector3& planeNormal, btScalar planeConst, const btTransform& transform, const btVector3& color) - { - btVector3 planeOrigin = planeNormal * planeConst; - btVector3 vec0,vec1; - btPlaneSpace1(planeNormal,vec0,vec1); - btScalar vecLen = 100.f; - btVector3 pt0 = planeOrigin + vec0*vecLen; - btVector3 pt1 = planeOrigin - vec0*vecLen; - btVector3 pt2 = planeOrigin + vec1*vecLen; - btVector3 pt3 = planeOrigin - vec1*vecLen; - drawLine(transform*pt0,transform*pt1,color); - drawLine(transform*pt2,transform*pt3,color); - } -}; - - -#endif //BT_IDEBUG_DRAW__H - diff --git a/src/BulletCommon/btList.h b/src/BulletCommon/btList.h deleted file mode 100644 index eec80a706..000000000 --- a/src/BulletCommon/btList.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ - -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. -*/ - - - -#ifndef BT_GEN_LIST_H -#define BT_GEN_LIST_H - -class btGEN_Link { -public: - btGEN_Link() : m_next(0), m_prev(0) {} - btGEN_Link(btGEN_Link *next, btGEN_Link *prev) : m_next(next), m_prev(prev) {} - - btGEN_Link *getNext() const { return m_next; } - btGEN_Link *getPrev() const { return m_prev; } - - bool isHead() const { return m_prev == 0; } - bool isTail() const { return m_next == 0; } - - void insertBefore(btGEN_Link *link) { - m_next = link; - m_prev = link->m_prev; - m_next->m_prev = this; - m_prev->m_next = this; - } - - void insertAfter(btGEN_Link *link) { - m_next = link->m_next; - m_prev = link; - m_next->m_prev = this; - m_prev->m_next = this; - } - - void remove() { - m_next->m_prev = m_prev; - m_prev->m_next = m_next; - } - -private: - btGEN_Link *m_next; - btGEN_Link *m_prev; -}; - -class btGEN_List { -public: - btGEN_List() : m_head(&m_tail, 0), m_tail(0, &m_head) {} - - btGEN_Link *getHead() const { return m_head.getNext(); } - btGEN_Link *getTail() const { return m_tail.getPrev(); } - - void addHead(btGEN_Link *link) { link->insertAfter(&m_head); } - void addTail(btGEN_Link *link) { link->insertBefore(&m_tail); } - -private: - btGEN_Link m_head; - btGEN_Link m_tail; -}; - -#endif //BT_GEN_LIST_H - - - diff --git a/src/BulletCommon/btMotionState.h b/src/BulletCommon/btMotionState.h deleted file mode 100644 index 943181409..000000000 --- a/src/BulletCommon/btMotionState.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ - -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. -*/ - -#ifndef BT_MOTIONSTATE_H -#define BT_MOTIONSTATE_H - -#include "btTransform.h" - -///The btMotionState interface class allows the dynamics world to synchronize and interpolate the updated world transforms with graphics -///For optimizations, potentially only moving objects get synchronized (using setWorldPosition/setWorldOrientation) -class btMotionState -{ - public: - - virtual ~btMotionState() - { - - } - - virtual void getWorldTransform(btTransform& worldTrans ) const =0; - - //Bullet only calls the update of worldtransform for active objects - virtual void setWorldTransform(const btTransform& worldTrans)=0; - - -}; - -#endif //BT_MOTIONSTATE_H diff --git a/src/BulletCommon/btTransformUtil.h b/src/BulletCommon/btTransformUtil.h deleted file mode 100644 index 4136ef5b1..000000000 --- a/src/BulletCommon/btTransformUtil.h +++ /dev/null @@ -1,228 +0,0 @@ -/* -Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/ - -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. -*/ - - -#ifndef BT_TRANSFORM_UTIL_H -#define BT_TRANSFORM_UTIL_H - -#include "btTransform.h" -#define ANGULAR_MOTION_THRESHOLD btScalar(0.5)*SIMD_HALF_PI - - - - -SIMD_FORCE_INLINE btVector3 btAabbSupport(const btVector3& halfExtents,const btVector3& supportDir) -{ - return btVector3(supportDir.getX() < btScalar(0.0) ? -halfExtents.getX() : halfExtents.getX(), - supportDir.getY() < btScalar(0.0) ? -halfExtents.getY() : halfExtents.getY(), - supportDir.getZ() < btScalar(0.0) ? -halfExtents.getZ() : halfExtents.getZ()); -} - - - - - - -/// Utils related to temporal transforms -class btTransformUtil -{ - -public: - - static void integrateTransform(const btTransform& curTrans,const btVector3& linvel,const btVector3& angvel,btScalar timeStep,btTransform& predictedTransform) - { - predictedTransform.setOrigin(curTrans.getOrigin() + linvel * timeStep); -// #define QUATERNION_DERIVATIVE - #ifdef QUATERNION_DERIVATIVE - btQuaternion predictedOrn = curTrans.getRotation(); - predictedOrn += (angvel * predictedOrn) * (timeStep * btScalar(0.5)); - predictedOrn.normalize(); - #else - //Exponential map - //google for "Practical Parameterization of Rotations Using the Exponential Map", F. Sebastian Grassia - - btVector3 axis; - btScalar fAngle = angvel.length(); - //limit the angular motion - if (fAngle*timeStep > ANGULAR_MOTION_THRESHOLD) - { - fAngle = ANGULAR_MOTION_THRESHOLD / timeStep; - } - - if ( fAngle < btScalar(0.001) ) - { - // use Taylor's expansions of sync function - axis = angvel*( btScalar(0.5)*timeStep-(timeStep*timeStep*timeStep)*(btScalar(0.020833333333))*fAngle*fAngle ); - } - else - { - // sync(fAngle) = sin(c*fAngle)/t - axis = angvel*( btSin(btScalar(0.5)*fAngle*timeStep)/fAngle ); - } - btQuaternion dorn (axis.getX(),axis.getY(),axis.getZ(),btCos( fAngle*timeStep*btScalar(0.5) )); - btQuaternion orn0 = curTrans.getRotation(); - - btQuaternion predictedOrn = dorn * orn0; - predictedOrn.normalize(); - #endif - predictedTransform.setRotation(predictedOrn); - } - - static void calculateVelocityQuaternion(const btVector3& pos0,const btVector3& pos1,const btQuaternion& orn0,const btQuaternion& orn1,btScalar timeStep,btVector3& linVel,btVector3& angVel) - { - linVel = (pos1 - pos0) / timeStep; - btVector3 axis; - btScalar angle; - if (orn0 != orn1) - { - calculateDiffAxisAngleQuaternion(orn0,orn1,axis,angle); - angVel = axis * angle / timeStep; - } else - { - angVel.setValue(0,0,0); - } - } - - static void calculateDiffAxisAngleQuaternion(const btQuaternion& orn0,const btQuaternion& orn1a,btVector3& axis,btScalar& angle) - { - btQuaternion orn1 = orn0.nearest(orn1a); - btQuaternion dorn = orn1 * orn0.inverse(); - angle = dorn.getAngle(); - axis = btVector3(dorn.getX(),dorn.getY(),dorn.getZ()); - axis[3] = btScalar(0.); - //check for axis length - btScalar len = axis.length2(); - if (len < SIMD_EPSILON*SIMD_EPSILON) - axis = btVector3(btScalar(1.),btScalar(0.),btScalar(0.)); - else - axis /= btSqrt(len); - } - - static void calculateVelocity(const btTransform& transform0,const btTransform& transform1,btScalar timeStep,btVector3& linVel,btVector3& angVel) - { - linVel = (transform1.getOrigin() - transform0.getOrigin()) / timeStep; - btVector3 axis; - btScalar angle; - calculateDiffAxisAngle(transform0,transform1,axis,angle); - angVel = axis * angle / timeStep; - } - - static void calculateDiffAxisAngle(const btTransform& transform0,const btTransform& transform1,btVector3& axis,btScalar& angle) - { - btMatrix3x3 dmat = transform1.getBasis() * transform0.getBasis().inverse(); - btQuaternion dorn; - dmat.getRotation(dorn); - - ///floating point inaccuracy can lead to w component > 1..., which breaks - dorn.normalize(); - - angle = dorn.getAngle(); - axis = btVector3(dorn.getX(),dorn.getY(),dorn.getZ()); - axis[3] = btScalar(0.); - //check for axis length - btScalar len = axis.length2(); - if (len < SIMD_EPSILON*SIMD_EPSILON) - axis = btVector3(btScalar(1.),btScalar(0.),btScalar(0.)); - else - axis /= btSqrt(len); - } - -}; - - -///The btConvexSeparatingDistanceUtil can help speed up convex collision detection -///by conservatively updating a cached separating distance/vector instead of re-calculating the closest distance -class btConvexSeparatingDistanceUtil -{ - btQuaternion m_ornA; - btQuaternion m_ornB; - btVector3 m_posA; - btVector3 m_posB; - - btVector3 m_separatingNormal; - - btScalar m_boundingRadiusA; - btScalar m_boundingRadiusB; - btScalar m_separatingDistance; - -public: - - btConvexSeparatingDistanceUtil(btScalar boundingRadiusA,btScalar boundingRadiusB) - :m_boundingRadiusA(boundingRadiusA), - m_boundingRadiusB(boundingRadiusB), - m_separatingDistance(0.f) - { - } - - btScalar getConservativeSeparatingDistance() - { - return m_separatingDistance; - } - - void updateSeparatingDistance(const btTransform& transA,const btTransform& transB) - { - const btVector3& toPosA = transA.getOrigin(); - const btVector3& toPosB = transB.getOrigin(); - btQuaternion toOrnA = transA.getRotation(); - btQuaternion toOrnB = transB.getRotation(); - - if (m_separatingDistance>0.f) - { - - - btVector3 linVelA,angVelA,linVelB,angVelB; - btTransformUtil::calculateVelocityQuaternion(m_posA,toPosA,m_ornA,toOrnA,btScalar(1.),linVelA,angVelA); - btTransformUtil::calculateVelocityQuaternion(m_posB,toPosB,m_ornB,toOrnB,btScalar(1.),linVelB,angVelB); - btScalar maxAngularProjectedVelocity = angVelA.length() * m_boundingRadiusA + angVelB.length() * m_boundingRadiusB; - btVector3 relLinVel = (linVelB-linVelA); - btScalar relLinVelocLength = relLinVel.dot(m_separatingNormal); - if (relLinVelocLength<0.f) - { - relLinVelocLength = 0.f; - } - - btScalar projectedMotion = maxAngularProjectedVelocity +relLinVelocLength; - m_separatingDistance -= projectedMotion; - } - - m_posA = toPosA; - m_posB = toPosB; - m_ornA = toOrnA; - m_ornB = toOrnB; - } - - void initSeparatingDistance(const btVector3& separatingVector,btScalar separatingDistance,const btTransform& transA,const btTransform& transB) - { - m_separatingDistance = separatingDistance; - - if (m_separatingDistance>0.f) - { - m_separatingNormal = separatingVector; - - const btVector3& toPosA = transA.getOrigin(); - const btVector3& toPosB = transB.getOrigin(); - btQuaternion toOrnA = transA.getRotation(); - btQuaternion toOrnB = transB.getRotation(); - m_posA = toPosA; - m_posB = toPosB; - m_ornA = toOrnA; - m_ornB = toOrnB; - } - } - -}; - - -#endif //BT_TRANSFORM_UTIL_H - diff --git a/src/BulletGeometry/btAabbUtil2.h b/src/BulletGeometry/btAabbUtil2.h index a9eb54e22..6adc555e8 100644 --- a/src/BulletGeometry/btAabbUtil2.h +++ b/src/BulletGeometry/btAabbUtil2.h @@ -17,24 +17,24 @@ subject to the following restrictions: #ifndef BT_AABB_UTIL2 #define BT_AABB_UTIL2 -#include "BulletCommon/btTransform.h" -#include "BulletCommon/btVector3.h" -#include "BulletCommon/btMinMax.h" +#include "BulletCommon/b3Transform.h" +#include "BulletCommon/b3Vector3.h" +#include "BulletCommon/b3MinMax.h" -SIMD_FORCE_INLINE void AabbExpand (btVector3& aabbMin, - btVector3& aabbMax, - const btVector3& expansionMin, - const btVector3& expansionMax) +SIMD_FORCE_INLINE void AabbExpand (b3Vector3& aabbMin, + b3Vector3& aabbMax, + const b3Vector3& expansionMin, + const b3Vector3& expansionMax) { aabbMin = aabbMin + expansionMin; aabbMax = aabbMax + expansionMax; } /// conservative test for overlap between two aabbs -SIMD_FORCE_INLINE bool TestPointAgainstAabb2(const btVector3 &aabbMin1, const btVector3 &aabbMax1, - const btVector3 &point) +SIMD_FORCE_INLINE bool TestPointAgainstAabb2(const b3Vector3 &aabbMin1, const b3Vector3 &aabbMax1, + const b3Vector3 &point) { bool overlap = true; overlap = (aabbMin1.getX() > point.getX() || aabbMax1.getX() < point.getX()) ? false : overlap; @@ -45,8 +45,8 @@ SIMD_FORCE_INLINE bool TestPointAgainstAabb2(const btVector3 &aabbMin1, const bt /// conservative test for overlap between two aabbs -SIMD_FORCE_INLINE bool TestAabbAgainstAabb2(const btVector3 &aabbMin1, const btVector3 &aabbMax1, - const btVector3 &aabbMin2, const btVector3 &aabbMax2) +SIMD_FORCE_INLINE bool TestAabbAgainstAabb2(const b3Vector3 &aabbMin1, const b3Vector3 &aabbMax1, + const b3Vector3 &aabbMin2, const b3Vector3 &aabbMax2) { bool overlap = true; overlap = (aabbMin1.getX() > aabbMax2.getX() || aabbMax1.getX() < aabbMin2.getX()) ? false : overlap; @@ -56,12 +56,12 @@ SIMD_FORCE_INLINE bool TestAabbAgainstAabb2(const btVector3 &aabbMin1, const btV } /// conservative test for overlap between triangle and aabb -SIMD_FORCE_INLINE bool TestTriangleAgainstAabb2(const btVector3 *vertices, - const btVector3 &aabbMin, const btVector3 &aabbMax) +SIMD_FORCE_INLINE bool TestTriangleAgainstAabb2(const b3Vector3 *vertices, + const b3Vector3 &aabbMin, const b3Vector3 &aabbMax) { - const btVector3 &p1 = vertices[0]; - const btVector3 &p2 = vertices[1]; - const btVector3 &p3 = vertices[2]; + const b3Vector3 &p1 = vertices[0]; + const b3Vector3 &p2 = vertices[1]; + const b3Vector3 &p3 = vertices[2]; if (btMin(btMin(p1[0], p2[0]), p3[0]) > aabbMax[0]) return false; if (btMax(btMax(p1[0], p2[0]), p3[0]) < aabbMin[0]) return false; @@ -75,7 +75,7 @@ SIMD_FORCE_INLINE bool TestTriangleAgainstAabb2(const btVector3 *vertices, } -SIMD_FORCE_INLINE int btOutcode(const btVector3& p,const btVector3& halfExtent) +SIMD_FORCE_INLINE int btOutcode(const b3Vector3& p,const b3Vector3& halfExtent) { return (p.getX() < -halfExtent.getX() ? 0x01 : 0x0) | (p.getX() > halfExtent.getX() ? 0x08 : 0x0) | @@ -87,15 +87,15 @@ SIMD_FORCE_INLINE int btOutcode(const btVector3& p,const btVector3& halfExtent) -SIMD_FORCE_INLINE bool btRayAabb2(const btVector3& rayFrom, - const btVector3& rayInvDirection, +SIMD_FORCE_INLINE bool btRayAabb2(const b3Vector3& rayFrom, + const b3Vector3& rayInvDirection, const unsigned int raySign[3], - const btVector3 bounds[2], - btScalar& tmin, - btScalar lambda_min, - btScalar lambda_max) + const b3Vector3 bounds[2], + b3Scalar& tmin, + b3Scalar lambda_min, + b3Scalar lambda_max) { - btScalar tmax, tymin, tymax, tzmin, tzmax; + b3Scalar tmax, tymin, tymax, tzmin, tzmax; tmin = (bounds[raySign[0]].getX() - rayFrom.getX()) * rayInvDirection.getX(); tmax = (bounds[1-raySign[0]].getX() - rayFrom.getX()) * rayInvDirection.getX(); tymin = (bounds[raySign[1]].getY() - rayFrom.getY()) * rayInvDirection.getY(); @@ -122,26 +122,26 @@ SIMD_FORCE_INLINE bool btRayAabb2(const btVector3& rayFrom, return ( (tmin < lambda_max) && (tmax > lambda_min) ); } -SIMD_FORCE_INLINE bool btRayAabb(const btVector3& rayFrom, - const btVector3& rayTo, - const btVector3& aabbMin, - const btVector3& aabbMax, - btScalar& param, btVector3& normal) +SIMD_FORCE_INLINE bool btRayAabb(const b3Vector3& rayFrom, + const b3Vector3& rayTo, + const b3Vector3& aabbMin, + const b3Vector3& aabbMax, + b3Scalar& param, b3Vector3& normal) { - btVector3 aabbHalfExtent = (aabbMax-aabbMin)* btScalar(0.5); - btVector3 aabbCenter = (aabbMax+aabbMin)* btScalar(0.5); - btVector3 source = rayFrom - aabbCenter; - btVector3 target = rayTo - aabbCenter; + b3Vector3 aabbHalfExtent = (aabbMax-aabbMin)* b3Scalar(0.5); + b3Vector3 aabbCenter = (aabbMax+aabbMin)* b3Scalar(0.5); + b3Vector3 source = rayFrom - aabbCenter; + b3Vector3 target = rayTo - aabbCenter; int sourceOutcode = btOutcode(source,aabbHalfExtent); int targetOutcode = btOutcode(target,aabbHalfExtent); if ((sourceOutcode & targetOutcode) == 0x0) { - btScalar lambda_enter = btScalar(0.0); - btScalar lambda_exit = param; - btVector3 r = target - source; + b3Scalar lambda_enter = b3Scalar(0.0); + b3Scalar lambda_exit = param; + b3Vector3 r = target - source; int i; - btScalar normSign = 1; - btVector3 hitNormal(0,0,0); + b3Scalar normSign = 1; + b3Vector3 hitNormal(0,0,0); int bit=1; for (int j=0;j<2;j++) @@ -150,7 +150,7 @@ SIMD_FORCE_INLINE bool btRayAabb(const btVector3& rayFrom, { if (sourceOutcode & bit) { - btScalar lambda = (-source[i] - aabbHalfExtent[i]*normSign) / r[i]; + b3Scalar lambda = (-source[i] - aabbHalfExtent[i]*normSign) / r[i]; if (lambda_enter <= lambda) { lambda_enter = lambda; @@ -160,12 +160,12 @@ SIMD_FORCE_INLINE bool btRayAabb(const btVector3& rayFrom, } else if (targetOutcode & bit) { - btScalar lambda = (-source[i] - aabbHalfExtent[i]*normSign) / r[i]; + b3Scalar lambda = (-source[i] - aabbHalfExtent[i]*normSign) / r[i]; btSetMin(lambda_exit, lambda); } bit<<=1; } - normSign = btScalar(-1.); + normSign = b3Scalar(-1.); } if (lambda_enter <= lambda_exit) { @@ -179,29 +179,29 @@ SIMD_FORCE_INLINE bool btRayAabb(const btVector3& rayFrom, -SIMD_FORCE_INLINE void btTransformAabb(const btVector3& halfExtents, btScalar margin,const btTransform& t,btVector3& aabbMinOut,btVector3& aabbMaxOut) +SIMD_FORCE_INLINE void btTransformAabb(const b3Vector3& halfExtents, b3Scalar margin,const b3Transform& t,b3Vector3& aabbMinOut,b3Vector3& aabbMaxOut) { - btVector3 halfExtentsWithMargin = halfExtents+btVector3(margin,margin,margin); - btMatrix3x3 abs_b = t.getBasis().absolute(); - btVector3 center = t.getOrigin(); - btVector3 extent = halfExtentsWithMargin.dot3( abs_b[0], abs_b[1], abs_b[2] ); + b3Vector3 halfExtentsWithMargin = halfExtents+b3Vector3(margin,margin,margin); + b3Matrix3x3 abs_b = t.getBasis().absolute(); + b3Vector3 center = t.getOrigin(); + b3Vector3 extent = halfExtentsWithMargin.dot3( abs_b[0], abs_b[1], abs_b[2] ); aabbMinOut = center - extent; aabbMaxOut = center + extent; } -SIMD_FORCE_INLINE void btTransformAabb(const btVector3& localAabbMin,const btVector3& localAabbMax, btScalar margin,const btTransform& trans,btVector3& aabbMinOut,btVector3& aabbMaxOut) +SIMD_FORCE_INLINE void btTransformAabb(const b3Vector3& localAabbMin,const b3Vector3& localAabbMax, b3Scalar margin,const b3Transform& trans,b3Vector3& aabbMinOut,b3Vector3& aabbMaxOut) { btAssert(localAabbMin.getX() <= localAabbMax.getX()); btAssert(localAabbMin.getY() <= localAabbMax.getY()); btAssert(localAabbMin.getZ() <= localAabbMax.getZ()); - btVector3 localHalfExtents = btScalar(0.5)*(localAabbMax-localAabbMin); - localHalfExtents+=btVector3(margin,margin,margin); + b3Vector3 localHalfExtents = b3Scalar(0.5)*(localAabbMax-localAabbMin); + localHalfExtents+=b3Vector3(margin,margin,margin); - btVector3 localCenter = btScalar(0.5)*(localAabbMax+localAabbMin); - btMatrix3x3 abs_b = trans.getBasis().absolute(); - btVector3 center = trans(localCenter); - btVector3 extent = localHalfExtents.dot3( abs_b[0], abs_b[1], abs_b[2] ); + b3Vector3 localCenter = b3Scalar(0.5)*(localAabbMax+localAabbMin); + b3Matrix3x3 abs_b = trans.getBasis().absolute(); + b3Vector3 center = trans(localCenter); + b3Vector3 extent = localHalfExtents.dot3( abs_b[0], abs_b[1], abs_b[2] ); aabbMinOut = center-extent; aabbMaxOut = center+extent; } diff --git a/src/BulletGeometry/btConvexHull.cpp b/src/BulletGeometry/btConvexHull.cpp index bd20db41f..8786af3f1 100644 --- a/src/BulletGeometry/btConvexHull.cpp +++ b/src/BulletGeometry/btConvexHull.cpp @@ -16,9 +16,9 @@ subject to the following restrictions: #include #include "btConvexHull.h" -#include "BulletCommon/btAlignedObjectArray.h" -#include "BulletCommon/btMinMax.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3AlignedObjectArray.h" +#include "BulletCommon/b3MinMax.h" +#include "BulletCommon/b3Vector3.h" @@ -47,77 +47,77 @@ inline int coplanar( const btPlane &a, const btPlane &b ) { return (a==b || a==P //--------- Utility Functions ------ -btVector3 PlaneLineIntersection(const btPlane &plane, const btVector3 &p0, const btVector3 &p1); -btVector3 PlaneProject(const btPlane &plane, const btVector3 &point); +b3Vector3 PlaneLineIntersection(const btPlane &plane, const b3Vector3 &p0, const b3Vector3 &p1); +b3Vector3 PlaneProject(const btPlane &plane, const b3Vector3 &point); -btVector3 ThreePlaneIntersection(const btPlane &p0,const btPlane &p1, const btPlane &p2); -btVector3 ThreePlaneIntersection(const btPlane &p0,const btPlane &p1, const btPlane &p2) +b3Vector3 ThreePlaneIntersection(const btPlane &p0,const btPlane &p1, const btPlane &p2); +b3Vector3 ThreePlaneIntersection(const btPlane &p0,const btPlane &p1, const btPlane &p2) { - btVector3 N1 = p0.normal; - btVector3 N2 = p1.normal; - btVector3 N3 = p2.normal; + b3Vector3 N1 = p0.normal; + b3Vector3 N2 = p1.normal; + b3Vector3 N3 = p2.normal; - btVector3 n2n3; n2n3 = N2.cross(N3); - btVector3 n3n1; n3n1 = N3.cross(N1); - btVector3 n1n2; n1n2 = N1.cross(N2); + b3Vector3 n2n3; n2n3 = N2.cross(N3); + b3Vector3 n3n1; n3n1 = N3.cross(N1); + b3Vector3 n1n2; n1n2 = N1.cross(N2); - btScalar quotient = (N1.dot(n2n3)); + b3Scalar quotient = (N1.dot(n2n3)); - btAssert(btFabs(quotient) > btScalar(0.000001)); + btAssert(btFabs(quotient) > b3Scalar(0.000001)); - quotient = btScalar(-1.) / quotient; + quotient = b3Scalar(-1.) / quotient; n2n3 *= p0.dist; n3n1 *= p1.dist; n1n2 *= p2.dist; - btVector3 potentialVertex = n2n3; + b3Vector3 potentialVertex = n2n3; potentialVertex += n3n1; potentialVertex += n1n2; potentialVertex *= quotient; - btVector3 result(potentialVertex.getX(),potentialVertex.getY(),potentialVertex.getZ()); + b3Vector3 result(potentialVertex.getX(),potentialVertex.getY(),potentialVertex.getZ()); return result; } -btScalar DistanceBetweenLines(const btVector3 &ustart, const btVector3 &udir, const btVector3 &vstart, const btVector3 &vdir, btVector3 *upoint=NULL, btVector3 *vpoint=NULL); -btVector3 TriNormal(const btVector3 &v0, const btVector3 &v1, const btVector3 &v2); -btVector3 NormalOf(const btVector3 *vert, const int n); +b3Scalar DistanceBetweenLines(const b3Vector3 &ustart, const b3Vector3 &udir, const b3Vector3 &vstart, const b3Vector3 &vdir, b3Vector3 *upoint=NULL, b3Vector3 *vpoint=NULL); +b3Vector3 TriNormal(const b3Vector3 &v0, const b3Vector3 &v1, const b3Vector3 &v2); +b3Vector3 NormalOf(const b3Vector3 *vert, const int n); -btVector3 PlaneLineIntersection(const btPlane &plane, const btVector3 &p0, const btVector3 &p1) +b3Vector3 PlaneLineIntersection(const btPlane &plane, const b3Vector3 &p0, const b3Vector3 &p1) { // returns the point where the line p0-p1 intersects the plane n&d - static btVector3 dif; + static b3Vector3 dif; dif = p1-p0; - btScalar dn= btDot(plane.normal,dif); - btScalar t = -(plane.dist+btDot(plane.normal,p0) )/dn; + b3Scalar dn= btDot(plane.normal,dif); + b3Scalar t = -(plane.dist+btDot(plane.normal,p0) )/dn; return p0 + (dif*t); } -btVector3 PlaneProject(const btPlane &plane, const btVector3 &point) +b3Vector3 PlaneProject(const btPlane &plane, const b3Vector3 &point) { return point - plane.normal * (btDot(point,plane.normal)+plane.dist); } -btVector3 TriNormal(const btVector3 &v0, const btVector3 &v1, const btVector3 &v2) +b3Vector3 TriNormal(const b3Vector3 &v0, const b3Vector3 &v1, const b3Vector3 &v2) { // return the normal of the triangle // inscribed by v0, v1, and v2 - btVector3 cp=btCross(v1-v0,v2-v1); - btScalar m=cp.length(); - if(m==0) return btVector3(1,0,0); - return cp*(btScalar(1.0)/m); + b3Vector3 cp=btCross(v1-v0,v2-v1); + b3Scalar m=cp.length(); + if(m==0) return b3Vector3(1,0,0); + return cp*(b3Scalar(1.0)/m); } -btScalar DistanceBetweenLines(const btVector3 &ustart, const btVector3 &udir, const btVector3 &vstart, const btVector3 &vdir, btVector3 *upoint, btVector3 *vpoint) +b3Scalar DistanceBetweenLines(const b3Vector3 &ustart, const b3Vector3 &udir, const b3Vector3 &vstart, const b3Vector3 &vdir, b3Vector3 *upoint, b3Vector3 *vpoint) { - static btVector3 cp; + static b3Vector3 cp; cp = btCross(udir,vdir).normalized(); - btScalar distu = -btDot(cp,ustart); - btScalar distv = -btDot(cp,vstart); - btScalar dist = (btScalar)fabs(distu-distv); + b3Scalar distu = -btDot(cp,ustart); + b3Scalar distv = -btDot(cp,vstart); + b3Scalar dist = (b3Scalar)fabs(distu-distv); if(upoint) { btPlane plane; @@ -145,9 +145,9 @@ btScalar DistanceBetweenLines(const btVector3 &ustart, const btVector3 &udir, co #define UNDER (1) #define OVER (2) #define SPLIT (OVER|UNDER) -#define PAPERWIDTH (btScalar(0.001)) +#define PAPERWIDTH (b3Scalar(0.001)) -btScalar planetestepsilon = PAPERWIDTH; +b3Scalar planetestepsilon = PAPERWIDTH; @@ -161,9 +161,9 @@ ConvexH::ConvexH(int vertices_size,int edges_size,int facets_size) } -int PlaneTest(const btPlane &p, const btVector3 &v); -int PlaneTest(const btPlane &p, const btVector3 &v) { - btScalar a = btDot(v,p.normal)+p.dist; +int PlaneTest(const btPlane &p, const b3Vector3 &v); +int PlaneTest(const btPlane &p, const b3Vector3 &v) { + b3Scalar a = btDot(v,p.normal)+p.dist; int flag = (a>planetestepsilon)?OVER:((a<-planetestepsilon)?UNDER:COPLANAR); return flag; } @@ -214,7 +214,7 @@ public: template -int maxdirfiltered(const T *p,int count,const T &dir,btAlignedObjectArray &allow) +int maxdirfiltered(const T *p,int count,const T &dir,b3AlignedObjectArray &allow) { btAssert(count); int m=-1; @@ -228,11 +228,11 @@ int maxdirfiltered(const T *p,int count,const T &dir,btAlignedObjectArray & return m; } -btVector3 orth(const btVector3 &v); -btVector3 orth(const btVector3 &v) +b3Vector3 orth(const b3Vector3 &v); +b3Vector3 orth(const b3Vector3 &v) { - btVector3 a=btCross(v,btVector3(0,0,1)); - btVector3 b=btCross(v,btVector3(0,1,0)); + b3Vector3 a=btCross(v,b3Vector3(0,0,1)); + b3Vector3 b=btCross(v,b3Vector3(0,1,0)); if (a.length() > b.length()) { return a.normalized(); @@ -243,7 +243,7 @@ btVector3 orth(const btVector3 &v) template -int maxdirsterid(const T *p,int count,const T &dir,btAlignedObjectArray &allow) +int maxdirsterid(const T *p,int count,const T &dir,b3AlignedObjectArray &allow) { int m=-1; while(m==-1) @@ -253,11 +253,11 @@ int maxdirsterid(const T *p,int count,const T &dir,btAlignedObjectArray &al T u = orth(dir); T v = btCross(u,dir); int ma=-1; - for(btScalar x = btScalar(0.0) ; x<= btScalar(360.0) ; x+= btScalar(45.0)) + for(b3Scalar x = b3Scalar(0.0) ; x<= b3Scalar(360.0) ; x+= b3Scalar(45.0)) { - btScalar s = btSin(SIMD_RADS_PER_DEG*(x)); - btScalar c = btCos(SIMD_RADS_PER_DEG*(x)); - int mb = maxdirfiltered(p,count,dir+(u*s+v*c)*btScalar(0.025),allow); + b3Scalar s = btSin(SIMD_RADS_PER_DEG*(x)); + b3Scalar c = btCos(SIMD_RADS_PER_DEG*(x)); + int mb = maxdirfiltered(p,count,dir+(u*s+v*c)*b3Scalar(0.025),allow); if(ma==m && mb==m) { allow[m]=3; @@ -266,11 +266,11 @@ int maxdirsterid(const T *p,int count,const T &dir,btAlignedObjectArray &al if(ma!=-1 && ma!=mb) // Yuck - this is really ugly { int mc = ma; - for(btScalar xx = x-btScalar(40.0) ; xx <= x ; xx+= btScalar(5.0)) + for(b3Scalar xx = x-b3Scalar(40.0) ; xx <= x ; xx+= b3Scalar(5.0)) { - btScalar s = btSin(SIMD_RADS_PER_DEG*(xx)); - btScalar c = btCos(SIMD_RADS_PER_DEG*(xx)); - int md = maxdirfiltered(p,count,dir+(u*s+v*c)*btScalar(0.025),allow); + b3Scalar s = btSin(SIMD_RADS_PER_DEG*(xx)); + b3Scalar c = btCos(SIMD_RADS_PER_DEG*(xx)); + int md = maxdirfiltered(p,count,dir+(u*s+v*c)*b3Scalar(0.025),allow); if(mc==m && md==m) { allow[m]=3; @@ -302,10 +302,10 @@ int operator ==(const int3 &a,const int3 &b) } -int above(btVector3* vertices,const int3& t, const btVector3 &p, btScalar epsilon); -int above(btVector3* vertices,const int3& t, const btVector3 &p, btScalar epsilon) +int above(b3Vector3* vertices,const int3& t, const b3Vector3 &p, b3Scalar epsilon); +int above(b3Vector3* vertices,const int3& t, const b3Vector3 &p, b3Scalar epsilon) { - btVector3 n=TriNormal(vertices[t[0]],vertices[t[1]],vertices[t[2]]); + b3Vector3 n=TriNormal(vertices[t[0]],vertices[t[1]],vertices[t[2]]); return (btDot(n,p-vertices[t[0]]) > epsilon); // EPSILON??? } int hasedge(const int3 &t, int a,int b); @@ -345,11 +345,11 @@ public: int3 n; int id; int vmax; - btScalar rise; + b3Scalar rise; btHullTriangle(int a,int b,int c):int3(a,b,c),n(-1,-1,-1) { vmax=-1; - rise = btScalar(0.0); + rise = b3Scalar(0.0); } ~btHullTriangle() { @@ -462,7 +462,7 @@ void HullLibrary::extrude(btHullTriangle *t0,int v) } -btHullTriangle* HullLibrary::extrudable(btScalar epsilon) +btHullTriangle* HullLibrary::extrudable(b3Scalar epsilon) { int i; btHullTriangle *t=NULL; @@ -479,17 +479,17 @@ btHullTriangle* HullLibrary::extrudable(btScalar epsilon) -int4 HullLibrary::FindSimplex(btVector3 *verts,int verts_count,btAlignedObjectArray &allow) +int4 HullLibrary::FindSimplex(b3Vector3 *verts,int verts_count,b3AlignedObjectArray &allow) { - btVector3 basis[3]; - basis[0] = btVector3( btScalar(0.01), btScalar(0.02), btScalar(1.0) ); + b3Vector3 basis[3]; + basis[0] = b3Vector3( b3Scalar(0.01), b3Scalar(0.02), b3Scalar(1.0) ); int p0 = maxdirsterid(verts,verts_count, basis[0],allow); int p1 = maxdirsterid(verts,verts_count,-basis[0],allow); basis[0] = verts[p0]-verts[p1]; - if(p0==p1 || basis[0]==btVector3(0,0,0)) + if(p0==p1 || basis[0]==b3Vector3(0,0,0)) return int4(-1,-1,-1,-1); - basis[1] = btCross(btVector3( btScalar(1),btScalar(0.02), btScalar(0)),basis[0]); - basis[2] = btCross(btVector3(btScalar(-0.02), btScalar(1), btScalar(0)),basis[0]); + basis[1] = btCross(b3Vector3( b3Scalar(1),b3Scalar(0.02), b3Scalar(0)),basis[0]); + basis[2] = btCross(b3Vector3(b3Scalar(-0.02), b3Scalar(1), b3Scalar(0)),basis[0]); if (basis[1].length() > basis[2].length()) { basis[1].normalize(); @@ -515,15 +515,15 @@ int4 HullLibrary::FindSimplex(btVector3 *verts,int verts_count,btAlignedObjectAr return int4(p0,p1,p2,p3); } -int HullLibrary::calchullgen(btVector3 *verts,int verts_count, int vlimit) +int HullLibrary::calchullgen(b3Vector3 *verts,int verts_count, int vlimit) { if(verts_count <4) return 0; if(vlimit==0) vlimit=1000000000; int j; - btVector3 bmin(*verts),bmax(*verts); - btAlignedObjectArray isextreme; + b3Vector3 bmin(*verts),bmax(*verts); + b3AlignedObjectArray isextreme; isextreme.reserve(verts_count); - btAlignedObjectArray allow; + b3AlignedObjectArray allow; allow.reserve(verts_count); for(j=0;jn=int3(2,3,1); btHullTriangle *t1 = allocateTriangle(p[3],p[2],p[0]); t1->n=int3(3,2,0); btHullTriangle *t2 = allocateTriangle(p[0],p[1],p[3]); t2->n=int3(0,1,3); @@ -555,7 +555,7 @@ int HullLibrary::calchullgen(btVector3 *verts,int verts_count, int vlimit) btHullTriangle *t=m_tris[j]; btAssert(t); btAssert(t->vmax<0); - btVector3 n=TriNormal(verts[(*t)[0]],verts[(*t)[1]],verts[(*t)[2]]); + b3Vector3 n=TriNormal(verts[(*t)[0]],verts[(*t)[1]],verts[(*t)[2]]); t->vmax = maxdirsterid(verts,verts_count,n,allow); t->rise = btDot(n,verts[t->vmax]-verts[(*t)[0]]); } @@ -573,7 +573,7 @@ int HullLibrary::calchullgen(btVector3 *verts,int verts_count, int vlimit) while(j--) { if(!m_tris[j]) continue; int3 t=*m_tris[j]; - if(above(verts,t,verts[v],btScalar(0.01)*epsilon)) + if(above(verts,t,verts[v],b3Scalar(0.01)*epsilon)) { extrude(m_tris[j],v); } @@ -585,7 +585,7 @@ int HullLibrary::calchullgen(btVector3 *verts,int verts_count, int vlimit) if(!m_tris[j]) continue; if(!hasvert(*m_tris[j],v)) break; int3 nt=*m_tris[j]; - if(above(verts,nt,center,btScalar(0.01)*epsilon) || btCross(verts[nt[1]]-verts[nt[0]],verts[nt[2]]-verts[nt[1]]).length()< epsilon*epsilon*btScalar(0.1) ) + if(above(verts,nt,center,b3Scalar(0.01)*epsilon) || btCross(verts[nt[1]]-verts[nt[0]],verts[nt[2]]-verts[nt[1]]).length()< epsilon*epsilon*b3Scalar(0.1) ) { btHullTriangle *nb = m_tris[m_tris[j]->n[0]]; btAssert(nb);btAssert(!hasvert(*nb,v));btAssert(nb->idvmax>=0) break; - btVector3 n=TriNormal(verts[(*t)[0]],verts[(*t)[1]],verts[(*t)[2]]); + b3Vector3 n=TriNormal(verts[(*t)[0]],verts[(*t)[1]],verts[(*t)[2]]); t->vmax = maxdirsterid(verts,verts_count,n,allow); if(isextreme[t->vmax]) { @@ -615,11 +615,11 @@ int HullLibrary::calchullgen(btVector3 *verts,int verts_count, int vlimit) return 1; } -int HullLibrary::calchull(btVector3 *verts,int verts_count, TUIntArray& tris_out, int &tris_count,int vlimit) +int HullLibrary::calchull(b3Vector3 *verts,int verts_count, TUIntArray& tris_out, int &tris_count,int vlimit) { int rc=calchullgen(verts,verts_count, vlimit) ; if(!rc) return 0; - btAlignedObjectArray ts; + b3AlignedObjectArray ts; int i; for(i=0;i(vlimit) ); + int ret = calchull( (b3Vector3 *) vertices, (int) vcount, result.m_Indices, tris_count, static_cast(vlimit) ); if(!ret) return false; result.mIndexCount = (unsigned int) (tris_count*3); result.mFaceCount = (unsigned int) tris_count; - result.mVertices = (btVector3*) vertices; + result.mVertices = (b3Vector3*) vertices; result.mVcount = (unsigned int) vcount; return true; @@ -699,10 +699,10 @@ HullError HullLibrary::CreateConvexHull(const HullDesc &desc, // unsigned int vcount = desc.mVcount; if ( vcount < 8 ) vcount = 8; - btAlignedObjectArray vertexSource; + b3AlignedObjectArray vertexSource; vertexSource.resize(static_cast(vcount)); - btVector3 scale; + b3Vector3 scale; unsigned int ovcount; @@ -716,7 +716,7 @@ HullError HullLibrary::CreateConvexHull(const HullDesc &desc, // { for (unsigned int i=0; i(i)]; + b3Vector3& v = vertexSource[static_cast(i)]; v[0]*=scale[0]; v[1]*=scale[1]; v[2]*=scale[2]; @@ -729,7 +729,7 @@ HullError HullLibrary::CreateConvexHull(const HullDesc &desc, // { // re-index triangle mesh so it refers to only used vertices, rebuild a new vertex table. - btAlignedObjectArray vertexScratch; + b3AlignedObjectArray vertexScratch; vertexScratch.resize(static_cast(hr.mVcount)); BringOutYourDead(hr.mVertices,hr.mVcount, &vertexScratch[0], ovcount, &hr.m_Indices[0], hr.mIndexCount ); @@ -746,7 +746,7 @@ HullError HullLibrary::CreateConvexHull(const HullDesc &desc, // result.m_Indices.resize(static_cast(hr.mIndexCount)); - memcpy(&result.m_OutputVertices[0], &vertexScratch[0], sizeof(btVector3)*ovcount ); + memcpy(&result.m_OutputVertices[0], &vertexScratch[0], sizeof(b3Vector3)*ovcount ); if ( desc.HasHullFlag(QF_REVERSE_ORDER) ) { @@ -777,7 +777,7 @@ HullError HullLibrary::CreateConvexHull(const HullDesc &desc, // result.mNumFaces = hr.mFaceCount; result.mNumIndices = hr.mIndexCount+hr.mFaceCount; result.m_Indices.resize(static_cast(result.mNumIndices)); - memcpy(&result.m_OutputVertices[0], &vertexScratch[0], sizeof(btVector3)*ovcount ); + memcpy(&result.m_OutputVertices[0], &vertexScratch[0], sizeof(b3Vector3)*ovcount ); // if ( 1 ) { @@ -829,23 +829,23 @@ HullError HullLibrary::ReleaseResult(HullResult &result) // release memory alloc } -static void addPoint(unsigned int &vcount,btVector3 *p,btScalar x,btScalar y,btScalar z) +static void addPoint(unsigned int &vcount,b3Vector3 *p,b3Scalar x,b3Scalar y,b3Scalar z) { // XXX, might be broken - btVector3& dest = p[vcount]; + b3Vector3& dest = p[vcount]; dest[0] = x; dest[1] = y; dest[2] = z; vcount++; } -btScalar GetDist(btScalar px,btScalar py,btScalar pz,const btScalar *p2); -btScalar GetDist(btScalar px,btScalar py,btScalar pz,const btScalar *p2) +b3Scalar GetDist(b3Scalar px,b3Scalar py,b3Scalar pz,const b3Scalar *p2); +b3Scalar GetDist(b3Scalar px,b3Scalar py,b3Scalar pz,const b3Scalar *p2) { - btScalar dx = px - p2[0]; - btScalar dy = py - p2[1]; - btScalar dz = pz - p2[2]; + b3Scalar dx = px - p2[0]; + b3Scalar dy = py - p2[1]; + b3Scalar dz = pz - p2[2]; return dx*dx+dy*dy+dz*dz; } @@ -853,23 +853,23 @@ btScalar GetDist(btScalar px,btScalar py,btScalar pz,const btScalar *p2) bool HullLibrary::CleanupVertices(unsigned int svcount, - const btVector3 *svertices, + const b3Vector3 *svertices, unsigned int stride, unsigned int &vcount, // output number of vertices - btVector3 *vertices, // location to store the results. - btScalar normalepsilon, - btVector3& scale) + b3Vector3 *vertices, // location to store the results. + b3Scalar normalepsilon, + b3Vector3& scale) { if ( svcount == 0 ) return false; m_vertexIndexMapping.resize(0); -#define EPSILON btScalar(0.000001) /* close enough to consider two btScalaring point numbers to be 'the same'. */ +#define EPSILON b3Scalar(0.000001) /* close enough to consider two btScalaring point numbers to be 'the same'. */ vcount = 0; - btScalar recip[3]={0.f,0.f,0.f}; + b3Scalar recip[3]={0.f,0.f,0.f}; if ( scale ) { @@ -878,8 +878,8 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, scale[2] = 1; } - btScalar bmin[3] = { FLT_MAX, FLT_MAX, FLT_MAX }; - btScalar bmax[3] = { -FLT_MAX, -FLT_MAX, -FLT_MAX }; + b3Scalar bmin[3] = { FLT_MAX, FLT_MAX, FLT_MAX }; + b3Scalar bmax[3] = { -FLT_MAX, -FLT_MAX, -FLT_MAX }; const char *vtx = (const char *) svertices; @@ -887,7 +887,7 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, { for (unsigned int i=0; i EPSILON && dx < len ) len = dx; if ( dy > EPSILON && dy < len ) len = dy; @@ -920,23 +920,23 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, if ( len == FLT_MAX ) { - dx = dy = dz = btScalar(0.01); // one centimeter + dx = dy = dz = b3Scalar(0.01); // one centimeter } else { - if ( dx < EPSILON ) dx = len * btScalar(0.05); // 1/5th the shortest non-zero edge. - if ( dy < EPSILON ) dy = len * btScalar(0.05); - if ( dz < EPSILON ) dz = len * btScalar(0.05); + if ( dx < EPSILON ) dx = len * b3Scalar(0.05); // 1/5th the shortest non-zero edge. + if ( dy < EPSILON ) dy = len * b3Scalar(0.05); + if ( dz < EPSILON ) dz = len * b3Scalar(0.05); } - btScalar x1 = center[0] - dx; - btScalar x2 = center[0] + dx; + b3Scalar x1 = center[0] - dx; + b3Scalar x2 = center[0] + dx; - btScalar y1 = center[1] - dy; - btScalar y2 = center[1] + dy; + b3Scalar y1 = center[1] - dy; + b3Scalar y2 = center[1] + dy; - btScalar z1 = center[2] - dz; - btScalar z2 = center[2] + dz; + b3Scalar z1 = center[2] - dz; + b3Scalar z2 = center[2] + dz; addPoint(vcount,vertices,x1,y1,z1); addPoint(vcount,vertices,x2,y1,z1); @@ -977,12 +977,12 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, for (unsigned int i=0; igetX(); - btScalar py = p->getY(); - btScalar pz = p->getZ(); + b3Scalar px = p->getX(); + b3Scalar py = p->getY(); + b3Scalar pz = p->getZ(); if ( scale ) { @@ -998,15 +998,15 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, for (j=0; j dist2 ) { @@ -1031,7 +1031,7 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, if ( j == vcount ) { - btVector3& dest = vertices[vcount]; + b3Vector3& dest = vertices[vcount]; dest[0] = px; dest[1] = py; dest[2] = pz; @@ -1044,12 +1044,12 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, // ok..now make sure we didn't prune so many vertices it is now invalid. // if ( 1 ) { - btScalar bmin[3] = { FLT_MAX, FLT_MAX, FLT_MAX }; - btScalar bmax[3] = { -FLT_MAX, -FLT_MAX, -FLT_MAX }; + b3Scalar bmin[3] = { FLT_MAX, FLT_MAX, FLT_MAX }; + b3Scalar bmax[3] = { -FLT_MAX, -FLT_MAX, -FLT_MAX }; for (unsigned int i=0; i= EPSILON && dx < len ) len = dx; if ( dy >= EPSILON && dy < len ) len = dy; @@ -1075,23 +1075,23 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, if ( len == FLT_MAX ) { - dx = dy = dz = btScalar(0.01); // one centimeter + dx = dy = dz = b3Scalar(0.01); // one centimeter } else { - if ( dx < EPSILON ) dx = len * btScalar(0.05); // 1/5th the shortest non-zero edge. - if ( dy < EPSILON ) dy = len * btScalar(0.05); - if ( dz < EPSILON ) dz = len * btScalar(0.05); + if ( dx < EPSILON ) dx = len * b3Scalar(0.05); // 1/5th the shortest non-zero edge. + if ( dy < EPSILON ) dy = len * b3Scalar(0.05); + if ( dz < EPSILON ) dz = len * b3Scalar(0.05); } - btScalar x1 = cx - dx; - btScalar x2 = cx + dx; + b3Scalar x1 = cx - dx; + b3Scalar x2 = cx + dx; - btScalar y1 = cy - dy; - btScalar y2 = cy + dy; + b3Scalar y1 = cy - dy; + b3Scalar y2 = cy + dy; - btScalar z1 = cz - dz; - btScalar z2 = cz + dz; + b3Scalar z1 = cz - dz; + b3Scalar z2 = cz + dz; vcount = 0; // add box @@ -1111,9 +1111,9 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, return true; } -void HullLibrary::BringOutYourDead(const btVector3* verts,unsigned int vcount, btVector3* overts,unsigned int &ocount,unsigned int *indices,unsigned indexcount) +void HullLibrary::BringOutYourDead(const b3Vector3* verts,unsigned int vcount, b3Vector3* overts,unsigned int &ocount,unsigned int *indices,unsigned indexcount) { - btAlignedObjectArraytmpIndices; + b3AlignedObjectArraytmpIndices; tmpIndices.resize(m_vertexIndexMapping.size()); int i; diff --git a/src/BulletGeometry/btConvexHull.h b/src/BulletGeometry/btConvexHull.h index 4954058ad..a0a31cc68 100644 --- a/src/BulletGeometry/btConvexHull.h +++ b/src/BulletGeometry/btConvexHull.h @@ -19,10 +19,10 @@ subject to the following restrictions: #ifndef BT_CD_HULL_H #define BT_CD_HULL_H -#include "BulletCommon/btVector3.h" -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3Vector3.h" +#include "BulletCommon/b3AlignedObjectArray.h" -typedef btAlignedObjectArray TUIntArray; +typedef b3AlignedObjectArray TUIntArray; class HullResult { @@ -36,10 +36,10 @@ public: } bool mPolygons; // true if indices represents polygons, false indices are triangles unsigned int mNumOutputVertices; // number of vertices in the output hull - btAlignedObjectArray m_OutputVertices; // array of vertices + b3AlignedObjectArray m_OutputVertices; // array of vertices unsigned int mNumFaces; // the number of faces produced unsigned int mNumIndices; // the total number of indices - btAlignedObjectArray m_Indices; // pointer to indices. + b3AlignedObjectArray m_Indices; // pointer to indices. // If triangles, then indices are array indexes into the vertex list. // If polygons, indices are in the form (number of points in face) (p1, p2, p3, ..) etc.. @@ -61,7 +61,7 @@ public: mFlags = QF_DEFAULT; mVcount = 0; mVertices = 0; - mVertexStride = sizeof(btVector3); + mVertexStride = sizeof(b3Vector3); mNormalEpsilon = 0.001f; mMaxVertices = 4096; // maximum number of points to be considered for a convex hull. mMaxFaces = 4096; @@ -69,14 +69,14 @@ public: HullDesc(HullFlag flag, unsigned int vcount, - const btVector3 *vertices, - unsigned int stride = sizeof(btVector3)) + const b3Vector3 *vertices, + unsigned int stride = sizeof(b3Vector3)) { mFlags = flag; mVcount = vcount; mVertices = vertices; mVertexStride = stride; - mNormalEpsilon = btScalar(0.001); + mNormalEpsilon = b3Scalar(0.001); mMaxVertices = 4096; } @@ -98,9 +98,9 @@ public: unsigned int mFlags; // flags to use when generating the convex hull. unsigned int mVcount; // number of vertices in the input point cloud - const btVector3 *mVertices; // the array of vertices. + const b3Vector3 *mVertices; // the array of vertices. unsigned int mVertexStride; // the stride of each vertex, in bytes. - btScalar mNormalEpsilon; // the epsilon for removing duplicates. This is a normalized value, if normalized bit is on. + b3Scalar mNormalEpsilon; // the epsilon for removing duplicates. This is a normalized value, if normalized bit is on. unsigned int mMaxVertices; // maximum number of vertices to be considered for the hull! unsigned int mMaxFaces; }; @@ -114,9 +114,9 @@ enum HullError class btPlane { public: - btVector3 normal; - btScalar dist; // distance below origin - the D from plane equasion Ax+By+Cz+D=0 - btPlane(const btVector3 &n,btScalar d):normal(n),dist(d){} + b3Vector3 normal; + b3Scalar dist; // distance below origin - the D from plane equasion Ax+By+Cz+D=0 + btPlane(const b3Vector3 &n,b3Scalar d):normal(n),dist(d){} btPlane():normal(),dist(0){} }; @@ -141,9 +141,9 @@ class ConvexH ~ConvexH() { } - btAlignedObjectArray vertices; - btAlignedObjectArray edges; - btAlignedObjectArray facets; + b3AlignedObjectArray vertices; + b3AlignedObjectArray edges; + b3AlignedObjectArray facets; ConvexH(int vertices_size,int edges_size,int facets_size); }; @@ -173,7 +173,7 @@ public: unsigned int mVcount; unsigned int mIndexCount; unsigned int mFaceCount; - btVector3* mVertices; + b3Vector3* mVertices; TUIntArray m_Indices; }; @@ -184,11 +184,11 @@ public: class HullLibrary { - btAlignedObjectArray m_tris; + b3AlignedObjectArray m_tris; public: - btAlignedObjectArray m_vertexIndexMapping; + b3AlignedObjectArray m_vertexIndexMapping; HullError CreateConvexHull(const HullDesc& desc, // describes the input request @@ -197,7 +197,7 @@ public: private: - bool ComputeHull(unsigned int vcount,const btVector3 *vertices,PHullResult &result,unsigned int vlimit); + bool ComputeHull(unsigned int vcount,const b3Vector3 *vertices,PHullResult &result,unsigned int vlimit); class btHullTriangle* allocateTriangle(int a,int b,int c); void deAllocateTriangle(btHullTriangle*); @@ -207,13 +207,13 @@ private: void checkit(btHullTriangle *t); - btHullTriangle* extrudable(btScalar epsilon); + btHullTriangle* extrudable(b3Scalar epsilon); - int calchull(btVector3 *verts,int verts_count, TUIntArray& tris_out, int &tris_count,int vlimit); + int calchull(b3Vector3 *verts,int verts_count, TUIntArray& tris_out, int &tris_count,int vlimit); - int calchullgen(btVector3 *verts,int verts_count, int vlimit); + int calchullgen(b3Vector3 *verts,int verts_count, int vlimit); - int4 FindSimplex(btVector3 *verts,int verts_count,btAlignedObjectArray &allow); + int4 FindSimplex(b3Vector3 *verts,int verts_count,b3AlignedObjectArray &allow); class ConvexH* ConvexHCrop(ConvexH& convex,const btPlane& slice); @@ -225,15 +225,15 @@ private: //After the hull is generated it give you back a set of polygon faces which index the *original* point cloud. //The thing is, often times, there are many 'dead vertices' in the point cloud that are on longer referenced by the hull. //The routine 'BringOutYourDead' find only the referenced vertices, copies them to an new buffer, and re-indexes the hull so that it is a minimal representation. - void BringOutYourDead(const btVector3* verts,unsigned int vcount, btVector3* overts,unsigned int &ocount,unsigned int* indices,unsigned indexcount); + void BringOutYourDead(const b3Vector3* verts,unsigned int vcount, b3Vector3* overts,unsigned int &ocount,unsigned int* indices,unsigned indexcount); bool CleanupVertices(unsigned int svcount, - const btVector3* svertices, + const b3Vector3* svertices, unsigned int stride, unsigned int &vcount, // output number of vertices - btVector3* vertices, // location to store the results. - btScalar normalepsilon, - btVector3& scale); + b3Vector3* vertices, // location to store the results. + b3Scalar normalepsilon, + b3Vector3& scale); }; diff --git a/src/BulletGeometry/btConvexHullComputer.cpp b/src/BulletGeometry/btConvexHullComputer.cpp index 0af1d5e2d..14103d701 100644 --- a/src/BulletGeometry/btConvexHullComputer.cpp +++ b/src/BulletGeometry/btConvexHullComputer.cpp @@ -15,9 +15,9 @@ subject to the following restrictions: #include #include "btConvexHullComputer.h" -#include "BulletCommon/btAlignedObjectArray.h" -#include "BulletCommon/btMinMax.h" -#include "BulletCommon/btVector3.h" +#include "BulletCommon/b3AlignedObjectArray.h" +#include "BulletCommon/b3MinMax.h" +#include "BulletCommon/b3Vector3.h" #ifdef __GNUC__ #include @@ -230,9 +230,9 @@ class btConvexHullInternal Int128 operator*(int64_t b) const; - btScalar toScalar() const + b3Scalar toScalar() const { - return ((int64_t) high >= 0) ? btScalar(high) * (btScalar(0x100000000LL) * btScalar(0x100000000LL)) + btScalar(low) + return ((int64_t) high >= 0) ? b3Scalar(high) * (b3Scalar(0x100000000LL) * b3Scalar(0x100000000LL)) + b3Scalar(low) : -(-*this).toScalar(); } @@ -321,9 +321,9 @@ class btConvexHullInternal int compare(const Rational64& b) const; - btScalar toScalar() const + b3Scalar toScalar() const { - return sign * ((m_denominator == 0) ? SIMD_INFINITY : (btScalar) m_numerator / m_denominator); + return sign * ((m_denominator == 0) ? SIMD_INFINITY : (b3Scalar) m_numerator / m_denominator); } }; @@ -386,7 +386,7 @@ class btConvexHullInternal int compare(int64_t b) const; - btScalar toScalar() const + b3Scalar toScalar() const { return sign * ((denominator.getSign() == 0) ? SIMD_INFINITY : numerator.toScalar() / denominator.toScalar()); } @@ -408,17 +408,17 @@ class btConvexHullInternal { } - btScalar xvalue() const + b3Scalar xvalue() const { return x.toScalar() / denominator.toScalar(); } - btScalar yvalue() const + b3Scalar yvalue() const { return y.toScalar() / denominator.toScalar(); } - btScalar zvalue() const + b3Scalar zvalue() const { return z.toScalar() / denominator.toScalar(); } @@ -464,19 +464,19 @@ class btConvexHullInternal : Rational128(point128.x * b.x + point128.y * b.y + point128.z * b.z, point128.denominator); } - btScalar xvalue() const + b3Scalar xvalue() const { - return (point.index >= 0) ? btScalar(point.x) : point128.xvalue(); + return (point.index >= 0) ? b3Scalar(point.x) : point128.xvalue(); } - btScalar yvalue() const + b3Scalar yvalue() const { - return (point.index >= 0) ? btScalar(point.y) : point128.yvalue(); + return (point.index >= 0) ? b3Scalar(point.y) : point128.yvalue(); } - btScalar zvalue() const + b3Scalar zvalue() const { - return (point.index >= 0) ? btScalar(point.z) : point128.zvalue(); + return (point.index >= 0) ? b3Scalar(point.z) : point128.zvalue(); } void receiveNearbyFaces(Vertex* src) @@ -757,12 +757,12 @@ class btConvexHullInternal } }; - btVector3 scaling; - btVector3 center; + b3Vector3 scaling; + b3Vector3 center; Pool vertexPool; Pool edgePool; Pool facePool; - btAlignedObjectArray originalVertices; + b3AlignedObjectArray originalVertices; int mergeStamp; int minAxis; int medAxis; @@ -818,20 +818,20 @@ class btConvexHullInternal void merge(IntermediateHull& h0, IntermediateHull& h1); - btVector3 toBtVector(const Point32& v); + b3Vector3 toBtVector(const Point32& v); - btVector3 getBtNormal(Face* face); + b3Vector3 getBtNormal(Face* face); - bool shiftFace(Face* face, btScalar amount, btAlignedObjectArray stack); + bool shiftFace(Face* face, b3Scalar amount, b3AlignedObjectArray stack); public: Vertex* vertexList; void compute(const void* coords, bool doubleCoords, int stride, int count); - btVector3 getCoordinates(const Vertex* v); + b3Vector3 getCoordinates(const Vertex* v); - btScalar shrink(btScalar amount, btScalar clampAmount); + b3Scalar shrink(b3Scalar amount, b3Scalar clampAmount); }; @@ -1939,14 +1939,14 @@ static bool pointCmp(const btConvexHullInternal::Point32& p, const btConvexHullI void btConvexHullInternal::compute(const void* coords, bool doubleCoords, int stride, int count) { - btVector3 min(btScalar(1e30), btScalar(1e30), btScalar(1e30)), max(btScalar(-1e30), btScalar(-1e30), btScalar(-1e30)); + b3Vector3 min(b3Scalar(1e30), b3Scalar(1e30), b3Scalar(1e30)), max(b3Scalar(-1e30), b3Scalar(-1e30), b3Scalar(-1e30)); const char* ptr = (const char*) coords; if (doubleCoords) { for (int i = 0; i < count; i++) { const double* v = (const double*) ptr; - btVector3 p((btScalar) v[0], (btScalar) v[1], (btScalar) v[2]); + b3Vector3 p((b3Scalar) v[0], (b3Scalar) v[1], (b3Scalar) v[2]); ptr += stride; min.setMin(p); max.setMax(p); @@ -1957,14 +1957,14 @@ void btConvexHullInternal::compute(const void* coords, bool doubleCoords, int st for (int i = 0; i < count; i++) { const float* v = (const float*) ptr; - btVector3 p(v[0], v[1], v[2]); + b3Vector3 p(v[0], v[1], v[2]); ptr += stride; min.setMin(p); max.setMax(p); } } - btVector3 s = max - min; + b3Vector3 s = max - min; maxAxis = s.maxAxis(); minAxis = s.minAxis(); if (minAxis == maxAxis) @@ -1973,7 +1973,7 @@ void btConvexHullInternal::compute(const void* coords, bool doubleCoords, int st } medAxis = 3 - maxAxis - minAxis; - s /= btScalar(10216); + s /= b3Scalar(10216); if (((medAxis + 1) % 3) != maxAxis) { s *= -1; @@ -1982,20 +1982,20 @@ void btConvexHullInternal::compute(const void* coords, bool doubleCoords, int st if (s[0] != 0) { - s[0] = btScalar(1) / s[0]; + s[0] = b3Scalar(1) / s[0]; } if (s[1] != 0) { - s[1] = btScalar(1) / s[1]; + s[1] = b3Scalar(1) / s[1]; } if (s[2] != 0) { - s[2] = btScalar(1) / s[2]; + s[2] = b3Scalar(1) / s[2]; } - center = (min + max) * btScalar(0.5); + center = (min + max) * b3Scalar(0.5); - btAlignedObjectArray points; + b3AlignedObjectArray points; points.resize(count); ptr = (const char*) coords; if (doubleCoords) @@ -2003,7 +2003,7 @@ void btConvexHullInternal::compute(const void* coords, bool doubleCoords, int st for (int i = 0; i < count; i++) { const double* v = (const double*) ptr; - btVector3 p((btScalar) v[0], (btScalar) v[1], (btScalar) v[2]); + b3Vector3 p((b3Scalar) v[0], (b3Scalar) v[1], (b3Scalar) v[2]); ptr += stride; p = (p - center) * s; points[i].x = (int32_t) p[medAxis]; @@ -2017,7 +2017,7 @@ void btConvexHullInternal::compute(const void* coords, bool doubleCoords, int st for (int i = 0; i < count; i++) { const float* v = (const float*) ptr; - btVector3 p(v[0], v[1], v[2]); + b3Vector3 p(v[0], v[1], v[2]); ptr += stride; p = (p - center) * s; points[i].x = (int32_t) p[medAxis]; @@ -2058,40 +2058,40 @@ void btConvexHullInternal::compute(const void* coords, bool doubleCoords, int st #endif } -btVector3 btConvexHullInternal::toBtVector(const Point32& v) +b3Vector3 btConvexHullInternal::toBtVector(const Point32& v) { - btVector3 p; - p[medAxis] = btScalar(v.x); - p[maxAxis] = btScalar(v.y); - p[minAxis] = btScalar(v.z); + b3Vector3 p; + p[medAxis] = b3Scalar(v.x); + p[maxAxis] = b3Scalar(v.y); + p[minAxis] = b3Scalar(v.z); return p * scaling; } -btVector3 btConvexHullInternal::getBtNormal(Face* face) +b3Vector3 btConvexHullInternal::getBtNormal(Face* face) { return toBtVector(face->dir0).cross(toBtVector(face->dir1)).normalized(); } -btVector3 btConvexHullInternal::getCoordinates(const Vertex* v) +b3Vector3 btConvexHullInternal::getCoordinates(const Vertex* v) { - btVector3 p; + b3Vector3 p; p[medAxis] = v->xvalue(); p[maxAxis] = v->yvalue(); p[minAxis] = v->zvalue(); return p * scaling + center; } -btScalar btConvexHullInternal::shrink(btScalar amount, btScalar clampAmount) +b3Scalar btConvexHullInternal::shrink(b3Scalar amount, b3Scalar clampAmount) { if (!vertexList) { return 0; } int stamp = --mergeStamp; - btAlignedObjectArray stack; + b3AlignedObjectArray stack; vertexList->copy = stamp; stack.push_back(vertexList); - btAlignedObjectArray faces; + b3AlignedObjectArray faces; Point32 ref = vertexList->point; Int128 hullCenterX(0, 0); @@ -2155,7 +2155,7 @@ btScalar btConvexHullInternal::shrink(btScalar amount, btScalar clampAmount) return 0; } - btVector3 hullCenter; + b3Vector3 hullCenter; hullCenter[medAxis] = hullCenterX.toScalar(); hullCenter[maxAxis] = hullCenterY.toScalar(); hullCenter[minAxis] = hullCenterZ.toScalar(); @@ -2166,11 +2166,11 @@ btScalar btConvexHullInternal::shrink(btScalar amount, btScalar clampAmount) if (clampAmount > 0) { - btScalar minDist = SIMD_INFINITY; + b3Scalar minDist = SIMD_INFINITY; for (int i = 0; i < faceCount; i++) { - btVector3 normal = getBtNormal(faces[i]); - btScalar dist = normal.dot(toBtVector(faces[i]->origin) - hullCenter); + b3Vector3 normal = getBtNormal(faces[i]); + b3Scalar dist = normal.dot(toBtVector(faces[i]->origin) - hullCenter); if (dist < minDist) { minDist = dist; @@ -2202,9 +2202,9 @@ btScalar btConvexHullInternal::shrink(btScalar amount, btScalar clampAmount) return amount; } -bool btConvexHullInternal::shiftFace(Face* face, btScalar amount, btAlignedObjectArray stack) +bool btConvexHullInternal::shiftFace(Face* face, b3Scalar amount, b3AlignedObjectArray stack) { - btVector3 origShift = getBtNormal(face) * -amount; + b3Vector3 origShift = getBtNormal(face) * -amount; if (scaling[0] != 0) { origShift[0] /= scaling[0]; @@ -2623,7 +2623,7 @@ bool btConvexHullInternal::shiftFace(Face* face, btScalar amount, btAlignedObjec } -static int getVertexCopy(btConvexHullInternal::Vertex* vertex, btAlignedObjectArray& vertices) +static int getVertexCopy(btConvexHullInternal::Vertex* vertex, b3AlignedObjectArray& vertices) { int index = vertex->copy; if (index < 0) @@ -2638,7 +2638,7 @@ static int getVertexCopy(btConvexHullInternal::Vertex* vertex, btAlignedObjectAr return index; } -btScalar btConvexHullComputer::compute(const void* coords, bool doubleCoords, int stride, int count, btScalar shrink, btScalar shrinkClamp) +b3Scalar btConvexHullComputer::compute(const void* coords, bool doubleCoords, int stride, int count, b3Scalar shrink, b3Scalar shrinkClamp) { if (count <= 0) { @@ -2651,7 +2651,7 @@ btScalar btConvexHullComputer::compute(const void* coords, bool doubleCoords, in btConvexHullInternal hull; hull.compute(coords, doubleCoords, stride, count); - btScalar shift = 0; + b3Scalar shift = 0; if ((shrink > 0) && ((shift = hull.shrink(shrink, shrinkClamp)) < 0)) { vertices.clear(); @@ -2664,7 +2664,7 @@ btScalar btConvexHullComputer::compute(const void* coords, bool doubleCoords, in edges.resize(0); faces.resize(0); - btAlignedObjectArray oldVertices; + b3AlignedObjectArray oldVertices; getVertexCopy(hull.vertexList, oldVertices); int copied = 0; while (copied < oldVertices.size()) diff --git a/src/BulletGeometry/btConvexHullComputer.h b/src/BulletGeometry/btConvexHullComputer.h index 2cdcdb8de..63bc5405c 100644 --- a/src/BulletGeometry/btConvexHullComputer.h +++ b/src/BulletGeometry/btConvexHullComputer.h @@ -15,8 +15,8 @@ subject to the following restrictions: #ifndef BT_CONVEX_HULL_COMPUTER_H #define BT_CONVEX_HULL_COMPUTER_H -#include "BulletCommon/btVector3.h" -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3Vector3.h" +#include "BulletCommon/b3AlignedObjectArray.h" /// Convex hull implementation based on Preparata and Hong /// See http://code.google.com/p/bullet/issues/detail?id=275 @@ -24,7 +24,7 @@ subject to the following restrictions: class btConvexHullComputer { private: - btScalar compute(const void* coords, bool doubleCoords, int stride, int count, btScalar shrink, btScalar shrinkClamp); + b3Scalar compute(const void* coords, bool doubleCoords, int stride, int count, b3Scalar shrink, b3Scalar shrinkClamp); public: @@ -66,13 +66,13 @@ class btConvexHullComputer // Vertices of the output hull - btAlignedObjectArray vertices; + b3AlignedObjectArray vertices; // Edges of the output hull - btAlignedObjectArray edges; + b3AlignedObjectArray edges; // Faces of the convex hull. Each entry is an index into the "edges" array pointing to an edge of the face. Faces are planar n-gons - btAlignedObjectArray faces; + b3AlignedObjectArray faces; /* Compute convex hull of "count" vertices stored in "coords". "stride" is the difference in bytes @@ -86,13 +86,13 @@ class btConvexHullComputer The output convex hull can be found in the member variables "vertices", "edges", "faces". */ - btScalar compute(const float* coords, int stride, int count, btScalar shrink, btScalar shrinkClamp) + b3Scalar compute(const float* coords, int stride, int count, b3Scalar shrink, b3Scalar shrinkClamp) { return compute(coords, false, stride, count, shrink, shrinkClamp); } // same as above, but double precision - btScalar compute(const double* coords, int stride, int count, btScalar shrink, btScalar shrinkClamp) + b3Scalar compute(const double* coords, int stride, int count, b3Scalar shrink, b3Scalar shrinkClamp) { return compute(coords, true, stride, count, shrink, shrinkClamp); } diff --git a/src/BulletGeometry/btGeometryUtil.cpp b/src/BulletGeometry/btGeometryUtil.cpp index 5ac230f71..93f15148c 100644 --- a/src/BulletGeometry/btGeometryUtil.cpp +++ b/src/BulletGeometry/btGeometryUtil.cpp @@ -30,14 +30,14 @@ extern "C" } -bool btGeometryUtil::isPointInsidePlanes(const btAlignedObjectArray& planeEquations, const btVector3& point, btScalar margin) +bool btGeometryUtil::isPointInsidePlanes(const b3AlignedObjectArray& planeEquations, const b3Vector3& point, b3Scalar margin) { int numbrushes = planeEquations.size(); for (int i=0;ibtScalar(0.)) + const b3Vector3& N1 = planeEquations[i]; + b3Scalar dist = b3Scalar(N1.dot(point))+b3Scalar(N1[3])-margin; + if (dist>b3Scalar(0.)) { return false; } @@ -47,14 +47,14 @@ bool btGeometryUtil::isPointInsidePlanes(const btAlignedObjectArray& } -bool btGeometryUtil::areVerticesBehindPlane(const btVector3& planeNormal, const btAlignedObjectArray& vertices, btScalar margin) +bool btGeometryUtil::areVerticesBehindPlane(const b3Vector3& planeNormal, const b3AlignedObjectArray& vertices, b3Scalar margin) { int numvertices = vertices.size(); for (int i=0;ibtScalar(0.)) + const b3Vector3& N1 = vertices[i]; + b3Scalar dist = b3Scalar(planeNormal.dot(N1))+b3Scalar(planeNormal[3])-margin; + if (dist>b3Scalar(0.)) { return false; } @@ -62,15 +62,15 @@ bool btGeometryUtil::areVerticesBehindPlane(const btVector3& planeNormal, const return true; } -bool notExist(const btVector3& planeEquation,const btAlignedObjectArray& planeEquations); +bool notExist(const b3Vector3& planeEquation,const b3AlignedObjectArray& planeEquations); -bool notExist(const btVector3& planeEquation,const btAlignedObjectArray& planeEquations) +bool notExist(const b3Vector3& planeEquation,const b3AlignedObjectArray& planeEquations) { int numbrushes = planeEquations.size(); for (int i=0;i btScalar(0.999)) + const b3Vector3& N1 = planeEquations[i]; + if (planeEquation.dot(N1) > b3Scalar(0.999)) { return false; } @@ -78,32 +78,32 @@ bool notExist(const btVector3& planeEquation,const btAlignedObjectArray& vertices, btAlignedObjectArray& planeEquationsOut ) +void btGeometryUtil::getPlaneEquationsFromVertices(b3AlignedObjectArray& vertices, b3AlignedObjectArray& planeEquationsOut ) { const int numvertices = vertices.size(); // brute force: for (int i=0;i btScalar(0.0001)) + if (planeEquation.length2() > b3Scalar(0.0001)) { planeEquation.normalize(); if (notExist(planeEquation,planeEquationsOut)) @@ -111,13 +111,13 @@ void btGeometryUtil::getPlaneEquationsFromVertices(btAlignedObjectArray& planeEquations , btAlignedObjectArray& verticesOut ) +void btGeometryUtil::getVerticesFromPlaneEquations(const b3AlignedObjectArray& planeEquations , b3AlignedObjectArray& verticesOut ) { const int numbrushes = planeEquations.size(); // brute force: for (int i=0;i btScalar(0.0001) ) && - ( n3n1.length2() > btScalar(0.0001) ) && - ( n1n2.length2() > btScalar(0.0001) ) ) + if ( ( n2n3.length2() > b3Scalar(0.0001) ) && + ( n3n1.length2() > b3Scalar(0.0001) ) && + ( n1n2.length2() > b3Scalar(0.0001) ) ) { //point P out of 3 plane equations: @@ -159,20 +159,20 @@ void btGeometryUtil::getVerticesFromPlaneEquations(const btAlignedObjectArray btScalar(0.000001)) + b3Scalar quotient = (N1.dot(n2n3)); + if (btFabs(quotient) > b3Scalar(0.000001)) { - quotient = btScalar(-1.) / quotient; + quotient = b3Scalar(-1.) / quotient; n2n3 *= N1[3]; n3n1 *= N2[3]; n1n2 *= N3[3]; - btVector3 potentialVertex = n2n3; + b3Vector3 potentialVertex = n2n3; potentialVertex += n3n1; potentialVertex += n1n2; potentialVertex *= quotient; //check if inside, and replace supportingVertexOut if needed - if (isPointInsidePlanes(planeEquations,potentialVertex,btScalar(0.01))) + if (isPointInsidePlanes(planeEquations,potentialVertex,b3Scalar(0.01))) { verticesOut.push_back(potentialVertex); } diff --git a/src/BulletGeometry/btGeometryUtil.h b/src/BulletGeometry/btGeometryUtil.h index 96e3d46a0..6a0298370 100644 --- a/src/BulletGeometry/btGeometryUtil.h +++ b/src/BulletGeometry/btGeometryUtil.h @@ -16,8 +16,8 @@ subject to the following restrictions: #ifndef BT_GEOMETRY_UTIL_H #define BT_GEOMETRY_UTIL_H -#include "BulletCommon/btVector3.h" -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3Vector3.h" +#include "BulletCommon/b3AlignedObjectArray.h" ///The btGeometryUtil helper class provides a few methods to convert between plane equations and vertices. class btGeometryUtil @@ -25,15 +25,15 @@ class btGeometryUtil public: - static void getPlaneEquationsFromVertices(btAlignedObjectArray& vertices, btAlignedObjectArray& planeEquationsOut ); + static void getPlaneEquationsFromVertices(b3AlignedObjectArray& vertices, b3AlignedObjectArray& planeEquationsOut ); - static void getVerticesFromPlaneEquations(const btAlignedObjectArray& planeEquations , btAlignedObjectArray& verticesOut ); + static void getVerticesFromPlaneEquations(const b3AlignedObjectArray& planeEquations , b3AlignedObjectArray& verticesOut ); - static bool isInside(const btAlignedObjectArray& vertices, const btVector3& planeNormal, btScalar margin); + static bool isInside(const b3AlignedObjectArray& vertices, const b3Vector3& planeNormal, b3Scalar margin); - static bool isPointInsidePlanes(const btAlignedObjectArray& planeEquations, const btVector3& point, btScalar margin); + static bool isPointInsidePlanes(const b3AlignedObjectArray& planeEquations, const b3Vector3& point, b3Scalar margin); - static bool areVerticesBehindPlane(const btVector3& planeNormal, const btAlignedObjectArray& vertices, btScalar margin); + static bool areVerticesBehindPlane(const b3Vector3& planeNormal, const b3AlignedObjectArray& vertices, b3Scalar margin); }; diff --git a/src/BulletGeometry/btGrahamScan2dConvexHull.h b/src/BulletGeometry/btGrahamScan2dConvexHull.h index aea81baf3..12b0f5cd9 100644 --- a/src/BulletGeometry/btGrahamScan2dConvexHull.h +++ b/src/BulletGeometry/btGrahamScan2dConvexHull.h @@ -18,24 +18,24 @@ subject to the following restrictions: #define GRAHAM_SCAN_2D_CONVEX_HULL_H -#include "BulletCommon/btVector3.h" -#include "BulletCommon/btAlignedObjectArray.h" +#include "BulletCommon/b3Vector3.h" +#include "BulletCommon/b3AlignedObjectArray.h" -struct GrahamVector3 : public btVector3 +struct GrahamVector3 : public b3Vector3 { - GrahamVector3(const btVector3& org, int orgIndex) - :btVector3(org), + GrahamVector3(const b3Vector3& org, int orgIndex) + :b3Vector3(org), m_orgIndex(orgIndex) { } - btScalar m_angle; + b3Scalar m_angle; int m_orgIndex; }; struct btAngleCompareFunc { - btVector3 m_anchor; - btAngleCompareFunc(const btVector3& anchor) + b3Vector3 m_anchor; + btAngleCompareFunc(const b3Vector3& anchor) : m_anchor(anchor) { } @@ -44,8 +44,8 @@ struct btAngleCompareFunc { return a.m_angle < b.m_angle; else { - btScalar al = (a-m_anchor).length2(); - btScalar bl = (b-m_anchor).length2(); + b3Scalar al = (a-m_anchor).length2(); + b3Scalar bl = (b-m_anchor).length2(); if (al != bl) return al < bl; else @@ -56,9 +56,9 @@ struct btAngleCompareFunc { } }; -inline void GrahamScanConvexHull2D(btAlignedObjectArray& originalPoints, btAlignedObjectArray& hull, const btVector3& normalAxis) +inline void GrahamScanConvexHull2D(b3AlignedObjectArray& originalPoints, b3AlignedObjectArray& hull, const b3Vector3& normalAxis) { - btVector3 axis0,axis1; + b3Vector3 axis0,axis1; btPlaneSpace1(normalAxis,axis0,axis1); @@ -71,10 +71,10 @@ inline void GrahamScanConvexHull2D(btAlignedObjectArray& original //step1 : find anchor point with smallest projection on axis0 and move it to first location for (int i=0;i& original originalPoints[0].m_angle = -1e30f; for (int i=1;i& original { bool isConvex = false; while (!isConvex&& hull.size()>1) { - btVector3& a = hull[hull.size()-2]; - btVector3& b = hull[hull.size()-1]; + b3Vector3& a = hull[hull.size()-2]; + b3Vector3& b = hull[hull.size()-1]; isConvex = btCross(a-b,a-originalPoints[i]).dot(normalAxis)> 0; if (!isConvex) hull.pop_back(); diff --git a/src/BulletGeometry/btPolarDecomposition.cpp b/src/BulletGeometry/btPolarDecomposition.cpp index 78328947f..eb0613d7b 100644 --- a/src/BulletGeometry/btPolarDecomposition.cpp +++ b/src/BulletGeometry/btPolarDecomposition.cpp @@ -1,45 +1,45 @@ #include "btPolarDecomposition.h" -#include "BulletCommon/btMinMax.h" +#include "BulletCommon/b3MinMax.h" namespace { - btScalar abs_column_sum(const btMatrix3x3& a, int i) + b3Scalar abs_column_sum(const b3Matrix3x3& a, int i) { return btFabs(a[0][i]) + btFabs(a[1][i]) + btFabs(a[2][i]); } - btScalar abs_row_sum(const btMatrix3x3& a, int i) + b3Scalar abs_row_sum(const b3Matrix3x3& a, int i) { return btFabs(a[i][0]) + btFabs(a[i][1]) + btFabs(a[i][2]); } - btScalar p1_norm(const btMatrix3x3& a) + b3Scalar p1_norm(const b3Matrix3x3& a) { - const btScalar sum0 = abs_column_sum(a,0); - const btScalar sum1 = abs_column_sum(a,1); - const btScalar sum2 = abs_column_sum(a,2); + const b3Scalar sum0 = abs_column_sum(a,0); + const b3Scalar sum1 = abs_column_sum(a,1); + const b3Scalar sum2 = abs_column_sum(a,2); return btMax(btMax(sum0, sum1), sum2); } - btScalar pinf_norm(const btMatrix3x3& a) + b3Scalar pinf_norm(const b3Matrix3x3& a) { - const btScalar sum0 = abs_row_sum(a,0); - const btScalar sum1 = abs_row_sum(a,1); - const btScalar sum2 = abs_row_sum(a,2); + const b3Scalar sum0 = abs_row_sum(a,0); + const b3Scalar sum1 = abs_row_sum(a,1); + const b3Scalar sum2 = abs_row_sum(a,2); return btMax(btMax(sum0, sum1), sum2); } } -const btScalar btPolarDecomposition::DEFAULT_TOLERANCE = btScalar(0.0001); +const b3Scalar btPolarDecomposition::DEFAULT_TOLERANCE = b3Scalar(0.0001); const unsigned int btPolarDecomposition::DEFAULT_MAX_ITERATIONS = 16; -btPolarDecomposition::btPolarDecomposition(btScalar tolerance, unsigned int maxIterations) +btPolarDecomposition::btPolarDecomposition(b3Scalar tolerance, unsigned int maxIterations) : m_tolerance(tolerance) , m_maxIterations(maxIterations) { } -unsigned int btPolarDecomposition::decompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) const +unsigned int btPolarDecomposition::decompose(const b3Matrix3x3& a, b3Matrix3x3& u, b3Matrix3x3& h) const { // Use the 'u' and 'h' matrices for intermediate calculations u = a; @@ -47,23 +47,23 @@ unsigned int btPolarDecomposition::decompose(const btMatrix3x3& a, btMatrix3x3& for (unsigned int i = 0; i < m_maxIterations; ++i) { - const btScalar h_1 = p1_norm(h); - const btScalar h_inf = pinf_norm(h); - const btScalar u_1 = p1_norm(u); - const btScalar u_inf = pinf_norm(u); + const b3Scalar h_1 = p1_norm(h); + const b3Scalar h_inf = pinf_norm(h); + const b3Scalar u_1 = p1_norm(u); + const b3Scalar u_inf = pinf_norm(u); - const btScalar h_norm = h_1 * h_inf; - const btScalar u_norm = u_1 * u_inf; + const b3Scalar h_norm = h_1 * h_inf; + const b3Scalar u_norm = u_1 * u_inf; // The matrix is effectively singular so we cannot invert it if (btFuzzyZero(h_norm) || btFuzzyZero(u_norm)) break; - const btScalar gamma = btPow(h_norm / u_norm, 0.25f); - const btScalar inv_gamma = 1.0 / gamma; + const b3Scalar gamma = btPow(h_norm / u_norm, 0.25f); + const b3Scalar inv_gamma = 1.0 / gamma; // Determine the delta to 'u' - const btMatrix3x3 delta = (u * (gamma - 2.0) + h.transpose() * inv_gamma) * 0.5; + const b3Matrix3x3 delta = (u * (gamma - 2.0) + h.transpose() * inv_gamma) * 0.5; // Update the matrices u += delta; @@ -91,7 +91,7 @@ unsigned int btPolarDecomposition::maxIterations() const return m_maxIterations; } -unsigned int polarDecompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) +unsigned int polarDecompose(const b3Matrix3x3& a, b3Matrix3x3& u, b3Matrix3x3& h) { static btPolarDecomposition polar; return polar.decompose(a, u, h); diff --git a/src/BulletGeometry/btPolarDecomposition.h b/src/BulletGeometry/btPolarDecomposition.h index 621c9d278..8a8bf9a30 100644 --- a/src/BulletGeometry/btPolarDecomposition.h +++ b/src/BulletGeometry/btPolarDecomposition.h @@ -1,7 +1,7 @@ #ifndef POLARDECOMPOSITION_H #define POLARDECOMPOSITION_H -#include "BulletCommon/btMatrix3x3.h" +#include "BulletCommon/b3Matrix3x3.h" /** * This class is used to compute the polar decomposition of a matrix. In @@ -14,7 +14,7 @@ class btPolarDecomposition { public: - static const btScalar DEFAULT_TOLERANCE; + static const b3Scalar DEFAULT_TOLERANCE; static const unsigned int DEFAULT_MAX_ITERATIONS; /** @@ -25,7 +25,7 @@ class btPolarDecomposition * @param maxIterations - the maximum number of iterations used to achieve * convergence */ - btPolarDecomposition(btScalar tolerance = DEFAULT_TOLERANCE, + btPolarDecomposition(b3Scalar tolerance = DEFAULT_TOLERANCE, unsigned int maxIterations = DEFAULT_MAX_ITERATIONS); /** @@ -39,7 +39,7 @@ class btPolarDecomposition * * @return the number of iterations performed by the algorithm. */ - unsigned int decompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) const; + unsigned int decompose(const b3Matrix3x3& a, b3Matrix3x3& u, b3Matrix3x3& h) const; /** * Returns the maximum number of iterations that this algorithm will perform @@ -50,7 +50,7 @@ class btPolarDecomposition unsigned int maxIterations() const; private: - btScalar m_tolerance; + b3Scalar m_tolerance; unsigned int m_maxIterations; }; @@ -67,7 +67,7 @@ class btPolarDecomposition * * @return the number of iterations performed by the algorithm. */ -unsigned int polarDecompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h); +unsigned int polarDecompose(const b3Matrix3x3& a, b3Matrix3x3& u, b3Matrix3x3& h); #endif // POLARDECOMPOSITION_H