[返回博客](/cn/blog) # Facet Modeler：着色曲面

Vladimir Savelyev 五月 13, 2021 [\#facet modeler](/cn/blog/tag/facet-modeler)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

本文提供了有关如何在 Facet Modeler 中创建着色曲面的信息。

在底层，模型被渲染为一组平面，通常是三角形。例如：

![models are rendered as a set of flat surfaces](/files/inline-images/rendered%20as%20a%20set%20of%20flat%20surfaces.png)但是，如果您希望模型看起来平滑，如下图所示，则需要为每个网格顶点提供一个法线。

![smooth model](/files/inline-images/smooth%20model.png)这样，渲染系统会在面内插值光照。

Facet Modeler 允许您为任何面从解析曲面计算顶点法线。例如，挤压一个圆会生成一个具有平滑圆形表面的圆柱体。它可以使用 FacetModeler::DrawBody() 函数以着色模式渲染。

然而，有些面没有关联的解析曲面。在这种情况下，它们可以与一个特殊的 ShadedSurface 结合在一起进行着色绘制。一个实体可以根据阈值折痕角自动分割成着色曲面。

因此，您可以使用 MarkShadedFaces() 方法来合并相邻面，这些面之间的折痕角小于 angleTol 值。

```
FMGEOMETRY_API void MarkShadedSurfaces(Body& aBody, double angleTol, bool bDetectSharpEdges = false);
```

所描述的相邻面被标记为相同的 ShadedSurface 实体，并作为单个着色曲面渲染，没有任何可见的边。

如果您想检测由相同 ShadedSurface 面平滑的锐利边缘，请将 bDetectSharpEdges 标志设置为 true。这可以更好地渲染通常平滑区域内的局部锐利特征。但是，这会减慢着色曲面数据的计算速度。

要清除实体中的所有 ShadedSurface 数据，请使用 ClearShadedSurfaces() 方法。但请记住，它将像调用 MarkShadedFaces() 之前一样以平面方式渲染。

```
FMGEOMETRY_API void ClearShadedSurfaces(Body& aBody);
```

有关示例，请参阅位于 CommonApplications/Drawing/Examples 目录中的 ExFmBody 示例。

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
