Однако я фиксирую угловое движение на Ось Y (шаг), но, похоже, она не работает:
При инициализации:
Код: Выделить всё
// Player.cpp
m_physicsBodyComp->LockRotation({0.f, 1.f, 0.f});
// PhysicsBodyComponent.cpp
void tse::PhysicsBodyComponent::LockRotation(const TSVector3 & a_axis) {
if(m_rigidBody)
m_rigidBody->setAngularFactor(btVector3(a_axis.GetX(), a_axis.GetY(), a_axis.GetZ()));
}
Код: Выделить всё
// Before physics simulation
void tse::PhysicsBodyComponent::UpdateTransformComponent() {
if(m_rigidBody) {
if(m_transformComponent->m_wasDirty && m_transformComponent->IsValid()) {
btQuaternion _quat;
_quat.setEuler(m_transformComponent->m_rotation.GetY(), m_transformComponent->m_rotation.GetX(), m_transformComponent->m_rotation.GetZ());
btTransform _trans;
_trans.setRotation(_quat);
_trans.setOrigin(m_transformComponent->m_position.GetVecBt());
m_rigidBody->setWorldTransform(_trans);
m_transformComponent->m_wasDirty = false;
Activate();
}
}
}
// After physics simulation
void tse::PhysicsBodyComponent::Update(float a_deltaTime) {
if(m_rigidBody) {
if(m_bodyType == PhysicsBodyType::DYNAMIC) {
btTransform & _trans = m_rigidBody->getWorldTransform();
DirectX::XMVECTOR _rotation;
btQuaternion _quat = _trans.getRotation();
_rotation.m128_f32[0] = _quat.getX();
_rotation.m128_f32[1] = _quat.getY();
_rotation.m128_f32[2] = _quat.getZ();
m_transformComponent->SetPosition(TSVector3(_trans.getOrigin()));
m_transformComponent->SetRotation(_rotation);
}
}
}
Я делаю что-то совершенно неправильно или это известная ошибка в физике Bullet? Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/470 ... esnt-apply
Мобильная версия