2

以下の私の編集を参照してください。

原点に球が描かれています。私のカメラは半径3単位の球を見ています。2Dジョイスティックを使用して、カメラが球を周回するようにしようとしています。現在、球を周回するために以下のコードを使用していますが、ジョイスティックが指している方向の回転をジョイスティックで制御できるようにする方法がわかりません。私のジョイスティックは0度の角度を提供し、反時計回りに進むと360度になります。ジョイスティックが中央の開始点から離れるほど、回転速度が上がります。どうすればいいのかわからない。

PIOVER180 = Math.PI/180;
rho = 3;
theta = (theta+1)%360;
phi = (theta+1)%360;

camera.position.x = (float) (rho * Math.sin(theta * PIOVER180) * Math.cos(phi * PIOVER180));
camera.position.y = (float) (rho * Math.cos(theta * PIOVER180));
camera.position.z = (float) (rho * Math.sin(theta * PIOVER180) * Math.sin(phi * PIOVER180));
camera.normalizeUp();

libGDXは素晴らしいPerspectiveCameraクラスを提供します。私はそれを拡張して、SphericalCamera必要なときにローテーションを呼び出すためにそれを使用したいと思っていました。

編集:

theta2Dジョイスティックで変数とphi変数を正しく操作する方法を理解できれば、問題なく動作するはずです。thetaは、正のx軸と球上の点の間の角度です。phiここで、z軸上には点があり(正または負)、rho中心点(0、0、0)から上の点までの距離です。球(基本的には半径)

4

1 に答える 1

2

中心を見ながら、ジョイスティックで制御する方法で球の周りを回転しようとしていますよね?

ジョイスティックが 0 を上にした角度 "ang" を度単位で与える場合、各軸のコンポーネントは次のようになります。

double x = Math.sin(ang*Math.PI/180.);
double y = Math.cos(ang*Math.PI/180.);

次にできることは、おそらく「速度」パラメーターを使用して、カメラを独自の UP/LEFT 平面にこれらの量だけ移動させることです。

Vector3 left = new Vector3(camera.up).crs(camera.direction).scl((float)(speed*x));
Vector3 up = new Vector3(camera.up).scl((float)(speed*y));
camera.position.add(left).add(up);

その時点で、カメラは目的の軌道を離れるので、元に戻す必要があります。

camera.position.nor().scl(rho);

コードサンプルでは、​​位置を変更した後にカメラの方向を更新しませんが、説明によると必要です。原点を見るには:

camera.direction.set(camera.position).scl(-1).nor();

最後に、アップ ベクトルとモデル マトリックスを更新します。

camera.normalizeUp();
camera.update(false);

お役に立てれば!

于 2013-12-16T17:44:20.383 に答える