我如何使用GLKMatrix4将此实现转换为使用CATransform3D

时间:2014-05-29 07:54:36

标签: ios iphone 3d 64-bit catransform3d

我想转换GLKMatrix4CATransform3D,我使用此方法:

 CATransform3D t;
    GLKMatrix4 t2 = *((GLKMatrix4 *)&t);
    t = *((CATransform3D *)&t2);

形式: (Convert GLKMatrix4 and CATransform3D)。

它在32位工作得很好,但不能在64位设备上工作,我发现原因是GLKMatrix4正在使用Float而CATransform3D正在使用CGFloat,因为我们知道,他们在不同的比特机器上被区别对待,所以这些代码不能在64位设备上工作,有人可以转换它吗? GLMatrix4代码:

GLKQuaternion   _rotationEnd;
GLKVector2    _translationEnd;
float   _depth;
float   _scaleEnd;

GLKMatrix4 modelViewMatrix = GLKMatrix4Identity;
GLKMatrix4 quaternionMatrix = GLKMatrix4MakeWithQuaternion(_rotationEnd);
modelViewMatrix = GLKMatrix4Translate(modelViewMatrix, _translationEnd.x, _translationEnd.y, -_depth);
modelViewMatrix = GLKMatrix4Multiply(modelViewMatrix, quaternionMatrix);
modelViewMatrix = GLKMatrix4Scale(modelViewMatrix, _scaleEnd, _scaleEnd, _scaleEnd);

我如何使用CATransform3D修复它?

1 个答案:

答案 0 :(得分:1)

为了解决这个问题,我建议你创建2个缓冲区并迭代它们。尝试这样的事情:

    GLKMatrix4 input;
    CATransform3D output;

    GLfloat glMatrix[16];
    CGFloat caMatrix[16];

    memcpy(glMatrix, input, sizeof(glMatrix)); //insert GL matrix data to the buffer
    for(int i=0; i<16; i++) caMatrix[i] = glMatrix[i]; //this will do the typecast if needed

    output = *((CATransform3D *)caMatrix);