これは、自動詳細レベル (LOD) 選択に関するシリーズの2番目の記事です。シリーズの最初の記事については、パート1を参照してください。
Visualize SDK 21.4 は、OdTvProgressiveMeshData の自動詳細レベル選択をサポートしています。これを有効にするには、次を呼び出します。
virtual OdTvResult setAutoLODSelection( LODAutoSelectType autoSelectType ) = 0;
ここで、autoSelectType は LODAutoSelectType の値のいずれかです。
- OdTvProgressiveMeshData::kAutoLOD_None は自動 LOD 選択を無効にします。
- OdTvProgressiveMeshData::kAutoLOD_SqrInterpolation は OdGiProgressiveMesh::kSqrInterpolation LOD 選択を有効にします。
- OdTvProgressiveMeshData::kAutoLOD_SqrtInterpolation は OdGiProgressiveMesh::kSqrtInterpolation LOD 選択を有効にします。
- OdTvProgressiveMeshData::kAutoLOD_CustomInterpolation は OdGiProgressiveMesh::kCustom LOD 選択を有効にします。
補間パラメータは、以下のメソッドを使用して指定できます。
virtual OdTvResult setAutoLODSelectMaxInterpolationThreshold( OdUInt32 nMax ) = 0;
virtual OdTvResult setAutoLODSelectMinInterpolationThreshold( OdUInt32 nMin ) = 0;
Visualize SDK カスタム LOD 補間例
OdTvCustomInterpolation クラスは、詳細レベルのカスタム補間を提供するために使用されます。Visualize SDK は詳細レベルの線形補間を提供しないため、これはカスタム実装です。
class LinearInterpolation : public OdTvCustomInterpolation
{
public:
virtual OdUInt32 interpolate( OdUInt32 minX, OdUInt32 minY, OdUInt32 maxX, OdUInt32 maxY, OdUInt32 x ) const
{
//interpolation: Y = A * x + B, where minY = A * minX + B and maxY = A * maxX + B
double A = ( (double)( maxY - minY ) ) / ( (double)( maxX - minX ) );
double B = maxY - A * maxX;
return OdUInt32( A * x + B );
}
};
…
LinearInterpolation* interp = new LinearInterpolation();
pPM->setAutoLODCustomInterpolation( interp );
pPM->setAutoLODSelection ( OdTvProgressiveMeshData::kAutoLOD_CustomInterpolation );
OdTvProgressiveMeshData オブジェクトのすべてのプロパティは .vsf ファイルに保存されます。ただし、OdTvCustomInterpolation へのポインタは保存できません。そのため、保存中に OdTvProgressiveMeshData は getAutoLODSelectInterpolationThresholds() によって返される間隔内の各値に対して OdTvCustomInterpolation::interpolate() メソッドを呼び出します。ロード後、OdTvProgressiveMeshData オブジェクトは、OdTvCustomInterpolation オブジェクトへの新しいポインタが指定されるまで、このデータを使用してカスタム補間を実行します。