Позиция слушателя Fmod

Возможно ли иметь несколько звуков в разных местах в трехмерном звуковом мире в Fmod? Я хотел бы построить все звуки в этом трехмерном мире и перемещать игрока.

Я разрабатываю для iPhone.


person Ellen S    schedule 30.06.2011    source источник


Ответы (2)


Чтобы поместить канал или событие в 3D-местоположение, используйте либо Channel::set3DAttributes, либо Event::set3DAttributes, эти функции принимают позицию в 3D-мире и вектор направления.

Если вы хотите «прогуляться» по 3D-миру, вам нужно настроить положение слушателя либо с помощью System::set3DListenerAttributes, либо с помощью EventSystem::set3DListenerAttributes (в зависимости от того, используете ли вы низкоуровневый API FMOD или API системы событий FMOD. Эти функции требуют вектор положения, вектор скорости, прямой вектор и восходящий вектор.

Я рекомендую обратиться к примеру 3D, который поставляется с FMOD, и проверить fmodex.chm для получения более подробной информации о вышеуказанных функциях.

person Mathew Block    schedule 01.07.2011
comment
Я использовал один из примеров из Fmod, но не ясно, могу ли я позиционировать более одного звука. - person Ellen S; 01.07.2011
comment
Да, вы можете расположить любое количество звуков. Каждый FMOD::Channel представляет собой воспроизводимый экземпляр FMOD::Sound, вы можете воспроизвести один и тот же звук несколько раз, чтобы получить несколько каналов, каждый из которых можно позиционировать. - person Mathew Block; 04.07.2011

Следующий код позволил мне поместить несколько звуков, которые были преобразованы в события в 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);
person Ellen S    schedule 07.07.2011