IIRC, выравнивание стека состоит в том, когда переменные помещаются в стек, "выровненный" к конкретному числу байтов. Таким образом, при использовании выравнивания стека на 16 битов каждая переменная на стеке собирается начать с байта, который является кратным 2 байтам от текущего указателя вершины стека в функции.
Это означает что при использовании переменной, которая является < 2 байта, такие как символ (1 байт), будут 8 битами неиспользованного "дополнения" между ним и следующей переменной. Это позволяет определенные оптимизации с предположениями на основе переменных местоположений.
При вызывании функций, один метод передающих аргументов следующей функции должен разместить их в стек (в противоположность размещению их непосредственно в регистры). Используется ли выравнивание, здесь важно, поскольку функция вызова помещает переменные в стек, чтобы быть прочитанной функцией вызова использующие смещения. Если функция вызова выровняет переменные, и вызванная функция ожидает, что они будут неприсоединившимися, то вызванная функция не будет в состоянии найти их.
кажется, что msvc скомпилированный код не соглашается о переменном выравнивании. Попытайтесь компилировать со всеми выключенными оптимизациями.
Итак, глядя на btRigidBody.h
, я заметил следующий код:
void applyTorqueImpulse(const btVector3& torque)
{
m_angularVelocity += m_invInertiaTensorWorld * torque * m_angularFactor;
}
Теперь, насколько я понимаю, вы хотите, чтобы ваш крутящий момент был равен некоторой постоянной, умноженной на вектор вращения вокруг ось x (или z), связанная с вашим космическим кораблем.
Как мы знаем, обобщенную матрицу вращения можно определить следующим образом:
Это означает, что если вы можете идентифицировать выровненный по оси крутящий момент (который я не знаю, исходя из моей головы), вы можете преобразовать его с помощью:
mBody->getWorldTransform()*axisAlignedXTorque
Что согласно http: //www.bulletphysics .com / Bullet / BulletFull / classbtTransform.html здесь оператор * переопределяется для выполнения мирового преобразования вектора крутящего момента.