我目前正在尝试使用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];
答案 0 :(得分:5)
来自文档:
路径的平坦度(参见setFlatness:在NSBezierPath类参考中)确定了SceneKit在从路径构建三维形状时使用的细节级别 - 较大的平坦度值导致渲染的多边形更少,从而提高了性能。
相反,较低的平坦度值导致更平滑的形状。
Bezier路径平坦度非常适合此API,因为它以像素/点为单位进行测量,默认情况下为"点"对于SCNShape
,是一个场景(或本地节点)空间单位。因此,如果您的形状是10个场景单位宽,那就像尝试在2D中以10个像素渲染路径...您需要真正的低平坦度值才能使其平滑。 / p>
要回答非答案中的问题:subdivisionLevel
内容和边缘折痕业务并非真正用于SCNShape
- 他们认为自定义几何图形为&#39 ; s设计用于subdivision surface渲染。