#include <math.h>#include "Trace.h"#include "Vec3d.h"#include "XForm3d.h"#include "Camera.h"#include "Sound3d.h"Go to the source code of this file.
Compounds | |
| struct | geSound3d_Cfg |
Typedefs | |
| typedef geSound3d_Cfg | geSound3d_Cfg |
Functions | |
| void | geSound3D_RollOut (geSound3d_Cfg *Cfg, geFloat Dist, geFloat Min, geFloat Max) |
| void | geSound3D_Pan (geSound3d_Cfg *Cfg, geFloat FaceOffset) |
| void | geSound3D_Doppler (geSound3d_Cfg *Cfg, geFloat Mps) |
| GENESISAPI void | geSound3D_GetConfig (const geWorld *World, const geXForm3d *MXForm, const geVec3d *SndPos, geFloat Min, geFloat Ds, geFloat *Volume, geFloat *Pan, geFloat *Frequency) |
| GENESISAPI void | geSound3D_GetConfigIgnoreObstructions (const geWorld *World, const geXForm3d *MXForm, const geVec3d *SndPos, geFloat Min, geFloat Ds, geFloat *Volume, geFloat *Pan, geFloat *Frequency) |
|
|
|
|
||||||||||||
|
Definition at line 75 of file Sound3d.c. References geSound3d_Cfg::Frequency, and NULL. Referenced by geSound3D_GetConfig(), and geSound3D_GetConfigIgnoreObstructions().
00076 {
00077 //331 mps is the velocity of sound through air in standard conditions.
00078 assert(Cfg != NULL);
00079 Cfg->Frequency = 1.0f + (Mps/ 331.0f );
00080 }
|
|
||||||||||||||||||||||||||||||||||||
|
Definition at line 87 of file Sound3d.c. References geSound3d_Cfg::Frequency, GE_COLLIDE_MODELS, GE_CONTENTS_SOLID_CLIP, geCamera_ConvertWorldSpaceToCameraSpace(), geFloat, GENESISAPI, geSound3D_Doppler(), geSound3D_Pan(), geSound3D_RollOut(), geVec3d_Length(), geVec3d_Subtract(), geWorld_GetLeaf(), geWorld_LeafMightSeeLeaf(), geXForm3d_Transform(), int32, NULL, geSound3d_Cfg::Pan, Trace_GEWorldCollision(), geXForm3d::Translation, geSound3d_Cfg::Volume, geVec3d::X, and geVec3d::Z. Referenced by Electric_Frame(), and ReadServerMessages().
00096 {
00097 geVec3d ViewPos, LocalPos, Dist;
00098 geSound3d_Cfg Cfg;
00099 geFloat Magnitude;
00100 geVec3d Origin = {0.0f, 0.0f, 0.0f};
00101 geXForm3d CXForm;
00102 int32 Leaf1, Leaf2;
00103
00104 assert( World != NULL );
00105 assert( MXForm != NULL );
00106 assert( SndPos != NULL );
00107 assert( Volume != NULL );
00108 assert( Pan != NULL );
00109 assert( Frequency != NULL );
00110
00111
00112 LocalPos = MXForm->Translation;
00113 // Transform the sound to view space
00114 geCamera_ConvertWorldSpaceToCameraSpace(MXForm, &CXForm);
00115 geXForm3d_Transform( &CXForm, SndPos, &ViewPos);
00116 // FIXME: Need to check these and return TRUE or FALSE
00117 if( !geWorld_GetLeaf((geWorld*)World, &LocalPos, &Leaf1) )
00118 return;
00119 if( !geWorld_GetLeaf((geWorld*)World, SndPos, &Leaf2) )
00120 return;
00121
00122 if (!geWorld_LeafMightSeeLeaf((geWorld*)World, Leaf1, Leaf2, 0))
00123 {
00124 Magnitude = 0.0f;
00125 Dist.X = 0.0f; // Shut up compiler warning
00126 Cfg.Volume = 0.0f;
00127 }
00128 else
00129 {
00130 GE_Collision Col;
00131
00132 // Find the distance from the camera to the original light pos
00133 geVec3d_Subtract(&LocalPos, SndPos, &Dist);
00134
00135 Magnitude = geVec3d_Length(&Dist);
00136
00137 if (Trace_GEWorldCollision((geWorld*)World, NULL, NULL, &LocalPos, SndPos, GE_CONTENTS_SOLID_CLIP, GE_COLLIDE_MODELS, 0, NULL, NULL, &Col))
00138 Magnitude *= 1.5f;
00139
00140 geSound3D_RollOut(&Cfg, Magnitude, Min, Min*10);
00141 }
00142
00143 geSound3D_Pan(&Cfg, (geFloat)atan2( (double)ViewPos.X, (double)ViewPos.Z ) );
00144 //Cfg->Frequency = 1.0f;
00145 geSound3D_Doppler(&Cfg, Ds);
00146
00147 *Volume = Cfg.Volume;
00148 *Pan = Cfg.Pan;
00149 *Frequency = Cfg.Frequency;
00150 }
|
|
||||||||||||||||||||||||||||||||||||
|
Definition at line 156 of file Sound3d.c. References geSound3d_Cfg::Frequency, geCamera_ConvertWorldSpaceToCameraSpace(), geFloat, GENESISAPI, geSound3D_Doppler(), geSound3D_Pan(), geSound3D_RollOut(), geVec3d_Length(), geVec3d_Subtract(), geWorld_GetLeaf(), geWorld_LeafMightSeeLeaf(), geXForm3d_Transform(), int32, NULL, geSound3d_Cfg::Pan, geXForm3d::Translation, geSound3d_Cfg::Volume, geVec3d::X, and geVec3d::Z.
00165 {
00166 geVec3d ViewPos, LocalPos, Dist;
00167 geSound3d_Cfg Cfg;
00168 geFloat Magnitude;
00169 geVec3d Origin = {0.0f, 0.0f, 0.0f};
00170 geXForm3d CXForm;
00171 int32 Leaf1, Leaf2;
00172
00173 assert( World != NULL );
00174 assert( MXForm != NULL );
00175 assert( SndPos != NULL );
00176 assert( Volume != NULL );
00177 assert( Pan != NULL );
00178 assert( Frequency != NULL );
00179
00180
00181 LocalPos = MXForm->Translation;
00182 // Transform the sound to view space
00183 geCamera_ConvertWorldSpaceToCameraSpace(MXForm, &CXForm);
00184 geXForm3d_Transform( &CXForm, SndPos, &ViewPos);
00185 // FIXME: Need to check these and return TRUE or FALSE
00186 if( !geWorld_GetLeaf((geWorld*)World, &LocalPos, &Leaf1) )
00187 return;
00188 if( !geWorld_GetLeaf((geWorld*)World, SndPos, &Leaf2) )
00189 return;
00190
00191 if (!geWorld_LeafMightSeeLeaf((geWorld*)World, Leaf1, Leaf2, 0))
00192 {
00193 Magnitude = 0.0f;
00194 Dist.X = 0.0f; // Shut up compiler warning
00195 Cfg.Volume = 0.0f;
00196 }
00197 else
00198 {
00199 // Find the distance from the camera to the original light pos
00200 geVec3d_Subtract(&LocalPos, SndPos, &Dist);
00201
00202 Magnitude = geVec3d_Length(&Dist);
00203
00204 geSound3D_RollOut(&Cfg, Magnitude, Min, Min*10);
00205 }
00206
00207 geSound3D_Pan(&Cfg, (geFloat)atan2( (double)ViewPos.X, (double)ViewPos.Z ) );
00208 //Cfg->Frequency = 1.0f;
00209 geSound3D_Doppler(&Cfg, Ds);
00210
00211 *Volume = Cfg.Volume;
00212 *Pan = Cfg.Pan;
00213 *Frequency = Cfg.Frequency;
00214 }
|
|
||||||||||||
|
Definition at line 66 of file Sound3d.c. References geFloat, NULL, and geSound3d_Cfg::Pan. Referenced by geSound3D_GetConfig(), and geSound3D_GetConfigIgnoreObstructions().
|
|
||||||||||||||||||||
|
Definition at line 45 of file Sound3d.c. References geFloat, NULL, and geSound3d_Cfg::Volume. Referenced by geSound3D_GetConfig(), and geSound3D_GetConfigIgnoreObstructions().
|
1.3.2