1

タッチを使用して iOS で OpenGL オブジェクトを回転させようとしていますが、問題が発生しています。ここでユーザーのタッチを取得しています:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
    UITouch *touch = [touches anyObject];
    startPoint = [touch locationInView:self.view];
    }

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
   {
   UITouch *touch = [touches anyObject];
   CGPoint point = [touch locationInView:self.view];
   dx = point.y - startPoint.y;
   dy = point.x - startPoint.x;
   startPoint = point;
   }

ローテーションを実行するために更新機能でそれを使用しています。現在、左から右にタッチすると左から右に回転し、上下に移動すると前後に回転しようとしています。私は奇妙な組み合わせのローテーションを取得します。コードは次のとおりです。

- (void)update
   {    
   float aspect = fabsf(self.view.bounds.size.width / self.view.bounds.size.height);
   GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f);

   self.effect.transform.projectionMatrix = projectionMatrix;

   GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -3.5f);
   modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, -1, startPoint.x, startPoint.y, 0.0f);
   dx = dy =0;
   self.effect.transform.modelviewMatrix = modelViewMatrix;
   }
4

2 に答える 2

2

xとyの両方で回転するように指示しているため:)

これを試して :

modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, startPoint.x, 1.0f, 0.0f, 0.0f);

これにより、x 軸を中心に startPoint.x ラジアンが回転します。

最後の 3 つのパラメーターを変更することで、任意の軸を中心に回転できます (つまり、0,1,0 は y 軸を中心に回転し、1,1,0 は x と y の間で 45° の軸を中心に回転します)。

NBありがとう@Marcelo Cantosの説明:)

于 2012-01-05T14:48:30.610 に答える
1

deanWombourne によると、あなたはGLKMatrix4Rotate間違って使用しています。実行する場合:

GLKMatrix4Rotate(modelViewMatrix, -1, startPoint.x, startPoint.y, 0.0f);

軸を中心に -1 ラジアン回転します (startPoint.x、startPoint.y、0.0f)。startPoint.x ラジアンを (1, 0, 0) の周りで回転させ、startPoint.y ラジアンを (0, 1, 0) の周りで回転させたいように思えます。たとえば、次のようになります。

modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, startPoint.x, 1.0f, 0.0f 0.0f);
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, startPoint.y, 0.0f, 1.0f 0.0f);

または、おそらく、startPoint.x と startPoint.y を分割することをお勧めします。

また、ジンバル ロックの問題もあります。基本的には、最初に x を中心に回転すると、y 軸が必ずしも考えている場所にあるとは限らず、最初に y を中心に回転すると、x 軸が必ずしも考えている場所にあるとは限らないためです。です。それが気になりますよね?

于 2012-01-05T17:20:28.220 に答える