我刚开始自学 openGL,现在将 openAL 添加到组合中。
我有一些行星散布在 3D 空间中,当我触摸屏幕时,我会为随机的行星分配声音,然后缓慢而平稳地将“相机”飞过来观看和聆听。动画/补间部分运行良好,但 openAL 部分并不安静。我通过为每一帧做一个微小的 translate() 和 gluLookAt() 来移动相机以保持平滑(调整相机位置和lookAt坐标)。问题似乎在于我从耳机中取出的立体声图像。在相机滚动或旋转后,左/右/上/下似乎有时会混淆。我很确定问题就在这里:
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);
我想知道是否需要在每次 gluLookAt() 之后重新计算相机的 UP 矢量以理顺音频定位问题。这似乎可能是缺少的成分,但所涉及的数学似乎如此先进,我不是甚至确定从哪里开始..
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];