SceneKit:在顶点上应用变换

时间:2015-04-17 09:43:39

标签: ios objective-c math ios8 scenekit

我需要对SCNNode中包含的所有顶点应用变换。 每个SCNNode都包含 SCNMatrix4转换属性。 我还得到了SCNNode的所有顶点。

 Vertex *currentVertex = [self.vectrices objectAtIndex:buff[index]];
 SCNNode *currentChildren = myNode;    
 Vertex *new = [Vertex new];

 new.x = (currentChildren.transform.m11 * currentVertex.x) + (currentChildren.transform.m12 * currentVertex.y) + (currentChildren.transform.m13 * currentVertex.z);
 new.y = (currentChildren.transform.m21 * currentVertex.x) + (currentChildren.transform.m22 * currentVertex.y) + (currentChildren.transform.m23 * currentVertex.z);
 new.z = (currentChildren.transform.m31 * currentVertex.x) + (currentChildren.transform.m32 * currentVertex.y) + (currentChildren.transform.m33 * currentVertex.z);

我得到了一个错误的旋转和翻译的奇怪结果。 我的计算,是否正确?

1 个答案:

答案 0 :(得分:2)

SCNMatrix4是一个4x4矩阵,但在这里你将它用作3x3矩阵。你基本上删除所有翻译,只保留轮换和比例因子。 请查看SCNMatrix4ToMat4SCNVector4ToFloat4(带w=1)并使用SIMD执行转换。