diff options
| author | XANTRONIX Development | 2022-02-21 16:00:14 -0500 | 
|---|---|---|
| committer | XANTRONIX Development | 2022-02-21 16:00:14 -0500 | 
| commit | 8fa45711501f308a98b2a5ac34cc51f041ab9ad5 (patch) | |
| tree | 4c4502025698b35d8b48619a041c1b3eef8ec4aa /src | |
| parent | 9ea5e14348e990968584e372c329688445306ec7 (diff) | |
| download | xas-8fa45711501f308a98b2a5ac34cc51f041ab9ad5.tar.gz xas-8fa45711501f308a98b2a5ac34cc51f041ab9ad5.tar.bz2 xas-8fa45711501f308a98b2a5ac34cc51f041ab9ad5.zip | |
am i a good cat ???
Diffstat (limited to 'src')
| -rw-r--r-- | src/spatial.c | 67 | 
1 files changed, 30 insertions, 37 deletions
| diff --git a/src/spatial.c b/src/spatial.c index a0cd29b..74a0cad 100644 --- a/src/spatial.c +++ b/src/spatial.c @@ -81,9 +81,9 @@ static inline float degf(float rad) {  static int within_cone(xas_spatial_coord coord,                         xas_spatial_cone cone) {      xas_spatial_rotation rotation = { -        .pitch = -cone.rotation.x / 2.0f, -        .roll  = -cone.rotation.y / 2.0f, -        .yaw   = -cone.rotation.z / 2.0f +        .x = (M_PI * 2.0f) - cone.rotation.x, +        .y = (M_PI * 2.0f) - cone.rotation.y, +        .z = (M_PI * 2.0f) - cone.rotation.z      };      float radius; @@ -92,19 +92,12 @@ static int within_cone(xas_spatial_coord coord,      coord.y -= cone.coord.y;      coord.z -= cone.coord.z; +    cone.coord.x = 0.0f; +    cone.coord.y = 0.0f; +    cone.coord.z = 0.0f; +      rotate(rotation, &coord); -    cone.coord.x = 0; -    cone.coord.y = 0; -    cone.coord.z = 0; - -    /* -     * If the point is to the left of the cone point, then the point is not -     * within the cone. -     */ -    if (coord.x < 0) { -        return 0; -    }      radius = tanf(cone.angle / 2.0f) * coord.x; @@ -112,7 +105,7 @@ static int within_cone(xas_spatial_coord coord,       * If the given point is outside the cone radius at its X coordinate, then       * it is outside of the cone.       */ -    if (fabs(coord.y) < radius || fabs(coord.z) < radius) { +    if (fabs(coord.y) > radius || fabs(coord.z) > radius) {          return 0;      } @@ -207,6 +200,26 @@ ssize_t scene_fill(xas_spatial_scene *scene,      int16_t *dest = (int16_t *)(scene->buffer + 1); +    xas_spatial_cone cone_l = { +        .coord    = scene->speaker_l, +        .rotation = { +            .x = 0.0f, +            .y = 0.5f * M_PI, +            .z = 0.0f +        }, + +        .angle = M_PI / 4.0f +    }, cone_r = { +        .coord    = scene->speaker_r, +        .rotation = { +            .x = 0.0f, +            .y = 1.5f * M_PI, +            .z = 0.0f +        }, + +        .angle = M_PI / 4.0f +    }; +      buffer_zero(buffer, count);      while (obj) { @@ -232,32 +245,12 @@ ssize_t scene_fill(xas_spatial_scene *scene,              size_t index_l,                     index_r; -            xas_spatial_cone cone_l = { -                .coord    = scene->speaker_l, -                .rotation = { -                    .x = 1.75f * M_PI, -                    .y = 0.0f, -                    .z = 0.0f -                }, - -                .angle = M_PI / 4.0f -            }, cone_r = { -                .coord    = scene->speaker_r, -                .rotation = { -                    .x = 0.25f * M_PI, -                    .y = 0.0f, -                    .z = 0.0f -                }, - -                .angle = M_PI / 4.0f -            }; -              if (!within_cone(obj->coord, cone_l)) { -                value_l /= 2.0f; +                value_l /= 3.0f;              }              if (!within_cone(obj->coord, cone_r)) { -                value_r /= 2.0f; +                value_r /= 3.0f;              }              if (buffer->index == buffer->size) { | 
 
    