Bücher online kostenlos Kostenlos Online Lesen
Erfolgreiche Spieleentwicklung

Erfolgreiche Spieleentwicklung

Titel: Erfolgreiche Spieleentwicklung
Autoren: Alexander Rudolph
Vom Netzwerk:
&ViewMatrix);

alSource3f(SoundSource, AL_POSITION, TransformedPosition.x, TransformedPosition.y, TransformedPosition.z);

alSource3f(SoundSource, AL_VELOCITY, TransformedVelocity.x,TransformedVelocity.y, TransformedVelocity.z);

// Lautstärke festlegen:
alSourcef (SoundSource, AL_GAIN, Gain*g_EffectVolume);

// Abspielvorgang wiederholen, falls erwünscht:
if(playLoop == FALSE)
alSourcei(SoundSource, AL_LOOPING, AL_FALSE);
else
alSourcei(SoundSource, AL_LOOPING, AL_TRUE);

// Maximale Distanz festlegen, innerhalb derer die Soundquelle
// noch hörbar ist:
alSourcef(SoundSource, AL_MAX_DISTANCE, maxDistance);

// Festlegen, wie sich die Lautstärke mit zunehmender
// Entfernung abschwächt:
alSourcei(SoundSource, AL_ROLLOFF_FACTOR, rolloff);

// Tonhöhe/Abspielgeschwindigkeit festlegen (pitch > 1.0 =>
//Sound wird schneller abgespielt und klingt höher):
alSourcef(SoundSource, AL_PITCH, pitch);

// Ausrichtung der Soundquelle festlegen:
alSource3f(SoundSource, AL_DIRECTION, Direction.x, Direction.y, Direction.z);
alSourcef(SoundSource, AL_CONE_INNER_ANGLE, Cone_Inner_Angle);
alSourcef(SoundSource, AL_CONE_OUTER_ANGLE, Cone_Outer_Angle);
alSourcef(SoundSource, AL_CONE_OUTER_GAIN, Cone_Outer_Gain);

// Position, Geschwindigkeit und Ausrichtung der Soundquelle
// sollen relativ zur Position, Geschwindigkeit und
// Ausrichtung des Zuhörers interpretiert werden:
alSourcei(SoundSource, AL_SOURCE_RELATIVE, AL_TRUE);
    Listing 3.2: Eigenschaften einer Soundquelle

3.5 EFX-Effekte
    Speziell für den Einsatz in Verbindung mit OpenAL entwickelt, erlaubt das EFX-Framework eine mit EAX vergleichbare plattformübergreifende Berechnung von DSP-Soundeffekten. Im Fokus stehen hierbei die sogenannten Reverb-Effekte, mit deren Hilfe sich die Klangkulissen in unterschiedlichen räumlichen Umgebungen durch Simulation der Schallreflexion an Begrenzungswänden und Hindernissen berechnen lassen. Um überhaupt einen Effekt einsetzen zu können, müssen wir zunächst ein Effekt-Objekt mithilfe der CreateEffect() -Funktion anlegen. Als Rückgabewert erhält man wie üblich die Objekt-ID in Form einer vorzeichenlosen Ganzzahl vom Typ ALuint . Des Weiteren benötigen wir einen sogenannten Auxiliary Effect Slot , der mittels der Funktion CreateAuxEffectSlot() erzeugt wird. Bildlich gesprochen muss jeder Effekt, bevor er verwendet werden kann, zuvor in einen ungenutzten Effekt-Slot geschoben werden (Listing 3.3).
    ALuint EffectSlot1;
ALuint Effect1;

[. . .]

if(ALFWIsEFXSupported())
{
// Auxiliary Effect Slot erzeugen:
CreateAuxEffectSlot(&EffectSlot1);

// Effect-Object erzeugen:
CreateEffect(&Effect1, AL_EFFECT_EAXREVERB);
}
    Listing 3.3 EFX-Effekt-Objekt und Auxiliary Effekt-Slot erzeugen
    Ein großes Plus bei der Verwendung des EFX-Frameworks besteht darin, dass sich auch im EAX-Format definierte DSP-Effekte einsetzen lassen. Verantwortlich für die Konvertierung der EAX-Effekt-Eigenschaften ( EAXREVERBPROPERTIES ) in ein für EFX kompatibles Format ( EFXEAXREVERBPROPERTIES ) ist die ConvertReverbParameters()- Funktion. Im Anschluss daran lassen sich die so konvertierten Effektparameter mithilfe der SetEFXEAXReverbProperties() -Funktion einem Effektobjekt zuweisen. Bevor der Effekt schließlich verwendet werden kann, muss das betreffende Effektobjekt mittels alAuxiliaryEffectSloti() einem ungenutzten Effekt-Slot zugewiesen werden.
    // Eigenschaften eines EFX-Reverb-Effekts:
EFXEAXREVERBPROPERTIES efxReverb;

// Eigenschaften des dem EFX-Reverb-Effekt zugrundeliegenden
// EAX-Effekts:
EAXREVERBPROPERTIES eaxEffect;

// Konvertieren eines EAX-Reverb-Effekts ins EFX-Format:
ConvertReverbParameters(&eaxEffect, &efxReverb);

// Effekt-Parameter setzen:
SetEFXEAXReverbProperties(&efxReverb, Effect1);

// Laden des Effekts in den Auxiliary Effect Slot:
alAuxiliaryEffectSloti(EffectSlot1, AL_EFFECTSLOT_EFFECT, Effect1);
    Listing 3.4: Einsatz von EAX-Effekten in Verbindung mit dem EFX-Framework
    Über den alSource() -Parameter AL_AUXILIARY_SEND_FILTER lässt sich festlegen, welcher Effekt-Slot (und damit welcher EFX-Effekt) beim Abspielen einer Soundquelle berücksichtigt werden soll:
    alSource3i(SoundSource, AL_AUXILIARY_SEND_FILTER, EffectSlot1, 0, AL_FILTER_NULL);
    Selbstverständlich lassen beim Abspielen sich auch weitere Effekte berücksichtigen:
    alSource3i(SoundSource, AL_AUXILIARY_SEND_FILTER, EffectSlot2, 1, AL_FILTER_NULL);
    Soll im weiteren Abspielverlauf ein zuvor ausgewählter Effekt zukünftig unberücksichtigt bleiben, muss anstelle
Vom Netzwerk:

Weitere Kostenlose Bücher