Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "btStaticPlaneShape.h"
00017
00018 #include "LinearMath/btTransformUtil.h"
00019
00020
00021 btStaticPlaneShape::btStaticPlaneShape(const btVector3& planeNormal,btScalar planeConstant)
00022 : btConcaveShape (), m_planeNormal(planeNormal.normalized()),
00023 m_planeConstant(planeConstant),
00024 m_localScaling(btScalar(0.),btScalar(0.),btScalar(0.))
00025 {
00026 m_shapeType = STATIC_PLANE_PROXYTYPE;
00027
00028 }
00029
00030
00031 btStaticPlaneShape::~btStaticPlaneShape()
00032 {
00033 }
00034
00035
00036
00037 void btStaticPlaneShape::getAabb(const btTransform& t,btVector3& aabbMin,btVector3& aabbMax) const
00038 {
00039 (void)t;
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 aabbMin.setValue(btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT),btScalar(-BT_LARGE_FLOAT));
00051 aabbMax.setValue(btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT));
00052
00053 }
00054
00055
00056
00057
00058 void btStaticPlaneShape::processAllTriangles(btTriangleCallback* callback,const btVector3& aabbMin,const btVector3& aabbMax) const
00059 {
00060
00061 btVector3 halfExtents = (aabbMax - aabbMin) * btScalar(0.5);
00062 btScalar radius = halfExtents.length();
00063 btVector3 center = (aabbMax + aabbMin) * btScalar(0.5);
00064
00065
00066
00067 btVector3 tangentDir0,tangentDir1;
00068
00069
00070 btPlaneSpace1(m_planeNormal,tangentDir0,tangentDir1);
00071
00072 btVector3 supVertex0,supVertex1;
00073
00074 btVector3 projectedCenter = center - (m_planeNormal.dot(center) - m_planeConstant)*m_planeNormal;
00075
00076 btVector3 triangle[3];
00077 triangle[0] = projectedCenter + tangentDir0*radius + tangentDir1*radius;
00078 triangle[1] = projectedCenter + tangentDir0*radius - tangentDir1*radius;
00079 triangle[2] = projectedCenter - tangentDir0*radius - tangentDir1*radius;
00080
00081 callback->processTriangle(triangle,0,0);
00082
00083 triangle[0] = projectedCenter - tangentDir0*radius - tangentDir1*radius;
00084 triangle[1] = projectedCenter - tangentDir0*radius + tangentDir1*radius;
00085 triangle[2] = projectedCenter + tangentDir0*radius + tangentDir1*radius;
00086
00087 callback->processTriangle(triangle,0,1);
00088
00089 }
00090
00091 void btStaticPlaneShape::calculateLocalInertia(btScalar mass,btVector3& inertia) const
00092 {
00093 (void)mass;
00094
00095
00096
00097 inertia.setValue(btScalar(0.),btScalar(0.),btScalar(0.));
00098 }
00099
00100 void btStaticPlaneShape::setLocalScaling(const btVector3& scaling)
00101 {
00102 m_localScaling = scaling;
00103 }
00104 const btVector3& btStaticPlaneShape::getLocalScaling() const
00105 {
00106 return m_localScaling;
00107 }