1

是否可以在 Fmod 的 3D 声音世界的不同位置有多个声音?我想绘制这个 3D 世界中的所有声音并在玩家周围移动。

我正在为 iPhone 开发。

4

2 回答 2

0

要将通道或事件放置在 3D 位置,请使用 Channel::set3DAttributes 或 Event::set3DAttributes,这些函数采用 3D 世界位置和方向向量。

如果您想在 3D 世界中“行走”,您需要使用 System::set3DListenerAttributes 或 EventSystem::set3DListenerAttributes 调整侦听器位置(取决于您使用的是 FMOD 低级 API 还是 FMOD 事件系统 API。这些函数采用位置矢量、速度矢量、前向矢量和向上矢量。

我建议参考 FMOD 附带的 3D 示例并检查 fmodex.chm 以获取有关上述功能的更多详细信息。

于 2011-07-01T00:35:19.570 回答
0

以下代码允许我将在 Fmod Designer 中制作成事件的几个声音放入 Fmod 的 3D 世界中:

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);
于 2011-07-07T10:03:00.660 回答