确定OpenGL中特定透视图的轴旋转值

时间:2012-08-05 04:32:05

标签: ios opengl-es-2.0

我正在使用OpenGL ES 2.0显示一个三维立方体,我在某个透视图中显示,围绕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值。关于如何计算这些值的任何指导都会受到赞赏,还是我应该采取另一种方法?

1 个答案:

答案 0 :(得分:0)

在我看来,我试图在一个声明中做两个不同的事情。

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

我正在尝试旋转立方体以在某个透视图中显示,并旋转立方体以获得动态动画。

这些实际上是不相关的轮换,需要单独完成。

首先,我应用旋转以所需的透视图显示立方体;

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

然后我为动画应用必要的旋转:

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

我相信(我可能错误的是这里的细节)实际旋转以相反的顺序(LIFO)应用,因此动画旋转首先应用于标准xyz坐标系,然后旋转显示在理想的观点。

完美无缺。