Я пытаюсь настроить 3D-звуки с помощью FMOD в игре, в которой используется Ogre. Звуковой слушатель прикреплен к камере, которая работает на сплайне. У меня есть звуки шагов, прикрепленные к плееру, и громкость должна определяться тем, насколько далеко игрок находится от камеры.
Звуки шагов ступни действуют так, как будто слушатель звука не движется из своего начального положения. В начале уровня шаги громкие, и по мере удаления от начала они становятся тише, пока вы их больше не слышите. Если вы вернетесь к началу, они станут громче. Однако положение узла сцены звукового слушателя обновляется и синхронизируется с камерой.
В коде есть ошибка FMOD, генерируемая каждый кадр в следующей строке:
result = m_system->set3DListenerAttributes(0, &pos, &vel, &forward, &up);
результат всегда возвращает FMOD_ERR_INVALID_HANDLE со следующей строкой ошибки - «Использован неверный дескриптор объекта». Я не могу понять, почему эта ошибка генерируется. Все FMOD_VECTOR, передаваемые в качестве параметров, инициализируются, и я, похоже, правильно настраиваю систему. Код повсюду в разных классах, но вот важные биты:
// Initialise FMOD system
result = m_system->init(4093, FMOD_INIT_3D_RIGHTHANDED, 0);
result = m_system->set3DSettings(1.0f, 1.0f, 1.0f);
// Create sound
FMOD_MODE mode = FMOD_SOFTWARE;
if(a_positional)
{
mode |= FMOD_3D;
}
FMOD_CREATESOUNDEXINFO info;
memset(&info, 0, sizeof(FMOD_CREATESOUNDEXINFO));
info.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
r = sys->_getFMODSystem()->createSound(a_file.c_str(), mode, &info, &retVal);
// Update sound listener
FMOD_VECTOR pos, vel, forward, up;
pos.x = m_sceneNode->getParentSceneNode()->_getDerivedPosition().x;
pos.y = m_sceneNode->getParentSceneNode()->_getDerivedPosition().y;
pos.z = m_sceneNode->getParentSceneNode()->_getDerivedPosition().z;
vel.x = 0;
vel.y = 0;
vel.z = 0;
forward.x = 0;
forward.y = 0;
forward.z = 1;
up.x = 0;
up.y = 1;
up.z = 0;
result = m_system->set3DListenerAttributes(0, &pos, &vel, &forward, &up);
// FMOD error: (36) An invalid object handle was used.
Есть идеи, почему «result» возвращает эту ошибку? Я предполагаю, что это причина, почему 3D-звуки не воспроизводятся правильно.