この記事では、Facet Modelerでシェーディングされたサーフェスを作成する方法に関する情報を提供します。
低レベルでは、モデルは通常三角形である一連の平坦なサーフェスとしてレンダリングされます。例:
しかし、以下の図のようにモデルを滑らかに見せたい場合は、すべてのメッシュ頂点に法線を提供する必要があります。
このようにして、レンダリングシステムは面内の光を補間します。
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の例を参照してください。