1

OpenGL ES 2.0 を使用して、x、y、z 軸を中心に回転する特定の視点で表示する 3 次元の立方体を表示しています。

@interface OpenGLView : UIView

OpenGLView *openGLRotate = [[OpenGLView alloc] initWithFrame:screenBounds];
[openGLRotate setupDisplayLink:NO Face:face Direction:direct];

- (void)setupDisplayLink:(BOOL)bFlag Face:(CubeFace)f Direction:(CubeDirection)d
{
    CADisplayLink* displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(renderRotate:)];
    [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}

x、y、z 軸ではなく、面に垂直な軸を中心に立方体を回転させたいと考えています。

立方体のデフォルトのパースペクティブが x、y、z 軸を中心に回転しているのを見て、特定の面を基準にして軸を中心に回転するには、x、y、z 軸の値を同時に変更して、見ている効果を達成する必要があります。為に。

// code in renderRotate
//[modelView rotateBy:CC3VectorMake(20, -45, -20)]; // default perspective
[modelView rotateBy:CC3VectorMake(20 + x, -45 + y, -20 + z)];

ベクトルと行列、四元数とオイラー角について読んだことがありますが、混乱が減るどころか、ますます混乱しています。

回転の x、y、z 値を決定する方法が正確にはわかりません。これらの値を計算する方法についてのガイダンスをいただければ幸いです。または、私が取るべき別のアプローチはありますか?

4

1 に答える 1

0

1 つのステートメントで 2 つの別々の異なることを行おうとしていることに気づきました。

[modelView rotateBy:CC3VectorMake(20 + x, -45 + y, -20 + z)];

特定の視点で表示するために立方体を回転させ、動的なアニメーションのために立方体を回転させようとしています。

これらは実際には関係のないローテーションであり、個別に行う必要があります。

最初に回転を適用して、目的の遠近法で立方体を表示します。

[modelView2 rotateBy:CC3VectorMake(20, -45, -20)];

次に、アニメーションに必要な回転を適用します。

[modelView2 rotateBy:CC3VectorMake(x, y, z)];

実際の回転は逆の順序 (LIFO) で適用されるため、最初に標準の xyz 座標系でアニメーションの回転が適用され、次に回転が適用されて、目的の視点で表示されると思います (ここでの詳細については間違っている可能性があります)。 .

完璧に動作します。

于 2012-09-04T18:26:46.970 に答える