1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-03-05 22:19:42 +00:00

Specify a proper up vector for the listener

This commit is contained in:
Chris Robinson 2012-09-30 17:23:05 -07:00
parent 991f942fba
commit 6942fa97da
4 changed files with 9 additions and 5 deletions

View file

@ -114,7 +114,7 @@ namespace MWBase
virtual void update(float duration) = 0;
virtual void setListenerPosDir(const Ogre::Vector3 &pos, const Ogre::Vector3 &dir) = 0;
virtual void setListenerPosDir(const Ogre::Vector3 &pos, const Ogre::Vector3 &dir, const Ogre::Vector3 &up) = 0;
};
inline int operator|(SoundManager::PlayMode a, SoundManager::PlayMode b)

View file

@ -111,12 +111,14 @@ namespace MWRender
{
Ogre::Vector3 pos = mCamera->getRealPosition();
Ogre::Vector3 dir = mCamera->getRealDirection();
Ogre::Vector3 up = mCamera->getRealUp();
Ogre::Real xch;
xch = pos.y, pos.y = -pos.z, pos.z = xch;
xch = dir.y, dir.y = -dir.z, dir.z = xch;
xch = up.y, up.y = -up.z, up.z = xch;
MWBase::Environment::get().getSoundManager()->setListenerPosDir(pos, dir);
MWBase::Environment::get().getSoundManager()->setListenerPosDir(pos, dir, up);
}
void Player::update(float duration)

View file

@ -486,7 +486,7 @@ namespace MWSound
mOutput->updateListener(
mListenerPos,
mListenerDir,
Ogre::Vector3::UNIT_Z,
mListenerUp,
env
);
@ -546,10 +546,11 @@ namespace MWSound
}
}
void SoundManager::setListenerPosDir(const Ogre::Vector3 &pos, const Ogre::Vector3 &dir)
void SoundManager::setListenerPosDir(const Ogre::Vector3 &pos, const Ogre::Vector3 &dir, const Ogre::Vector3 &up)
{
mListenerPos = pos;
mListenerDir = dir;
mListenerUp = up;
}
// Default readAll implementation, for decoders that can't do anything

View file

@ -52,6 +52,7 @@ namespace MWSound
Ogre::Vector3 mListenerPos;
Ogre::Vector3 mListenerDir;
Ogre::Vector3 mListenerUp;
std::string lookup(const std::string &soundId,
float &volume, float &min, float &max);
@ -128,7 +129,7 @@ namespace MWSound
virtual void update(float duration);
virtual void setListenerPosDir(const Ogre::Vector3 &pos, const Ogre::Vector3 &dir);
virtual void setListenerPosDir(const Ogre::Vector3 &pos, const Ogre::Vector3 &dir, const Ogre::Vector3 &up);
};
}