奇怪的SCNGeometry源数据

时间:2019-03-24 00:49:47

标签: swift scenekit

我正在尝试访问SCNGeometrySource内容。检查源之后,我可以告诉你:

source.bytesPerComponent = 4
source.componentsPerVector = 3
source.dataStride = 16
source.dataOffset = 0
source.vectorCount = 98304

换句话说,我有{3个98304的float3向量。

但是,打电话时

source.data.withUnsafeBytes { (pointer: UnsafePointer<float3>) in
    for i in 0..<source.vectorCount {
        print((pointer + i).pointee)
    }
}

第一个打印的元素看起来不错,但是到了最后,我得到了奇怪的值,当它们不应该接近零时,不时崩溃,并且内存清理程序确实检测到堆溢出。

即使我似乎以正确的方式访问所有内容,我也不知道如何引起堆溢出。

我应该怎么做才能找出导致此问题的原因?

编辑(部分解决方案): 就我而言,我有一个自定义几何图形,并使用了SCNGeometrySource(vertices: [SCNVector3])初始化程序。据我所知,似乎有一个错误导致对source.data返回值的错误分配。解决此问题的方法是不再使用SCNGeometrySource(vertices: [SCNVector3])初始化程序,而使用SCNGeometrySource(data: ...)初始化程序。这为我解决了这个问题。

1 个答案:

答案 0 :(得分:0)

您怎么称呼Float3?是SIMD类型float3吗?在这种情况下,跨度为16,而不是12(SIMD类型按4个字节对齐)。

print(MemoryLayout<float3>.stride) // 16