EasyManua.ls Logo

Creative AWE32 - Implementing Receiver Orientation

Creative AWE32
110 pages
Print Icon
To Next Page IconTo Next Page
To Next Page IconTo Next Page
To Previous Page IconTo Previous Page
To Previous Page IconTo Previous Page
Loading...
SB AWE32 Developer's Information Pack PART V 3D Positional Audio API 107
Copyright Creative Technology Ltd., 1994-1996 Version 3.00
current = count;
while (!kbhit()) {
while (current == count) ; /* wait til count changes */
current = count;
regs.x.ax = 3;
int86(0x33, &regs, &regs); /* get mouse position */
x = regs.x.cx - 320;
y = regs.x.dx - 96;
/* rotate -90 degree along z-axis */
c3daSetEmitterPosition(&em, -y/2, -x/2, 0);
}
getch();
Terminates.
_dos_setvect(0x1c, prev_intr);
regs.x.ax = 0x21;
int86(0x33, &regs, &regs);
awe32Terminate();
return 0;
}
Implementing Receiver Orientation
For efficiency reasons, the 3D Positional Audio Library does not provide the ability to change a
receiver’s orienation - all receivers have a fixed orientation where the head is facing along the positive
x-axis and the left ear is along the positive-y-axis. This chapter gives a simple example of how to
implement receiver orientation functionality.
The basic idea is that changing a receiver’s orientation is equivalent to appropriately moving all the
emitters around a receiver with a fixed orientation. This example uses yaw, pitch, and roll to transform
a recevier’s orientation from the default fixed orientation to a new one. To equivalently move the
emitters, the “inverse” transform is applied to all the emitters.
/*
* This example is sample code to handle receiver orientation since
* the basic c3da core does not allow a change in receiver orienation.
* There are two routines defined in this example:
*
* setEmitterPosition - a replacement for c3daSetEmitterPosition
* setReceiverOrientation - a new routine to handle receiver
orientation
*/
#include <math.h>
#include "ctaweapi.h"
#defineNUMBER_OF_EMITTERS 4
#defineDEG2RAD 0.017453f;
/*
* example utility structs
*/
typedef struct _Emitter {
int x; /* world x position */
int y; /* world y position */
int z; /* world z position */
c3daEmitter em; /* handle to c3da core emitter */
/* need to be "created" using */
/* c3daCreateEmitter */
} Emitter;
typedef struct _Receiver {
float a[9]; /* rotation matrix for yaw, pitch, roll */
/* A = | a[0] a[1] a[2] | */

Table of Contents