Facet Modeler:着色曲面

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

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

 

models are rendered as a set of flat surfaces

 

但是,如果您希望模型看起来平滑,如下图所示,则需要为每个网格顶点提供一个法线。

 

smooth model

 

这样,渲染系统会在面内插值光照。

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 天。
无风险,无需信用卡。

免费试用