ADD*_*ing 4 ios scenekit swift
在过去的几天里,我一直在寻找适用于iOS的SceneKit.我在尝试创建自定义几何时遇到了一个问题.每当我尝试显示几何体时,它都不会绘制,并在运行时显示此错误.
SceneKit:错误,C3DRendererContextSetupResidentMeshSourceAtLocation - 不支持double
我创建了一个针对iOS的游乐场,以测试更简单的自定义几何示例,并使用swift vs objective c查看有关自定义几何的问题.
我尝试使用目标c的另一个项目,仍然收到相同的错误消息.
在操场或完整项目上定位桌面时,不会出现错误,并且几何图形正确绘制.仅在定位iOS时才会出现错误消息.
import SceneKit
import QuartzCore // for the basic animation
import XCPlayground // for the live preview
// create a scene view with an empty scene
var sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
var scene = SCNScene()
sceneView.scene = scene
// start a live preview of that view
XCPShowView("The Scene View", sceneView)
// default lighting
sceneView.autoenablesDefaultLighting = true
// a camera
var camera = SCNCamera()
var cameraNode = SCNNode()
cameraNode.camera = camera
cameraNode.position = SCNVector3(x: 0, y: 0, z: 10)
scene.rootNode.addChildNode(cameraNode)
// create geometry
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: sizeof(CInt) * countElements(indexes)
)
let ele = SCNGeometryElement(
data: dat,
primitiveType: .Triangles,
primitiveCount: 1,
bytesPerIndex: sizeof(CInt)
)
let geo = SCNGeometry(sources: [src], elements: [ele])
let nd = SCNNode(geometry: geo)
scene.rootNode.addChildNode(nd)
Run Code Online (Sandbox Code Playgroud)
这是我在操场上用来绘制三角形的代码.定位桌面时使用相同的代码.
如何修复此问题并显示iOS的几何图形?
我通过改变创建几何源的方式来解决错误.
通过遵循此问题创建几何源的方法,错误得到修复,三角形正确绘制.
我相信解决方案是在使用
+ (instancetype)geometrySourceWithData:(NSData *)data
semantic:(NSString *)semantic
vectorCount:(NSInteger)vectorCount
floatComponents:(BOOL)floatComponents
componentsPerVector:(NSInteger)componentsPerVector
bytesPerComponent:(NSInteger)bytesPerComponent
dataOffset:(NSInteger)offset
dataStride:(NSInteger)stride
Run Code Online (Sandbox Code Playgroud)
代替
+ (instancetype)geometrySourceWithVertices:(const SCNVector3 *)vertices
count:(NSInteger)count
Run Code Online (Sandbox Code Playgroud)
因为它指定我使用float组件而不是double.
归档时间: |
|
查看次数: |
1014 次 |
最近记录: |