我正在使用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
  • 07-27 13:40