private void Apply3D(AudioListener listener, AudioEmitter emitter)
        {
            if (sid == 0)
            {
                return;
            }


            float x, y, z;

            AL.GetListener(ALListener3f.Position, out x, out y, out z);

            Vector3 posOffset = emitter.Position - listener.Position;
            // set up orientation matrix
            Matrix  orientation = Matrix.Identity;
            Vector3 forward     = listener.Forward.Normalized();
            Vector3 right       = Vector3.Cross(forward, listener.Up);
            Vector3 up          = Vector3.Cross(right, forward);

            orientation.M11 = right.X;
            orientation.M12 = right.Y;
            orientation.M13 = right.Z;
            orientation.M21 = up.X;
            orientation.M22 = up.Y;
            orientation.M23 = up.Z;
            orientation.M31 = -forward.X;
            orientation.M32 = -forward.Y;
            orientation.M33 = -forward.Z;

            // set up our final position and velocity according to orientation of listener
            Vector3 finalPos = new Vector3(x + posOffset.X, y + posOffset.Y, z + posOffset.Z);

            finalPos = Vector3.Transform(finalPos, orientation);
            Vector3 finalVel = emitter.Velocity;

            finalVel = Vector3.Transform(finalVel, orientation);

            // set the position based on relative positon
            AL.Source(sid, ALSource3f.Position, finalPos.X, finalPos.Y, finalPos.Z);
            AL.Source(sid, ALSource3f.Velocity, finalVel.X, finalVel.Y, finalVel.Z);
        }
Esempio n. 2
0
 public void Apply3D(AudioListener[] listeners, AudioEmitter emitter)
 {
     throw new NotSupportedException("Just one listener is supported!");
     //foreach(var l in listeners)
     //    Apply3D(l,emitter);
 }