我正在使用SceneKit,但有一个问题:
如何从SCNGeometryElement
对象提取数据?
我用这种方法:
- (void)geometryElements:(SCNNode *)node {
for (int indexElement = 0; indexElement < node.geometry.geometryElementCount; indexElement++) {
SCNGeometryElement *currentElement = [node.geometry geometryElementAtIndex:indexElement];
NSLog(@"\n");
NSLog(@"bytes per index : %d", currentElement.bytesPerIndex);
NSLog(@"number element : %d", currentElement.primitiveCount);
NSLog(@"data lenght : %d", currentElement.data.length);
for (int indexPrimitive = 0; indexPrimitive < currentElement.primitiveCount; indexPrimitive++) {
int array[3];
memset(array, 0, 3);
[currentElement.data getBytes:&array range:NSMakeRange(indexPrimitive * 3, (currentElement.bytesPerIndex * 3))];
NSLog(@"currentelement : %d %d %d", array[0], array[1], array[3]);
}
}
结果不好:
2015-04-10 15:10:25.183 IKTest[1234:244778] currentelement : 14539995 -1068223968 -379286778
2015-04-10 15:10:25.183 IKTest[1234:244778] currentelement : 14737374 -1068223968 -379286778
2015-04-10 15:10:25.183 IKTest[1234:244778] currentelement : 14934753 -1068223968 -379286778
提前致谢。
最佳答案
一些注意事项:
geometryElement.primitiveType
而不是硬编码3
(除非您确定始终与SCNGeometryPrimitiveTypeTriangles
在一起)geometryElement.bytesPerIndex
考虑在内3 * sizeof(int)
,但大小应为numberOfIndicesPerPrimitive * geometryElement.bytesPerIndex