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

时间:2015-02-19 01:34:28

标签: 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 = [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];

1 个答案:

答案 0 :(得分:5)

来自文档:

  

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

相反,较低的平坦度值导致更平滑的形状。

Bezier路径平坦度非常适合此API,因为它以像素/点为单位进行测量,默认情况下为"点"对于SCNShape,是一个场景(或本地节点)空间单位。因此,如果您的形状是10个场景单位宽,那就像尝试在2D中以10个像素渲染路径...您需要真正的低平坦度值才能使其平滑。 / p>

要回答非答案中的问题:subdivisionLevel内容和边缘折痕业务并非真正用于SCNShape - 他们认为自定义几何图形为&#39 ; s设计用于subdivision surface渲染。