【问题标题】:How to debug custom geometry in SceneKit with Swift如何使用 Swift 在 SceneKit 中调试自定义几何体
【发布时间】:2017-11-12 18:56:14
【问题描述】:

我正在尝试学习如何在 SceneKit 中创建自定义几何体。但是,我尝试制作一个三角形,但它没有显示任何内容。我不知道如何调试它。有没有办法确定三角形是否有效?我只是不知道从哪里开始。

作为参考,有问题的游乐场代码如下。请注意,它是针对 Swift 4 编写的,但是 Swift 3 和 Swift 4 之间的变化是如此之小,以至于让它在 Swift 3 中编译是微不足道的。

import UIKit
import SceneKit

let points = [
    SCNVector3Make(0, 0, 0),
    SCNVector3Make(0, 10, 0),
    SCNVector3Make(10, 0, 0),
]
let indices = [
    0,2,1,
]

let vertexSource = SCNGeometrySource(vertices: points)
let element = SCNGeometryElement(indices: indices, primitiveType: .triangles)
let geo = SCNGeometry(sources: [vertexSource], elements: [element])

【问题讨论】:

  • 而你正在添加什么!?

标签: ios swift macos scenekit


【解决方案1】:

创建自定义SCNGeometryElements 时,索引的类型需要为Int161。我认为这在任何地方都没有记录。但是,当您也更改索引的声明时

let indices: [Int16] = [
    0, 2, 1
]

三角形应该会出现。


编辑

1:正如@mnuages 所指出的,SceneKit 仅支持 32 位整数作为索引。所以你可以使用Int8、Int16和Int32。

【讨论】:

  • 哇,我一百万年都猜不到这一点。谢谢!哦,还有热门提示,您实际上可以在 Playgrounds 中快速查看 SCNGeometry 来查看它,而无需将其放置在场景中。好用!
【解决方案2】:

我们从documentation for the Int type 得知

在 32 位平台上,Int 与 Int32 大小相同,在 64 位平台上,Int 与 Int64 大小相同。

因此,在 Swift Playground 中,您最终会得到 Int64。

很遗憾,因为 SceneKit(和 Metal)仅支持 UInt8、UInt16 和 UInt32。在调试器控制台中,您应该能够看到 SceneKit 警告不支持的 64 位宽索引。

【讨论】:

  • 这个答案是正确的。不幸的是,在 Xcode 中使用 Int64 索引时没有警告(从 Xcode 9.4 开始)
猜你喜欢
  • 2016-11-25
  • 2018-09-10
  • 2023-04-10
  • 2018-08-06
  • 2018-01-20
  • 2016-11-10
  • 2016-04-01
  • 2018-03-05
  • 1970-01-01
相关资源
最近更新 更多