本文整理汇总了C#中BulletX.LinerMath.btVector3.dot方法的典型用法代码示例。如果您正苦于以下问题:C# btVector3.dot方法的具体用法?C# btVector3.dot怎么用?C# btVector3.dot使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BulletX.LinerMath.btVector3
的用法示例。
在下文中一共展示了btVector3.dot方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: computeAngularImpulseDenominator
public float computeAngularImpulseDenominator(btVector3 axis)
{
btVector3 vec;// = axis * InvInertiaTensorWorld;
btMatrix3x3.Multiply(ref axis, ref InvInertiaTensorWorld, out vec);
return axis.dot(vec);
}
示例2: computeImpulseDenominator
public float computeImpulseDenominator(btVector3 pos, btVector3 normal)
{
btVector3 r0 = pos - CenterOfMassPosition;
btVector3 c0 = (r0).cross(normal);
btVector3 vec;
#region btVector3 vec = (c0 * InvInertiaTensorWorld).cross(r0);
{
btVector3 temp;
btMatrix3x3.Multiply(ref c0, ref InvInertiaTensorWorld, out temp);
vec = temp.cross(r0);
}
#endregion
return m_inverseMass + normal.dot(vec);
}
示例3: segmentsClosestPoints
static void segmentsClosestPoints(
out btVector3 ptsVector,
out btVector3 offsetA,
out btVector3 offsetB,
out float tA, out float tB,
ref btVector3 translation,
ref btVector3 dirA, float hlenA,
ref btVector3 dirB, float hlenB)
{
// compute the parameters of the closest points on each line segment
float dirA_dot_dirB = dirA.dot(dirB);
float dirA_dot_trans = dirA.dot(translation);
float dirB_dot_trans = dirB.dot(translation);
float denom = 1.0f - dirA_dot_dirB * dirA_dot_dirB;
if (denom == 0.0f)
{
tA = 0.0f;
}
else
{
tA = (dirA_dot_trans - dirB_dot_trans * dirA_dot_dirB) / denom;
if (tA < -hlenA)
tA = -hlenA;
else if (tA > hlenA)
tA = hlenA;
}
tB = tA * dirA_dot_dirB - dirB_dot_trans;
if (tB < -hlenB)
{
tB = -hlenB;
tA = tB * dirA_dot_dirB + dirA_dot_trans;
if (tA < -hlenA)
tA = -hlenA;
else if (tA > hlenA)
tA = hlenA;
}
else if (tB > hlenB)
{
tB = hlenB;
tA = tB * dirA_dot_dirB + dirA_dot_trans;
if (tA < -hlenA)
tA = -hlenA;
else if (tA > hlenA)
tA = hlenA;
}
// compute the closest points relative to segment centers.
//offsetA = dirA * tA;
btVector3.Multiply(ref dirA, tA, out offsetA);
//offsetB = dirB * tB;
btVector3.Multiply(ref dirB, tB, out offsetB);
#region ptsVector = translation - offsetA + offsetB;
{
btVector3 temp;
btVector3.Subtract(ref translation, ref offsetA, out temp);
btVector3.Add(ref temp, ref offsetB, out ptsVector);
}
#endregion
}
示例4: get_limit_motor_info2
public int get_limit_motor_info2(
RotationalLimitMotor limot,
btTransform transA,btTransform transB,btVector3 linVelA,btVector3 linVelB,btVector3 angVelA,btVector3 angVelB,
ConstraintInfo2 info, int row,ref btVector3 ax1, bool rotational,bool rotAllowed)
{
//ポインタを使わず、Listを直接受け取っているので、srow=rowとして、Listに入れるように修正
//int srow = row * info.rowskip;
int srow = row;
bool powered = limot.m_enableMotor;
int limit = limot.m_currentLimit;
if (powered || limit!=0)
{ // if the joint is powered, or has joint limits, add in the extra row
//rotationalでポインタ分けをしていたのを修正。
#if false
float *J1 = rotational ? info.m_J1angularAxis : info.m_J1linearAxis;
J1[srow+0] = ax1[0];
J1[srow+1] = ax1[1];
J1[srow+2] = ax1[2];
#endif
if (rotational)
info.Constraints[srow + info.CurrentRow].m_relpos1CrossNormal = ax1;
else
info.Constraints[srow + info.CurrentRow].m_contactNormal = ax1;
//btScalar* J2 = rotational ? info->m_J2angularAxis : 0;
if (rotational)
{
#if false
J2[srow+0] = -ax1[0];
J2[srow+1] = -ax1[1];
J2[srow+2] = -ax1[2];
#endif
info.Constraints[srow + info.CurrentRow].m_relpos2CrossNormal = -ax1;
}
if((!rotational))
{
if (m_useOffsetForConstraintFrame)
{
btVector3 tmpA, tmpB, relA, relB;
// get vector from bodyB to frameB in WCS
relB = m_calculatedTransformB.Origin - transB.Origin;
// get its projection to constraint axis
btVector3 projB = ax1 * relB.dot(ax1);
// get vector directed from bodyB to constraint axis (and orthogonal to it)
btVector3 orthoB = relB - projB;
// same for bodyA
relA = m_calculatedTransformA.Origin - transA.Origin;
btVector3 projA = ax1 * relA.dot(ax1);
btVector3 orthoA = relA - projA;
// get desired offset between frames A and B along constraint axis
float desiredOffs = limot.m_currentPosition - limot.m_currentLimitError;
// desired vector from projection of center of bodyA to projection of center of bodyB to constraint axis
btVector3 totalDist;// = projA + ax1 * desiredOffs - projB;
{
btVector3 temp1, temp2;
btVector3.Multiply(ref ax1, desiredOffs, out temp1);
btVector3.Add(ref projA, ref temp1, out temp2);
btVector3.Subtract(ref temp2, ref projB, out totalDist);
}
// get offset vectors relA and relB
#region relA = orthoA + totalDist * m_factA;
{
btVector3 temp;
btVector3.Multiply(ref totalDist, m_factA, out temp);
btVector3.Add(ref orthoA, ref temp, out relA);
}
#endregion
#region relB = orthoB - totalDist * m_factB;
{
btVector3 temp;
btVector3.Multiply(ref totalDist, m_factB, out temp);
btVector3.Subtract(ref orthoB, ref temp, out relB);
}
#endregion
//tmpA = relA.cross(ax1);
relA.cross(ref ax1, out tmpA);
//tmpB = relB.cross(ax1);
relB.cross(ref ax1, out tmpB);
if (m_hasStaticBody && (!rotAllowed))
{
tmpA *= m_factA;
tmpB *= m_factB;
}
//int i;
//for (i=0; i<3; i++) info->m_J1angularAxis[srow+i] = tmpA[i];
//for (i=0; i<3; i++) info->m_J2angularAxis[srow+i] = -tmpB[i];
info.Constraints[srow + info.CurrentRow].m_relpos1CrossNormal = tmpA;
info.Constraints[srow + info.CurrentRow].m_relpos2CrossNormal = -tmpB;
}
else
{
btVector3 ltd; // Linear Torque Decoupling vector
btVector3 c = m_calculatedTransformB.Origin - transA.Origin;
ltd = c.cross(ax1);
#if false
info->m_J1angularAxis[srow+0] = ltd[0];
info->m_J1angularAxis[srow+1] = ltd[1];
//.........这里部分代码省略.........
示例5: dot
public static float dot(ref btVector3 v1, ref btVector3 v2)
{
return v1.dot(ref v2);
}