在Fmod的3D声音世界中,有可能在不同的地方有几个声音吗?我想在这个3D世界中绘制所有声音并在玩家周围移动。
我正在为iPhone开发。
答案 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);