Diff
checker
テキスト
テキスト
画像
ドキュメント
Excel
フォルダ
Legal
Enterprise
デスクトップ
料金
ログイン
Diffchecker デスクトップのダウンロード
テキスト比較
2 つのテキスト ファイルの違いを見つける
ツール
履歴
ライブエディター
未変更行を折りたたむ
折り返しなし
レイアウト
分割
統合
比較精度
スマート
単語
文字
シンタックスハイライト
構文を選択
無視
テキスト変換
最初の差分へ移動
入力を編集
Diffchecker Desktop
Diffcheckerを実行する最も安全な方法。Diffchecker Desktopアプリを入手:あなたの差分はコンピューターから出ることはありません!
Desktopを入手
Subdivision Step Sampler diff 5.8 / 5.7
作成日
19 時間前
差分は期限切れになりません
クリア
エクスポート
共有
説明
0 削除
行
合計
削除
文字
合計
削除
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
87 行
すべてコピー
3 追加
行
合計
追加
文字
合計
追加
この機能を引き続き使用するには、アップグレードしてください
Diff
checker
Pro
価格を見る
87 行
すべてコピー
virtual void Step(FSamplerResult& OutResult) override
virtual void Step(FSamplerResult& OutResult) override
{
{
const int PreviousSegmentIndex = (CurrentSegmentIndex > 0 ? CurrentSegmentIndex : NumSegments) - 1;
const int PreviousSegmentIndex = (CurrentSegmentIndex > 0 ? CurrentSegmentIndex : NumSegments) - 1;
// To capture the last key point on the spline, we sample the point at the end of the previous segment.
// To capture the last key point on the spline, we sample the point at the end of the previous segment.
const bool bLastKeyPoint = CurrentSegmentIndex == LineData->GetNumSegments();
const bool bLastKeyPoint = CurrentSegmentIndex == LineData->GetNumSegments();
const int SegmentIndex = bLastKeyPoint ? PreviousSegmentIndex : CurrentSegmentIndex;
const int SegmentIndex = bLastKeyPoint ? PreviousSegmentIndex : CurrentSegmentIndex;
const FVector::FReal SegmentLength = LineData->GetSegmentLength(SegmentIndex);
const FVector::FReal SegmentLength = LineData->GetSegmentLength(SegmentIndex);
const FVector::FReal SegmentStep = SegmentLength / (SubdivisionsPerSegment + 1);
const FVector::FReal SegmentStep = SegmentLength / (SubdivisionsPerSegment + 1);
const FVector::FReal DistanceAlongSegment = bLastKeyPoint ? SegmentLength : SubpointIndex * SegmentStep;
const FVector::FReal DistanceAlongSegment = bLastKeyPoint ? SegmentLength : SubpointIndex * SegmentStep;
FBox& OutBox = OutResult.Box;
FBox& OutBox = OutResult.Box;
FTransform& OutTransform = OutResult.LocalTransform;
FTransform& OutTransform = OutResult.LocalTransform;
OutTransform = LineData->GetTransformAtDistance(SegmentIndex, DistanceAlongSegment, /*bWorldSpace=*/false, &OutBox);
OutTransform = LineData->GetTransformAtDistance(SegmentIndex, DistanceAlongSegment, /*bWorldSpace=*/false, &OutBox);
OutResult.SampleIndex = SampleIndex++;
OutResult.SampleIndex = SampleIndex++;
OutResult.SegmentIndex = LineData->IsClosed() ? CurrentSegmentIndex : SegmentIndex;
OutResult.SegmentIndex = LineData->IsClosed() ? CurrentSegmentIndex : SegmentIndex;
OutResult.SubsegmentIndex = SubpointIndex;
OutResult.SubsegmentIndex = SubpointIndex;
OutResult.InputKey = LineData->GetInputKeyAtDistance(SegmentIndex, DistanceAlongSegment);
OutResult.InputKey = LineData->GetInputKeyAtDistance(SegmentIndex, DistanceAlongSegment);
if (bComputeCurvature)
if (bComputeCurvature)
{
{
OutResult.Curvature = LineData->GetCurvatureAtDistance(SegmentIndex, DistanceAlongSegment);
OutResult.Curvature = LineData->GetCurvatureAtDistance(SegmentIndex, DistanceAlongSegment);
}
}
if (bComputeTangents)
if (bComputeTangents)
{
{
// Control points have actual Arrive and Leave tangents
// Control points have actual Arrive and Leave tangents
if (SubpointIndex == 0)
if (SubpointIndex == 0)
{
{
LineData->GetTangentsAtSegmentStart(CurrentSegmentIndex, OutResult.ArriveTangent, OutResult.LeaveTangent);
LineData->GetTangentsAtSegmentStart(CurrentSegmentIndex, OutResult.ArriveTangent, OutResult.LeaveTangent);
}
}
else
else
{
{
// For a non-control-point, we can get the normalized tangent at least.
// For a non-control-point, we can get the normalized tangent at least.
const FVector Forward = OutTransform.GetRotation().GetForwardVector();
const FVector Forward = OutTransform.GetRotation().GetForwardVector();
OutResult.ArriveTangent = Forward;
OutResult.ArriveTangent = Forward;
OutResult.LeaveTangent = Forward;
OutResult.LeaveTangent = Forward;
}
}
}
}
if (bComputeAlpha)
if (bComputeAlpha)
{
{
OutResult.Alpha = LineData->GetAlphaAtDistance(SegmentIndex, DistanceAlongSegment);
OutResult.Alpha = LineData->GetAlphaAtDistance(SegmentIndex, DistanceAlongSegment);
}
}
if (bComputeDistance)
if (bComputeDistance)
{
{
// When we step onto a new segment, add the length of the previous segment onto the distance to our current segment.
// When we step onto a new segment, add the length of the previous segment onto the distance to our current segment.
if (SegmentIndex > 0 && !bLastKeyPoint && SubpointIndex == 0)
if (SegmentIndex > 0 && !bLastKeyPoint && SubpointIndex == 0)
{
{
DistanceToCurrentSegment += LineData->GetSegmentLength(SegmentIndex - 1);
DistanceToCurrentSegment += LineData->GetSegmentLength(SegmentIndex - 1);
}
}
OutResult.Distance = DistanceToCurrentSegment + DistanceAlongSegment;
OutResult.Distance = DistanceToCurrentSegment + DistanceAlongSegment;
}
}
const double ScaleFactor = 0.5 * SegmentStep / (FMath::IsNearlyZero(OutTransform.GetScale3D().X) ? UE_DOUBLE_SMALL_NUMBER : OutTransform.GetScale3D().X);
const double ScaleFactor = 0.5 * SegmentStep / (FMath::IsNearlyZero(OutTransform.GetScale3D().X) ? UE_DOUBLE_SMALL_NUMBER : OutTransform.GetScale3D().X);
if (SubpointIndex == 0)
if (SubpointIndex == 0)
{
{
const FVector::FReal PreviousSegmentLength = LineData->GetSegmentLength(PreviousSegmentIndex);
const FVector::FReal PreviousSegmentLength = LineData->GetSegmentLength(PreviousSegmentIndex);
FTransform PreviousSegmentEndTransform = LineData->GetTransformAtDistance(PreviousSegmentIndex, PreviousSegmentLength, /*bWorldSpace=*/false);
FTransform PreviousSegmentEndTransform = LineData->GetTransformAtDistance(PreviousSegmentIndex, PreviousSegmentLength, /*bWorldSpace=*/false);
if ((PreviousSegmentEndTransform.GetLocation() - OutTransform.GetLocation()).Length() <= KINDA_SMALL_NUMBER)
if ((PreviousSegmentEndTransform.GetLocation() - OutTransform.GetLocation()).Length() <= KINDA_SMALL_NUMBER)
{
{
OutBox.Min.X *= 0.5 * PreviousSegmentLength / ((FMath::IsNearlyZero(PreviousSegmentEndTransform.GetScale3D().X) ? UE_DOUBLE_SMALL_NUMBER : PreviousSegmentEndTransform.GetScale3D().X) * (SubdivisionsPerSegment + 1));
OutBox.Min.X *= 0.5 * PreviousSegmentLength / ((FMath::IsNearlyZero(PreviousSegmentEndTransform.GetScale3D().X) ? UE_DOUBLE_SMALL_NUMBER : PreviousSegmentEndTransform.GetScale3D().X) * (SubdivisionsPerSegment + 1));
}
}
else
else
{
{
コピー
コピー済み
コピー
コピー済み
OutBox.Min.X *=
ScaleFactor;
OutBox.Min.X *=
0.5 * SegmentStep /
ScaleFactor;
}
}
}
}
else
else
{
{
コピー
コピー済み
コピー
コピー済み
OutBox.Min.X *=
ScaleFactor;
OutBox.Min.X *=
0.5 * SegmentStep /
ScaleFactor;
}
}
コピー
コピー済み
コピー
コピー済み
OutBox.Max.X *=
ScaleFactor;
OutBox.Max.X *=
0.5 * SegmentStep /
ScaleFactor;
++SubpointIndex;
++SubpointIndex;
if (SubpointIndex > SubdivisionsPerSegment || bLastKeyPoint)
if (SubpointIndex > SubdivisionsPerSegment || bLastKeyPoint)
{
{
SubpointIndex = 0;
SubpointIndex = 0;
++CurrentSegmentIndex;
++CurrentSegmentIndex;
}
}
}
}
保存された差分
原文
ファイルを開く
virtual void Step(FSamplerResult& OutResult) override { const int PreviousSegmentIndex = (CurrentSegmentIndex > 0 ? CurrentSegmentIndex : NumSegments) - 1; // To capture the last key point on the spline, we sample the point at the end of the previous segment. const bool bLastKeyPoint = CurrentSegmentIndex == LineData->GetNumSegments(); const int SegmentIndex = bLastKeyPoint ? PreviousSegmentIndex : CurrentSegmentIndex; const FVector::FReal SegmentLength = LineData->GetSegmentLength(SegmentIndex); const FVector::FReal SegmentStep = SegmentLength / (SubdivisionsPerSegment + 1); const FVector::FReal DistanceAlongSegment = bLastKeyPoint ? SegmentLength : SubpointIndex * SegmentStep; FBox& OutBox = OutResult.Box; FTransform& OutTransform = OutResult.LocalTransform; OutTransform = LineData->GetTransformAtDistance(SegmentIndex, DistanceAlongSegment, /*bWorldSpace=*/false, &OutBox); OutResult.SampleIndex = SampleIndex++; OutResult.SegmentIndex = LineData->IsClosed() ? CurrentSegmentIndex : SegmentIndex; OutResult.SubsegmentIndex = SubpointIndex; OutResult.InputKey = LineData->GetInputKeyAtDistance(SegmentIndex, DistanceAlongSegment); if (bComputeCurvature) { OutResult.Curvature = LineData->GetCurvatureAtDistance(SegmentIndex, DistanceAlongSegment); } if (bComputeTangents) { // Control points have actual Arrive and Leave tangents if (SubpointIndex == 0) { LineData->GetTangentsAtSegmentStart(CurrentSegmentIndex, OutResult.ArriveTangent, OutResult.LeaveTangent); } else { // For a non-control-point, we can get the normalized tangent at least. const FVector Forward = OutTransform.GetRotation().GetForwardVector(); OutResult.ArriveTangent = Forward; OutResult.LeaveTangent = Forward; } } if (bComputeAlpha) { OutResult.Alpha = LineData->GetAlphaAtDistance(SegmentIndex, DistanceAlongSegment); } if (bComputeDistance) { // When we step onto a new segment, add the length of the previous segment onto the distance to our current segment. if (SegmentIndex > 0 && !bLastKeyPoint && SubpointIndex == 0) { DistanceToCurrentSegment += LineData->GetSegmentLength(SegmentIndex - 1); } OutResult.Distance = DistanceToCurrentSegment + DistanceAlongSegment; } const double ScaleFactor = 0.5 * SegmentStep / (FMath::IsNearlyZero(OutTransform.GetScale3D().X) ? UE_DOUBLE_SMALL_NUMBER : OutTransform.GetScale3D().X); if (SubpointIndex == 0) { const FVector::FReal PreviousSegmentLength = LineData->GetSegmentLength(PreviousSegmentIndex); FTransform PreviousSegmentEndTransform = LineData->GetTransformAtDistance(PreviousSegmentIndex, PreviousSegmentLength, /*bWorldSpace=*/false); if ((PreviousSegmentEndTransform.GetLocation() - OutTransform.GetLocation()).Length() <= KINDA_SMALL_NUMBER) { OutBox.Min.X *= 0.5 * PreviousSegmentLength / ((FMath::IsNearlyZero(PreviousSegmentEndTransform.GetScale3D().X) ? UE_DOUBLE_SMALL_NUMBER : PreviousSegmentEndTransform.GetScale3D().X) * (SubdivisionsPerSegment + 1)); } else { OutBox.Min.X *= ScaleFactor; } } else { OutBox.Min.X *= ScaleFactor; } OutBox.Max.X *= ScaleFactor; ++SubpointIndex; if (SubpointIndex > SubdivisionsPerSegment || bLastKeyPoint) { SubpointIndex = 0; ++CurrentSegmentIndex; } }
変更されたテキスト
ファイルを開く
virtual void Step(FSamplerResult& OutResult) override { const int PreviousSegmentIndex = (CurrentSegmentIndex > 0 ? CurrentSegmentIndex : NumSegments) - 1; // To capture the last key point on the spline, we sample the point at the end of the previous segment. const bool bLastKeyPoint = CurrentSegmentIndex == LineData->GetNumSegments(); const int SegmentIndex = bLastKeyPoint ? PreviousSegmentIndex : CurrentSegmentIndex; const FVector::FReal SegmentLength = LineData->GetSegmentLength(SegmentIndex); const FVector::FReal SegmentStep = SegmentLength / (SubdivisionsPerSegment + 1); const FVector::FReal DistanceAlongSegment = bLastKeyPoint ? SegmentLength : SubpointIndex * SegmentStep; FBox& OutBox = OutResult.Box; FTransform& OutTransform = OutResult.LocalTransform; OutTransform = LineData->GetTransformAtDistance(SegmentIndex, DistanceAlongSegment, /*bWorldSpace=*/false, &OutBox); OutResult.SampleIndex = SampleIndex++; OutResult.SegmentIndex = LineData->IsClosed() ? CurrentSegmentIndex : SegmentIndex; OutResult.SubsegmentIndex = SubpointIndex; OutResult.InputKey = LineData->GetInputKeyAtDistance(SegmentIndex, DistanceAlongSegment); if (bComputeCurvature) { OutResult.Curvature = LineData->GetCurvatureAtDistance(SegmentIndex, DistanceAlongSegment); } if (bComputeTangents) { // Control points have actual Arrive and Leave tangents if (SubpointIndex == 0) { LineData->GetTangentsAtSegmentStart(CurrentSegmentIndex, OutResult.ArriveTangent, OutResult.LeaveTangent); } else { // For a non-control-point, we can get the normalized tangent at least. const FVector Forward = OutTransform.GetRotation().GetForwardVector(); OutResult.ArriveTangent = Forward; OutResult.LeaveTangent = Forward; } } if (bComputeAlpha) { OutResult.Alpha = LineData->GetAlphaAtDistance(SegmentIndex, DistanceAlongSegment); } if (bComputeDistance) { // When we step onto a new segment, add the length of the previous segment onto the distance to our current segment. if (SegmentIndex > 0 && !bLastKeyPoint && SubpointIndex == 0) { DistanceToCurrentSegment += LineData->GetSegmentLength(SegmentIndex - 1); } OutResult.Distance = DistanceToCurrentSegment + DistanceAlongSegment; } const double ScaleFactor = 0.5 * SegmentStep / (FMath::IsNearlyZero(OutTransform.GetScale3D().X) ? UE_DOUBLE_SMALL_NUMBER : OutTransform.GetScale3D().X); if (SubpointIndex == 0) { const FVector::FReal PreviousSegmentLength = LineData->GetSegmentLength(PreviousSegmentIndex); FTransform PreviousSegmentEndTransform = LineData->GetTransformAtDistance(PreviousSegmentIndex, PreviousSegmentLength, /*bWorldSpace=*/false); if ((PreviousSegmentEndTransform.GetLocation() - OutTransform.GetLocation()).Length() <= KINDA_SMALL_NUMBER) { OutBox.Min.X *= 0.5 * PreviousSegmentLength / ((FMath::IsNearlyZero(PreviousSegmentEndTransform.GetScale3D().X) ? UE_DOUBLE_SMALL_NUMBER : PreviousSegmentEndTransform.GetScale3D().X) * (SubdivisionsPerSegment + 1)); } else { OutBox.Min.X *= 0.5 * SegmentStep / ScaleFactor; } } else { OutBox.Min.X *= 0.5 * SegmentStep / ScaleFactor; } OutBox.Max.X *= 0.5 * SegmentStep / ScaleFactor; ++SubpointIndex; if (SubpointIndex > SubdivisionsPerSegment || bLastKeyPoint) { SubpointIndex = 0; ++CurrentSegmentIndex; } }
違いを見つける