首页 > 解决方案 > iOS 金属折线发散到某个遥远的点。如何找到违规位置?

问题描述

我正在使用 Metal 渲染一百万个点的线条,它可以工作。但是,我看到随机线段发散到某个任意点(见屏幕截图)。

如何找到中断线带渲染的点并将它们排除在渲染之外?

let particle = slice.rowParticleBuffer[pointIndex]

if particle.position.x.isNaN || particle.position.y.isNaN || particle.position.z.isNaN {
    print("x", terminator: "") //does not hit this
} else if fabsf(particle.position.x) > 10 || fabsf(particle.position.y) > 10 || fabsf(particle.position.z) > 10 {
    print("Z", terminator: "") //does not hit this either
} else {
    self.particlesBuffer[self.index] = slice.rowParticleBuffer[pointIndex]
    self.index += 1
}

在此处输入图像描述

在此处输入图像描述

标签: iosswiftrenderingmetalpolyline

解决方案


所以神奇的点变成了零,这是由索引错误引起的(代码跳过了一些索引,使主缓冲区的值为零)。

让粒子 = slice.rowParticleBuffer[pointIndex]

  if particle.position.x == 0 || particle.position.y == 0 || particle.position.z == 0 { /*skip*/ } 

推荐阅读