我想转换GLKMatrix4
和CATransform3D
,我使用此方法:
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
修复它?
答案 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);