本文整理汇总了C++中btTransform::getBasis方法的典型用法代码示例。如果您正苦于以下问题:C++ btTransform::getBasis方法的具体用法?C++ btTransform::getBasis怎么用?C++ btTransform::getBasis使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类btTransform
的用法示例。
在下文中一共展示了btTransform::getBasis方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getWorldTransform
void bmodMotionState::getWorldTransform(btTransform &worldTrans) const {
if(obj->getEntities()->size() == 0) {
worldTrans = btTransform(btQuaternion(0, 0, 0, 1));
return;
}
edict_t * entity = INDEXENT(obj->getEntities()->front());
worldTrans = btTransform(btQuaternion(0, 0, 0, 1), btVector3(entity->v.origin.x, entity->v.origin.y, entity->v.origin.z));
btVector3 angles;
entity->v.angles.CopyToArray(angles.m_floats);
EulerMatrix(angles, worldTrans.getBasis());
}
示例2: InverseTransformPoint3x3
void InverseTransformPoint3x3(btVector3& out, const btVector3& in, const btTransform& tr)
{
const btMatrix3x3& rot = tr.getBasis();
const btVector3& r0 = rot[0];
const btVector3& r1 = rot[1];
const btVector3& r2 = rot[2];
const btScalar x = r0.x()*in.x() + r1.x()*in.y() + r2.x()*in.z();
const btScalar y = r0.y()*in.x() + r1.y()*in.y() + r2.y()*in.z();
const btScalar z = r0.z()*in.x() + r1.z()*in.y() + r2.z()*in.z();
out.setValue(x, y, z);
}
示例3: transformToNode
QDomElement SimDomElement::transformToNode(QDomDocument &doc, const btTransform t)
{
QDomElement trans = doc.createElement( "transform" );
QDomElement origin = doc.createElement( "origin" );
origin.appendChild(vectorToNode(doc, t.getOrigin()));
trans.appendChild(origin);
QDomElement rotate = doc.createElement( "rotation" );
rotate.appendChild(basisToNode(doc, t.getBasis()));
trans.appendChild(rotate);
return trans;
}
示例4:
ork::CMatrix4 btmtx4toorkmtx4( const btTransform& mtx )
{ ork::CMatrix4 rval;
ork::CVector3 position = ! mtx.getOrigin();
rval.SetTranslation( position );
const btMatrix3x3& mtx33 = mtx.getBasis();
for( int i=0; i<3; i++ )
{ const btVector3& vec = mtx33.getColumn(i);
rval.SetElemXY(i,0,float(vec.x()));
rval.SetElemXY(i,1,float(vec.y()));
rval.SetElemXY(i,2,float(vec.z()));
}
return rval;
}
示例5: ConvertBTMatrix
D3DXMATRIX BulletPhysics::ConvertBTMatrix( btTransform &trn )
{
//do crazy math shit
btVector3 R = trn.getBasis().getColumn(0);
btVector3 U = trn.getBasis().getColumn(1);
btVector3 L = trn.getBasis().getColumn(2);
btVector3 P = trn.getOrigin();
D3DXVECTOR3 vR, vU, vL, vP;
vR.x = R.x();vR.y = R.y();vR.z = R.z();
vU.x = U.x();vU.y = U.y();vU.z = U.z();
vL.x = L.x();vL.y = L.y();vL.z = L.z();
vP.x = P.x();vP.y = P.y();vP.z = P.z();
D3DXMATRIX matOutput;
matOutput._11 = vR.x;matOutput._12 = vR.y;matOutput._13 = vR.z;matOutput._14 = 0.f;
matOutput._21 = vU.x;matOutput._22 = vU.y;matOutput._23 = vU.z;matOutput._24 = 0.f;
matOutput._31 = vL.x;matOutput._32 = vL.y;matOutput._33 = vL.z;matOutput._34 = 0.f;
matOutput._41 = vP.x;matOutput._42 = vP.y;matOutput._43 = vP.z;matOutput._44 = 1.f;
return matOutput;
}
示例6: getContactNormal
btVector3 tgBulletSpringCableAnchor::getContactNormal() const
{
#ifdef USE_BASIS
const btTransform tr = attachedBody->getWorldTransform();
btVector3 newNormal = (tr.getBasis() * contactNormal);
newNormal = newNormal.length() > 0.0 ? newNormal.normalize() : btVector3(0.0, 0.0, 0.0);
//assert(newNormal.length() == 1.0);
return newNormal;
#else
return contactNormal;
#endif
}
示例7:
inline
minko::math::mat4
minko::math::fromBulletTransform(const btTransform& transform)
{
auto basis = transform.getBasis();
auto translation = transform.getOrigin();
return minko::math::mat4(
basis[0][0], basis[1][0], basis[2][0], 0.f,
basis[0][1], basis[1][1], basis[2][1], 0.f,
basis[0][2], basis[1][2], basis[2][2], 0.f,
translation[0], translation[1], translation[2], 1.f
);
}
示例8: getAabb
void btTriangleMeshShape::getAabb(const btTransform& trans,btVector3& aabbMin,btVector3& aabbMax) const
{
btVector3 localHalfExtents = btScalar(0.5)*(m_localAabbMax-m_localAabbMin);
localHalfExtents += btVector3(getMargin(),getMargin(),getMargin());
btVector3 localCenter = btScalar(0.5)*(m_localAabbMax+m_localAabbMin);
btMatrix3x3 abs_b = trans.getBasis().absolute();
btVector3 center = trans(localCenter);
btVector3 extent = localHalfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
aabbMin = center - extent;
aabbMax = center + extent;
}
示例9: getAabb
void btHeightfieldTerrainShape::getAabb(const btTransform& t,btVector3& aabbMin,btVector3& aabbMax) const
{
btVector3 halfExtents = (m_localAabbMax-m_localAabbMin)* m_localScaling * btScalar(0.5);
btVector3 localOrigin(0, 0, 0);
localOrigin[m_upAxis] = (m_minHeight + m_maxHeight) * btScalar(0.5);
localOrigin *= m_localScaling;
btMatrix3x3 abs_b = t.getBasis().absolute();
btVector3 center = t.getOrigin();
btVector3 extent = halfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
extent += btVector3(getMargin(),getMargin(),getMargin());
aabbMin = center - extent;
aabbMax = center + extent;
}
示例10: getAabb
void btBoxShape::getAabb(const btTransform& t,btVector3& aabbMin,btVector3& aabbMax) const
{
btVector3 halfExtents = getHalfExtents();
btMatrix3x3 abs_b = t.getBasis().absolute();
btPoint3 center = t.getOrigin();
btVector3 extent = btVector3(abs_b[0].dot(halfExtents),
abs_b[1].dot(halfExtents),
abs_b[2].dot(halfExtents));
extent += btVector3(getMargin(),getMargin(),getMargin());
aabbMin = center - extent;
aabbMax = center + extent;
}
示例11: project
void btConvexShape::project(const btTransform& trans, const btVector3& dir, btScalar& min, btScalar& max) const
{
btVector3 localAxis = dir*trans.getBasis();
btVector3 vtx1 = trans(localGetSupportingVertex(localAxis));
btVector3 vtx2 = trans(localGetSupportingVertex(-localAxis));
min = vtx1.dot(dir);
max = vtx2.dot(dir);
if(min>max)
{
btScalar tmp = min;
min = max;
max = tmp;
}
}
示例12: setWorldTransform
void SimpleDynamicSceneObject::setWorldTransform(const btTransform& trans)
{
#if 1
btVector3 btComOffset(comOffset.getX(), comOffset.getY(), comOffset.getZ());
btComOffset = trans.getBasis() * btComOffset;
btTransform comTrans(trans.getRotation(), trans.getOrigin() + btComOffset);
#else
btTransform comTrans(trans);
#endif
// +com
RigidBodySceneObject::setWorldTransform(comTrans);
}
示例13: print_btTransform
/**\fn void print_btTransform(btTransform xf)
* \brief print a btTransform object
* \param xf - a btTransform object to print
* \return void
* \ingroup Kinematics
*/
void print_btTransform(btTransform xf)
{
btMatrix3x3 rr = xf.getBasis();
btVector3 vv = xf.getOrigin();
std::stringstream ss;
cout << fixed;
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++)
ss << rr[i][j] << "\t ";
ss << vv[i] << endl;
}
ss << "0\t 0\t 0\t 1\n";
log_msg("\n%s", ss.str().c_str());
}
示例14: fromBt
inline mat4x4 fromBt(const btTransform& a)
{
mat4x4 r;
const btMatrix3x3& basis = a.getBasis();
for(int i = 0; i < 3; ++i)
{
for(int j = 0; j < 3; ++j)
r(j, i) = basis[i][j];
r(3, i) = 0;
}
const btVector3& origin = a.getOrigin();
r(0, 3) = origin.x();
r(1, 3) = origin.y();
r(2, 3) = origin.z();
r(3, 3) = 1;
return r;
}
示例15: reportHit
virtual btScalar reportHit(const btVector3& hitNormalLocal, btScalar hitFraction, int partId, int triangleIndex )
{
btCollisionWorld::LocalShapeInfo shapeInfo;
shapeInfo.m_shapePart = partId;
shapeInfo.m_triangleIndex = triangleIndex;
btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
btCollisionWorld::LocalRayResult rayResult
(m_collisionObject,
&shapeInfo,
hitNormalWorld,
hitFraction);
bool normalInWorldSpace = true;
return m_resultCallback->addSingleResult(rayResult,normalInWorldSpace);
}