私は自分自身に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];