Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Графика -> Гончаров Д. -> "DirectX 7.0 Для программистов" -> 104

DirectX 7.0 Для программистов - Гончаров Д.

Гончаров Д., Салихо Т. DirectX 7.0 Для программистов — Спб.: Питер, 2001. — 528 c.
ISBN 5-318-00173-4
Скачать (прямая ссылка): dirext7dlyaprogrammistov2001.djvu
Предыдущая << 1 .. 98 99 100 101 102 103 < 104 > 105 106 107 108 109 110 .. 229 >> Следующая

В отличие от интерфейса IDirectSound3DBuffer, который создается отдельно для каждого звукового буфера с тем, чтобы управлять его характеристиками, «слушатель» может быть только один, и, следовательно, в программе должен быть лишь один интерфейс IDirectSound3DListener. Именно поэтому для получения указателя на этот интерфейс используют первичный звуковой буфер.
Трехмерные характеристики «слушателя»
241
Итак, сначала необходимо получить указатель на интерфейс первичного звукового буфера. Поскольку мы будем манипулировать трехмерными характеристиками этого буфера, то при его создании нужно указать флаг DSBCAPS CTRL3D и, конечно, флаг DSBCAPS_PRIMARYBUFFER, так как создается именно первичный буфер. Сделать это можно, например, так:
LPDIRECTSOUNDBUFFER pDSPrimary - NULL:
HRESULT hRet;
DSBUFFERDESC dsbd:
ZeroMemory(&dsbd. sizeof(DSBUFFERDESC)): dsbd.dwSize - sizeof(DSBUFFERDESC): dsbd.dwFlags - DSBCAPSPRIMARYBUFFER|DSBCAPS CTRL3D: hRet*pDS->CreateSoundBuffer(&dsbd. &pDSPrimary. NULL); if (hRet!«DS_0K)
//Обрабатываем ошибку
Естественно, что pDS должен быть корректно инициализированным указателем на интерфейс IDirectSound.
После того как указатель на интерфейс первичного звукового буфера был успешно получен, остается лишь, воспользовавшись его методом Query Inter face, получить указатель на интерфейс IDirectSound3DListener следующим образом:
LPDIRECTS0UND3DLISTENER pDSListener- NULL;
hRet-pDSP гi тагу->QueryInterfасе(11D_IDi rectSound3DLi stener, (VOID**)&pDSLi stener); if (hRet!-DS_0K)
//Обрабатываем ошибку
pDSPrimary в данном случае — ранее полученный указатель на интерфейс первичного звукового буфера, a pDS3Listener — указатель на интерфейс IDirectSound 3DLi stener, который необходимо получить. Первым параметром метода Query Interface передается GUID требуемого интерфейса, определенный в DS0UND.H, а вторым параметром — адрес указателя на получаемый интерфейс.
После того как указатель на интерфейс LPDIRECTS0UND3DLISTENER создан и инициализирован, появляется возможность настройки трехмерных характеристик «слушателя», который, напомним, присутствует в единственном числе и влияет на многие аспекты воспроизведения звука. Рассмотрим эти характеристики.
Позиция «слушателя»
Позиция самого «слушателя», так же как и позиции звуковых буферов, является основной характеристикой, влияющей на восприятие звука. Чем дальше слушатель располагается от источников звука, тем меньшую громкость эти звуки будут для него иметь.
Для того чтобы изменить текущую позицию «слушателя», используется метод интерфейса IDi rectSound3DLi stener:
HRESULT SetPosition(
D3DVALUE x,
D3DVALUE у.
D3DVALUE z.
DWORD dwApply
):
Первые три параметра этого метода представляют собой координаты текущей позиции «слушателя». Последний параметр должен содержать способ установки
242
Урок 8 • Программирование трехмерного звука
новых координат «слушателя» — либо DS3D_DEFERRED (отложенная установка), либо DS3DIMMEDIATE (немедленная установка).
По умолчанию «слушатель» имеет позицию с координатами (0, 0, 0).
Узнать текущие координаты «слушателя» можно, используя другой метод интерфейса IDirectSound3DBtiffer:
HRESULT GetPos1t1on(
LPD3DVECT0R lpvPo$1t1on
);
Параметр этого метода должен быть адресом переменной типа D3DVECT0R, в которую будут записаны текущие координаты слушателя.
Оба метода в случае успеха возвращают значение DS0K, а при неудаче — значение DSERR_I NVAL I DPARAM.
Скорость «слушателя»
Этот параметр, так же как и скорость источника звука, ни в коей мере не влияет на расположение самого «слушателя». Скорость необходима лишь для вычисления показателя эффекта Доплера.
Для того чтобы изменить текущую скорость «слушателя», используется метод интерфейса IDi rectSound3DL1 stener:
HRESULT SetVelocityC D3DVALUE x.
D3DVALUE у.
D3DVALUE 2.
DWORD dwApply
):
Первые три параметра этой функции — координаты нового вектора скорости для «слушателя». Последний параметр должен содержать способ установки новых координат вектора скорости «слушателя» — либо DS3D_DEFERRED (отложенная установка), либо DS3D IMMEDIATE (немедленная установка).
Напротив, узнать текущую скорость «слушателя» можно, воспользовавшись следующим методом интерфейса IDi rectSound3DLi stener:
HRESULT GetVeloc1ty(
LPD3DVECT0R lpvVeloclty
);
Параметр этого метода представляет собой адрес переменной типа D3DVECT0R, в которую и будет записан текущий вектор скорости «слушателя».
Оба метода в случае успеха возвращают значение DS_0K, а при неудаче — значение DSERRINVALIDPARAM.
Ориентация «слушателя»
Следующей важной характеристикой «слушателя» является его ориентация в пространстве. В силу того, что DirectSound учитывает, например, в какую сторону смотрит «слушатель», для создания более правдоподобного звука появляется необходимость правильно задать направление головы «слушателя».
Ориентация «слушателя» в пространстве определяется двумя векторами: первый вдардит ш головы «слушателя» и направлен вверх (top vector), второй выходит
Трехмерные характеристики «слушателя»
Предыдущая << 1 .. 98 99 100 101 102 103 < 104 > 105 106 107 108 109 110 .. 229 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.