Возможно ли иметь несколько звуков в разных местах в трехмерном звуковом мире в Fmod? Я хотел бы построить все звуки в этом трехмерном мире и перемещать игрока.
Я разрабатываю для iPhone.
Возможно ли иметь несколько звуков в разных местах в трехмерном звуковом мире в Fmod? Я хотел бы построить все звуки в этом трехмерном мире и перемещать игрока.
Я разрабатываю для iPhone.
Чтобы поместить канал или событие в 3D-местоположение, используйте либо Channel::set3DAttributes, либо Event::set3DAttributes, эти функции принимают позицию в 3D-мире и вектор направления.
Если вы хотите «прогуляться» по 3D-миру, вам нужно настроить положение слушателя либо с помощью System::set3DListenerAttributes, либо с помощью EventSystem::set3DListenerAttributes (в зависимости от того, используете ли вы низкоуровневый API FMOD или API системы событий FMOD. Эти функции требуют вектор положения, вектор скорости, прямой вектор и восходящий вектор.
Я рекомендую обратиться к примеру 3D, который поставляется с FMOD, и проверить fmodex.chm для получения более подробной информации о вышеуказанных функциях.
Следующий код позволил мне поместить несколько звуков, которые были преобразованы в события в Fmod Designer, в трехмерный мир Fmod:
FMOD_RESULT result = FMOD_OK;
FMOD_VECTOR listenerpos = { 0.0f, 0.0f, 1.0f };
FMOD_VECTOR eventpos = { 0.0f, 0.0f, 1.0f };
FMOD_VECTOR eventpos2 = { 0.0f, 0.0f, 1.0f };
float DISTANCEFACTOR = 2.0f;
Событие 1 — это один из звуков, которые я хочу разместить в своем 3D-мире:
result = group->getEvent("Event 1", FMOD_EVENT_DEFAULT, &event1);
ERRCHECK(result);
Событие 2 — это другое событие, которое я хочу разместить в том же звуковом ландшафте:
result = group->getEvent("Event 2", FMOD_EVENT_DEFAULT, &event2);
ERRCHECK(result);
Я помещаю позицию слушателя в середину этого мира:
listenerpos.x = 0;
listenerpos.y = 0;
listenerpos.z = 0;
result = eventSystem->set3DListenerAttributes(0, &listenerpos,NULL,NULL,NULL);
ERRCHECK(result);
Я установил позицию одного из событий для объекта, который я перемещаю на экране iPhone:
eventpos.x = xPos;
eventpos.z = yPos;
result = event1->set3DAttributes(&eventpos,&vel);
ERRCHECK(result);
Я установил другое событие в другую позицию:
eventpos2.x = xPos2;
eventpos2.y = yPos2;
result = event2->set3DAttributes(&eventpos2,&vel);
ERRCHECK(result);
Вся система событий и 3D-мир обновлены этими позициями:
result = eventSystem->update();
ERRCHECK(result);
Я запускаю 2 события и слышу, как они перемещаются вокруг слушателя:
result = event1->start();
ERRCHECK(result);
result = event2->start();
ERRCHECK(result);