ビューポート インタラクションで MotionBuilder と同様の機能を持つアプリケーションに取り組んでいます。3 つのボタンがあります。ボタン 1 は、マウスの X/Y ドラッグに応じて、X と Y を中心にビューポートを回転させます。ボタン 2 は、マウスの X/Y ドラッグに応じて、X と Y を中心にビューポートを移動します。ボタン 3 は、Z 軸に沿って移動することでビューポートを「ズーム」します。
コードは簡単です:
glTranslatef(posX,posY,posZ);
glRotatef(rotX, 1, 0, 0);
glRotatef(rotY, 0, 1, 0);
さて、問題は、最初に平行移動すると、平行移動は正しくなりますが、回転はワールド軸に従います。私も最初に回転させてみました:
glRotatef(rotX, 1, 0, 0);
glRotatef(rotY, 0, 1, 0);
glTranslatef(posX,posY,posZ);
^ 回転は機能しますが、平行移動はワールド軸に従って機能します。
私の質問は、コード スニペット 1 からの翻訳とコード スニペット 2 からの回転を実現するにはどうすればよいかということです。
編集 世界とローカルの回転/平行移動の意味を説明するために、このかなり粗い画像を描きました。カメラをローカル軸を中心に回転および移動させる必要があります。 http://i45.tinypic.com/2lnu3rs.jpg