是否可以在 Fmod 的 3D 声音世界的不同位置有多个声音?我想绘制这个 3D 世界中的所有声音并在玩家周围移动。
我正在为 iPhone 开发。
要将通道或事件放置在 3D 位置,请使用 Channel::set3DAttributes 或 Event::set3DAttributes,这些函数采用 3D 世界位置和方向向量。
如果您想在 3D 世界中“行走”,您需要使用 System::set3DListenerAttributes 或 EventSystem::set3DListenerAttributes 调整侦听器位置(取决于您使用的是 FMOD 低级 API 还是 FMOD 事件系统 API。这些函数采用位置矢量、速度矢量、前向矢量和向上矢量。
我建议参考 FMOD 附带的 3D 示例并检查 fmodex.chm 以获取有关上述功能的更多详细信息。
以下代码允许我将在 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);