カメラの向きを変更するだけで済みます。あなたは世界の行列を変更する必要はありません、openGLの "gluLookAt()"メソッドは自動的にあなたのためにそれを行います。
カメラクラスを設定している場合は、カメラの上方向ベクトルを設定する関数を作成するだけで、iPhoneのコンパスからfloat/double値(私が想定している)に基づいて計算する必要があります。あなたのカメラのアップデートがlookAt()の位置にあるとき、正しい位置を見るようにカメラを変更する必要があります。
これは、FPSベースのゲームでカメラを回転させたときとは大きく異なります。違いは、Y軸に沿ってではなくX軸に沿ってカメラを回転させたいということです。
キーボードでカメラを左右に動かすためにカメラクラスをどのように回転させたかを見て、コンパスの方向値を使ってカメラクラスを動作させる方法を見てみましょう。
ここ
は、お使いのカメラのクラスが作業しなければならない方法についてのあなたの洞察力を与える可能性があり、私が書いたいくつかのC++コードです:
/* This reshapes the camera using the perspective projection */
void Camera::ReshapePerspectiveForPicking(void)
{
glMatrixMode(GL_PROJECTION);
// Sets the clipping volume
gluPerspective(m_FieldOfView, (float)m_width/(float)m_height, m_zNear, m_zFar);
gluLookAt( camPos.x, camPos.y, camPos.z,
camPos.x + camView.x, camPos.y + camView.y, camPos.z + camView.z,
0.0f, 1.0f, 0.0f);
glMatrixMode(GL_MODELVIEW);
}
をメモ(は0.0f、1.0F上の行に、0.0 f)。これがUP方向ベクトルです。 カメラが見下す必要がないので、私のゲームでは静的でした。 コンパスの方向に新しいアップベクトルを作成するだけで、このベクトルを変更するだけです。
以下のメソッドは、特殊なベクターを渡すことによってカメラを時々更新する必要があった単純な方法でした。あなたはおそらくそれを無視することができます、私はあなたがそれから学ぶことができるようにそれを含んでいます。ここで
/* This updates the camera to look at the changed camera position. This uses a passed in camPosition and camView GameMath::Vector */
void Camera::Update(GameMath::Vector camPos, GameMath::Vector camView)
{
glMatrixMode(GL_PROJECTION);
gluLookAt( camPos.x, camPos.y, camPos.z,
camPos.x + camView.x, camPos.y + camView.y, camPos.z + camView.z,
0.0f, 1.0f,0.0f);
}
は、Y軸に沿ってカメラを回転させるための私の方法は、私はそれを書いた(それはちょっとdodgeyだから--Iは今、このメソッドを書き換えるでしょう(あなたはX軸に沿って回転したい忘れないでください)です数年前)、どのようにそれを行うことができるかを示すだけで十分です。
void Camera::Rotate(void)
{
if (m_rotateCamera == true)
{
// Keep the radians within 2 pi, roughly
float minimumRadiansRotate = 0.00;
float maximumRadiansRotate = 6.2831853072;
m_YRotateAngle = GameMath::Wrap(m_YRotateAngle, minimumRadiansRotate, maximumRadiansRotate);
m_YRotateAngle += m_rotateSpeed * m_rotateDirection; // Add to the camera's current angle value
camView.x = sin(m_YRotateAngle);
camView.z = -cos(m_YRotateAngle);
}
}
これはあなたが何をすべきか理解してもらう必要がありますが、お使いのカメラのクラスは、鉱山におそらく異なっているので、それはあなたがやりたいようにコードの特定の部分を提供するために少し難しいです。
CoreLocationフレームワークには、コードをまだコンパイルしていない場合でもコンパスから値を読み取るために必要なコードが含まれています。
幸運。
これは私が持っているすべては、任意の時点で新しいです(私はあなたが説明しているものを誤解していない限り)コンパスが組み込まれていますが、私は唯一の加速度計で働いている新しいiPhoneのために働くだろうアップベクター。また、新しいアップベクトルはカメラのx軸に対して垂直であることが保証されていないので、カメラの新しい方向を決定するにはどうすればよいですか? –