我正在使用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值。关于如何计算这些值的任何指导都会受到赞赏,还是我应该采取另一种方法?
答案 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坐标系,然后旋转显示在理想的观点。
完美无缺。