Fmod听众的位置

时间:2011-06-30 20:14:23

标签: iphone fmod

在Fmod的3D声音世界中,有可能在不同的地方有几个声音吗?我想在这个3D世界中绘制所有声音并在玩家周围移动。

我正在为iPhone开发。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分: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);