Ios 如何设置SCNShape的细节级别/平滑度/细分率?

Ios 如何设置SCNShape的细节级别/平滑度/细分率?,ios,objective-c,scenekit,Ios,Objective C,Scenekit,我目前正在尝试在SceneKit中使用SCNShapeNode渲染一个圆。但不幸的是,它不是一个完美的圆,而是一个八角形 有没有办法设置SCNShape的渲染细节 UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter: CGPointMake(0, 0) radius: 2 startAngle: 0.0 endAngle: M_PI * 2.0f clockwise: NO]; SCNShape *shape = [SCNSha

我目前正在尝试在SceneKit中使用SCNShapeNode渲染一个圆。但不幸的是,它不是一个完美的圆,而是一个八角形

有没有办法设置SCNShape的渲染细节

UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter: CGPointMake(0, 0) radius: 2 startAngle: 0.0 endAngle: M_PI * 2.0f clockwise: NO];

SCNShape *shape = [SCNShape shapeWithPath:path extrusionDepth: 1.0];
shape.firstMaterial.diffuse.contents = [UIColor colorWithRed: 1.0 green:0.0 blue:0.0 alpha:1.0];    

SCNNode *shapeNode = [SCNNode nodeWithGeometry: shape];
[scene.rootNode addChildNode: shapeNode];
从文档中:

路径的平坦度(请参见setFlatness:在NSBezierPath类参考中)决定了SceneKit在从路径构建三维形状时使用的细节级别—较大的平坦度值会减少要渲染的多边形,从而提高性能

相反,平面度值越低,形状越平滑

Bezier路径平坦度对于该API来说是一个奇怪的匹配,因为它以像素/点为单位进行测量,并且默认情况下,
SCN图形的“点”是场景(或局部节点)空间的一个单位。所以,如果你的形状是10个场景单位宽,这就像试图在2D中渲染10个像素的路径。。。您需要一个非常低的平面度值才能使其平滑


要回答非答案中的问题:
细分级别
填充和边缘折痕业务实际上不适用于
SCNShape
——它们适用于为渲染而设计的自定义几何体

谢谢(添加无用字符,因为SOF不允许我在没有15个字符的评论时感谢你。)@Max。使用upvote/accept。这是@rickster的一个重要提示:UIBezierPath使用像素单位,这对于大多数SceneKit材料来说都是非常不合适的(想想ARKit 1单位=1m)。使用
SCNNode.scale
,而不是试图拟合
UIBezierPath.flatness
。我发现UIBezierPath在运行时不正常<
0.01