1

我正在使用 OpenGL ES 2.0 来显示一个 3 维立方体,我以某个视角显示该立方体,并围绕 x、y、z 轴旋转。

@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

我突然想到,我试图在一个语句中做两件不同且不同的事情。

[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 回答