Я только начинаю учить себя openGL и теперь добавляю openAL к миксу.
У меня есть несколько планет, рассеянных вокруг в трехмерном пространстве, и когда я касаюсь экрана, я назначаю звук случайной планете, а затем медленно и плавно перемещаю «камеру», чтобы посмотреть на нее и послушать ее. Часть анимации / анимации работает отлично, но часть openAL не совсем тихая. Я перемещаю камеру, выполняя крошечные translate () и gluLookAt () для каждого кадра, чтобы все было гладко (анимация положения камеры и поиск координат). Кажется, проблема в стереоизображении, которое я получаю из наушников ... кажется, что левый / правый / вверх / вниз иногда перепутывается после вращения или вращения камеры. Я почти уверен, что проблема здесь:
ALfloat listenerPos[]={camera->currentX,camera->currentY,camera->currentZ};
ALfloat listenerOri[]={camera->currentLookX,
camera->currentLookY,
camera->currentLookZ,
0.0,//Camera Up X <--- here
0.1,//Camera Up Y <--- here
0.0}//Camera Up Z <--- and here
alListenerfv(AL_POSITION,listenerPos);
alListenerfv(AL_ORIENTATION,listenerOri);
Мне интересно, нужно ли мне пересчитывать вектор UP для камеры после каждого gluLookAt (), чтобы решить проблему с позиционированием звука ... Кажется, что это может быть отсутствующий компонент, но математика кажется настолько продвинутой, что я Я даже не уверен, с чего начать ..
1) Правильно ли, что мне потребуется пересчитывать вектор роста после каждого gluLookAt ()?
2) Может ли кто-нибудь научить меня, как рассчитать вектор повышения?
Так будет ли правильный способ получить вектор подъема камеры после gluLookAt ()?
gluLookAt(cam->currentX,
cam->currentY,
cam->currentZ,
cam->currentLookX,
cam->currentLookY,
cam->currentLookZ,
cam->upX,
cam->upY,
cam->upZ);
//Get the up vector
glGetFloatv( GL_MODELVIEW_MATRIX, cam->modelViewMatrix);
cam->upX = cam->modelViewMatrix[4];
cam->upY = cam->modelViewMatrix[5];
cam->upZ = cam->modelViewMatrix[6];