借鉴SceneKit的线不会在设备

工作在此之后溶液:Custom SceneKit Geometry并转换为夫特3,码成为:借鉴SceneKit的线不会在设备

func drawLine() { 

var verts = [SCNVector3(x: 0,y: 0,z: 0),SCNVector3(x: 1,y: 0,z: 0),SCNVector3(x: 0,y: 1,z: 0)]

let src = SCNGeometrySource(vertices: &verts, count: 3)

let indexes: [CInt] = [0, 1, 2]

let dat = NSData(

bytes: indexes,

length: MemoryLayout<CInt>.size * indexes.count

)

let ele = SCNGeometryElement(

data: dat as Data,

primitiveType: .line,

primitiveCount: 2,

bytesPerIndex: MemoryLayout<CInt>.size

)

let geo = SCNGeometry(sources: [src], elements: [ele])

let nd = SCNNode(geometry: geo)

geo.materials.first?.lightingModel = .blinn

geo.materials.first?.diffuse.contents = UIColor.red

scene.rootNode.addChildNode(nd)

}

它上模拟器工作:

但我在设备上出现错误:

/BuildRoot/Library/Caches/com.apple.xbs/Sources/Metal/Metal-85.83/ToolsLayers/Debug/MTLDebugRenderCommandEncoder.mm:130: failed assertion `indexBufferOffset(0) + (indexCount(4) * 4) must be <= [indexBuffer length](12).' 

发生了什么事?

整个代码是在这里:Source code

回答:

我回答我的问题,因为我找到了一个解决方案,可以帮助别人。

问题出在“索引”上,3个索引不会绘制2个顶点。必须为要绘制的每个顶点设置2个索引。

这是最后的功能:

func drawLine(_ verts : [SCNVector3], color : UIColor) -> SCNNode? { 

if verts.count < 2 { return nil }

let src = SCNGeometrySource(vertices: verts, count: verts.count)

var indexes: [CInt] = []

for i in 0...verts.count - 1 {

indexes.append(contentsOf: [CInt(i), CInt(i + 1)])

}

let dat = NSData(

bytes: indexes,

length: MemoryLayout<CInt>.size * indexes.count

)

let ele = SCNGeometryElement(

data: dat as Data,

primitiveType: .line,

primitiveCount: verts.count - 1,

bytesPerIndex: MemoryLayout<CInt>.size

)

let line = SCNGeometry(sources: [src], elements: [ele])

let node = SCNNode(geometry: line)

line.materials.first?.lightingModel = .blinn

line.materials.first?.diffuse.contents = color

return node

}

呼叫:

scene.rootNode.addChildNode(

drawLine(

[SCNVector3(x: -1,y: 0,z: 0),

SCNVector3(x: 1,y: 0.5,z: 1),

SCNVector3(x: 0,y: 1.5,z: 0)] , color: UIColor.red

)!

)

将借鉴:

以上是 借鉴SceneKit的线不会在设备 的全部内容, 来源链接: utcz.com/qa/262866.html

回到顶部