Ios 对象未使用三角形和坐标进行渲染/绘制,SceneKit
问题是,如果我使用此构造函数Ios 对象未使用三角形和坐标进行渲染/绘制,SceneKit,ios,objective-c,swift,scenekit,scnnode,Ios,Objective C,Swift,Scenekit,Scnnode,问题是,如果我使用此构造函数init(sources:[AnyObject],elements:[AnyObject]?)创建scngometry,我将无法渲染任何内容。下面是一个示例(这将绘制一个立方体,取自此立方体): 但屏幕只是空的: 如果我从已知图形创建几何图形,一切都正常。代码示例: func showCone() { var radius:CGFloat = 1.0 let cone = SCNCone(topRadius: 0.1, bottomRadius:
init(sources:[AnyObject],elements:[AnyObject]?)创建scngometry
,我将无法渲染任何内容。
下面是一个示例(这将绘制一个立方体,取自此立方体):
但屏幕只是空的:
如果我从已知图形创建几何图形,一切都正常。代码示例:
func showCone()
{
var radius:CGFloat = 1.0
let cone = SCNCone(topRadius: 0.1, bottomRadius: 3, height: 2)
cone.firstMaterial?.diffuse.contents = UIColor.redColor()
let coneNode = SCNNode(geometry: cone)
coneNode.position = SCNVector3(x: 4.0, y: 3.0, z: 20.0)
self.rootNode.addChildNode(coneNode)
}
它看起来是什么样子:
我原以为问题出在相机节点上,但我做了很多操作,什么都没有改变。更改节点位置也无济于事。另外,如果我创建一个新的Xcode项目,它也可以工作,部署目标是OSX。但是我需要一个针对iOS的解决方案
我犯了什么错,我做错了什么
最初我的问题是我无法从解析的.stl
文件中绘制三维模型。我原以为问题是解析,但后来我尝试使用基本类型绘制任何东西-三角形及其位置,但没有成功。SceneKit不处理Int
索引,因为它们的值可能太大。您应该在控制台中看到这一点:
SceneKit:错误,每个索引(8)不支持C3DRENERContextBindMeshElement字节
改用UInt8
:
var indices:[UInt8] = ...
还请注意,在Swift中,有一个帮助器用于构建几何图元。
下面几行
var data = NSData(bytes: indices, length: sizeof(Int) * indices.count)
var element = SCNGeometryElement(data: &data, primitiveType: .Triangles, primitiveCount: 12, bytesPerIndex: sizeofValue(indices[0]))
变成
var element = SCNGeometryElement(indices: indices, primitiveType: .Triangles)
我已将类型更改为UInt8,现在出现错误“c3drenderContextSetupResidentMeshSourceAtLocation-不支持双精度”。顺便说一句,您没有得到关于helper答案的第二部分,因为如果我像您那样编写,这只是一个编译错误。位置和法线源应该从浮点数组([Float]
)创建。至于方便的方法,请确保您使用的是最新的工具链(Xcode 7.0.1)。非常感谢您,实际上代码是正确的,但我使用的是Xcode 7.0版,更新后一切正常:)
var element = SCNGeometryElement(indices: indices, primitiveType: .Triangles)