diff options
Diffstat (limited to 'extern/audaspace/include/devices/I3DDevice.h')
-rw-r--r-- | extern/audaspace/include/devices/I3DDevice.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/extern/audaspace/include/devices/I3DDevice.h b/extern/audaspace/include/devices/I3DDevice.h new file mode 100644 index 00000000000..f49bbcbb07e --- /dev/null +++ b/extern/audaspace/include/devices/I3DDevice.h @@ -0,0 +1,142 @@ +/******************************************************************************* + * Copyright 2009-2016 Jörg Müller + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ******************************************************************************/ + +#pragma once + +/** + * @file I3DDevice.h + * @ingroup devices + * Defines the I3DDevice interface as well as the different distance models. + */ + +#include "util/Math3D.h" + +AUD_NAMESPACE_BEGIN + +/** + * Possible distance models for the 3D device. + * + * The distance models supported are the same as documented in the [OpenAL Specification](http://openal.org/). + */ +enum DistanceModel +{ + DISTANCE_MODEL_INVALID = 0, + DISTANCE_MODEL_INVERSE, + DISTANCE_MODEL_INVERSE_CLAMPED, + DISTANCE_MODEL_LINEAR, + DISTANCE_MODEL_LINEAR_CLAMPED, + DISTANCE_MODEL_EXPONENT, + DISTANCE_MODEL_EXPONENT_CLAMPED +}; + +/** + * @interface I3DDevice + * The I3DDevice interface represents an output device for 3D sound. + * + * The interface has been modelled after the OpenAL 1.1 API, + * see the [OpenAL Specification](http://openal.org/) for lots of details. + */ +class AUD_API I3DDevice +{ +public: + /** + * Retrieves the listener location. + * \return The listener location. + */ + virtual Vector3 getListenerLocation() const=0; + + /** + * Sets the listener location. + * \param location The new location. + * \note The location is not updated with the velocity and + * remains constant until the next call of this method. + */ + virtual void setListenerLocation(const Vector3& location)=0; + + /** + * Retrieves the listener velocity. + * \return The listener velocity. + */ + virtual Vector3 getListenerVelocity() const=0; + + /** + * Sets the listener velocity. + * \param velocity The new velocity. + * \note This velocity does not change the position of the listener + * over time, it is simply used for the calculation of the doppler effect. + */ + virtual void setListenerVelocity(const Vector3& velocity)=0; + + /** + * Retrieves the listener orientation. + * \return The listener orientation as quaternion. + */ + virtual Quaternion getListenerOrientation() const=0; + + /** + * Sets the listener orientation. + * \param orientation The new orientation as quaternion. + * \note The coordinate system used is right handed and the listener + * by default is oriented looking in the negative z direction with the + * positive y axis as up direction. + */ + virtual void setListenerOrientation(const Quaternion& orientation)=0; + + + /** + * Retrieves the speed of sound. + * This value is needed for doppler effect calculation. + * \return The speed of sound. + */ + virtual float getSpeedOfSound() const=0; + + /** + * Sets the speed of sound. + * This value is needed for doppler effect calculation. + * \param speed The new speed of sound. + */ + virtual void setSpeedOfSound(float speed)=0; + + /** + * Retrieves the doppler factor. + * This value is a scaling factor for the velocity vectors of sources and + * listener which is used while calculating the doppler effect. + * \return The doppler factor. + */ + virtual float getDopplerFactor() const=0; + + /** + * Sets the doppler factor. + * This value is a scaling factor for the velocity vectors of sources and + * listener which is used while calculating the doppler effect. + * \param factor The new doppler factor. + */ + virtual void setDopplerFactor(float factor)=0; + + /** + * Retrieves the distance model. + * \return The distance model. + */ + virtual DistanceModel getDistanceModel() const=0; + + /** + * Sets the distance model. + * \param model distance model. + */ + virtual void setDistanceModel(DistanceModel model)=0; +}; + +AUD_NAMESPACE_END |