私は3Dオブジェクト(3Dオブジェクト)を指でスワイプするだけで回転させる必要があるiosアプリケーションで作業しています。回転に使用するメソッドは、iOSのタッチ入力を使用して3Dオブジェクトを回転する
setRotationMatrix(float angle、float x、float y、float z、float * matrix)です。
しかし、3D行列を正しく回転させるために、タッチのxとyの位置値を使用する方法がわかりません。ここで私は
を使用していたコードがある - (IBAction)handlePan:(UIPanGestureRecognizer *)、認識{
if(recognizer.state == UIGestureRecognizerStateBegan)
{
panStartPoint = [recognizer locationInView:self];
previousPoint.x = 0;
previousPoint.y = 0;
currentPoint.x = panStartPoint.x;
currentPoint.y = panStartPoint.y;
}
else if(recognizer.state == UIGestureRecognizerStateEnded)
{
panEndPoint = [recognizer locationInView:self];
}
else if (recognizer.state == UIGestureRecognizerStateChanged)
{
previousPoint.x = currentPoint.x;
previousPoint.y = currentPoint.y;
CGPoint instanteneousPoint = [recognizer locationInView:self];
currentPoint.x = instanteneousPoint.x;
currentPoint.y = instanteneousPoint.y;
int xdifference = currentPoint.x - previousPoint.x;
int ydifference = currentPoint.y - previousPoint.y;
if((xdifference <= rotationThreshold *-1) || xdifference >= rotationThreshold) //rotationThreshold = 3;
{
if(xdifference <= rotationThreshold *-1)
{
rotationY = -1.0;
}
else
{
rotationY = 1.0;
}
if((ydifference >= rotationThreshold *-1) && ydifference <= rotationThreshold)
{
rotationX = 0.0;
}
}
if((ydifference <= rotationThreshold *-1) || ydifference >= rotationThreshold)
{
if((ydifference <= rotationThreshold *-1))
{
rotationX = -1.0;
}
else
{
rotationX = 1.0;
}
if((xdifference >= rotationThreshold *-1) && xdifference <= rotationThreshold)
{
rotationY = 0.0;
}
}
if(rotationX != 0.0 || rotationY != 0.0)
{
rotationDegree += 5.0f;
if(rotationDegree >= 360.0f)
{
rotationDegree = 0.0f;
}
ShaderUtils::rotatePoseMatrix(rotationDegree, rotationX, rotationY, rotationZ, &modelViewMatrix.data[0]); //rotationZ = 0;
}}}
これは、3Dオブジェクトのいくつかの回転で私を提供するが、それが必要として、そのような自然されていませんさあ。どんな助けでも大歓迎です。ありがとう。ここok..so
(私はそれはeasyerであることがわかりました)何をされて使用さUIPanGestureRecognizerを使用したことがないwell..i
は
ありがとうskytz。パンのジェスチャーは、UITOUCHとほぼ同じです。私のコードで説明したように、私はあなたが記述したのとまったく同じロジックに従っています。それも回転しますが、ローテーションはあまり自然ではないようです。無数の時間をネットで検索した後、私は2Dのジェスチャーで3dオブジェクトを回転させるには、まずその行列を元の位置に変換し、その四元数を見つけて乗算しなければなりません。一緒に。またはそのようなものです。 – Waqar