你通常如何比较两个GLKMatrix4,或者至少检查是否是单位矩阵?
粗略搜索GLKMatrix4.h显示没有util函数,我觉得手动检查每个字段都是愚蠢的,如下所示:
static BOOL GLKMatrix4EqualToMatrix4(GLKMatrix4 a, GLKMatrix4 b)
{
return
a.m00 == b.m00 &&
a.m01 == b.m01 &&
a.m02 == b.m02 &&
a.m03 == b.m03 &&
a.m10 == b.m10 &&
a.m11 == b.m11 &&
a.m12 == b.m12 &&
a.m13 == b.m13 &&
a.m20 == b.m20 &&
a.m21 == b.m21 &&
a.m22 == b.m22 &&
a.m23 == b.m23 &&
a.m30 == b.m30 &&
a.m31 == b.m31 &&
a.m32 == b.m32 &&
a.m33 == b.m33;
}
您可以将其转换为字符串,然后使用此函数NSStringFromGLKMatrix4进行比较
你可以做:
static BOOL GLKMatrix4EqualToMatrix4(GLKMatrix4 a, GLKMatrix4 b) {
return memcmp(a.m, b.m, sizeof(a.m)) == 0;
}
因为memcmp通常针对特定体系结构进行了高度优化,所以它应该是最快速,最干净的方法。
有关memcmp的讨论,请参阅Why is memcmp so much faster than a for loop check?。