OpenAL und AL_ORIENTATION
-
hallo,
ich hoffe es kann mir einer dabei helfen. ich hab ein problem mit openal und der orientierung in einer 3d welt mit opengl. als erstes hier ein link zu einer rar datei die zwei exe dateien beinhaltet: http://rapidshare.com/files/171206315/public.rar.html (bitte nur runterladen wer helfen will, das ding hat eine dl begrenzung). es muss das openal redist installiert sein.
ich habe eine kamera klasse mit der ich mich in der welt bewege. die kamera wird mit der gluLookAt() gesetzt. die position und der lookat vector sind oben rechts in der anwendung dargestellt. diese beiden vectoren lasse ich mir über zwei funktionen zurückgeben. und diese zwei vectoren werden an die klasse für die audio wiedergabe weitergeleitet ... so wie sind sind, als absolute welt koordinaten.
die eine exe ist mit Listener Orientierung, die andere ohne. die exe ohne AL_ORIENTATION funktioniert soweit wenn man sich im raum bewegt nur wird die blickrichtung nicht berücksichtigt. mit AL_ORIENTATION funktioniert es nur solange man sich nicht bewegt, also vor und zurück usw.
ich sitz jetzt schon seit mehreren tagen an dem problem und komm damit nicht weiter, in google find ich nichts hilfreiches. es macht scheinbar auch keinen unterschied ob ich den AL_ORIENTATION mit relativen oder absoluten punkten setze.
also kurz, wie muss ich AL_ORIENTATION setzen.
void SetListenerOrientation(Vector3D LookAt) { // Hier als Beispiel mit relativen Koordinaten wobei die in LookAt Absolut sind this->m_fListenerOrientation[0] = LookAt.x - this->m_fListenerPosition[0]; this->m_fListenerOrientation[1] = LookAt.y - this->m_fListenerPosition[1]; this->m_fListenerOrientation[2] = LookAt.z - this->m_fListenerPosition[2]; this->m_fListenerOrientation[3] = 0.0f; this->m_fListenerOrientation[4] = 1.0f; this->m_fListenerOrientation[5] = 0.0f; } void UpdateListener() { alListenerfv(AL_POSITION, this->m_fListenerPosition ); alListenerfv(AL_VELOCITY, this->m_fListenerVelocity); alListenerfv(AL_ORIENTATION, this->m_fListenerOrientation); }
-
immer das selbe, man kommt nicht weiter, erstellt nen thread und findet danach die lösung. fehlt zwar noch y achse aber das wird wohl kein beinbruch werden.
void SetListenerOrientation(float rotation) { float LookAtx = 0.0f; float LookAtz = -1.0f; mbSetRotation(&LookAtx, &LookAtz, rotation); this->m_fListenerOrientation[0] = LookAtx; this->m_fListenerOrientation[1] = 0.0f; this->m_fListenerOrientation[2] = LookAtz; this->m_fListenerOrientation[3] = 0.0f; this->m_fListenerOrientation[4] = 1.0f; this->m_fListenerOrientation[5] = 0.0f; }