换了个模型
This commit is contained in:
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -136,7 +136,7 @@ void AIronBlock::InitializePositionTexture()
|
||||
// GetStaticMeshVertexPositions(VertexPositions);
|
||||
|
||||
// 创建位置纹理
|
||||
const int32 TextureSize = 1024; // 纹理尺寸
|
||||
const int32 TextureSize = TexSize; // 纹理尺寸
|
||||
// TArray<FLinearColor> InitialData;
|
||||
// InitialData.SetNum(TextureSize * TextureSize);
|
||||
//
|
||||
@@ -273,7 +273,7 @@ void AIronBlock::OnHammerHit(const FHitResult& HitResult)
|
||||
FVector2D HitUV;
|
||||
UGameplayStatics::FindCollisionUV(HitResult,0,HitUV);
|
||||
FVector ImpactNormal = -HitResult.ImpactNormal;
|
||||
CurrentDeformationRadius = 10.0f/1024.0f;
|
||||
CurrentDeformationRadius = ImpactAffectRange/TexSize;
|
||||
UTextureRenderTarget2D* LastTex = nullptr;
|
||||
UTextureRenderTarget2D* CurTex = nullptr;
|
||||
if(CurrentTextureIndex == 0)
|
||||
@@ -363,7 +363,7 @@ void AIronBlock::ExecuteDeformationCS()
|
||||
}
|
||||
|
||||
// 计算纹理UV坐标
|
||||
const int32 TexSize = ReadTarget->SizeX;
|
||||
const int32 _TexSize = ReadTarget->SizeX;
|
||||
FVector2D ImpactUV(
|
||||
(CurrentImpactPoint.X - LocalBounds.Min.X) / LocalBounds.GetSize().X,
|
||||
(CurrentImpactPoint.Y - LocalBounds.Min.Y) / LocalBounds.GetSize().Y
|
||||
@@ -387,10 +387,10 @@ void AIronBlock::ExecuteDeformationCS()
|
||||
// 计算更新区域 (只更新受影响部分)
|
||||
//const float RadiusRatio = CurrentDeformationRadius / LocalBounds.GetExtent().GetMax();
|
||||
FIntRect UpdateRegion;
|
||||
UpdateRegion.Min.X = FMath::Clamp(FMath::FloorToInt((ImpactUV.X - RadiusRatio) * TexSize), 0, TexSize - 1);
|
||||
UpdateRegion.Min.Y = FMath::Clamp(FMath::FloorToInt((ImpactUV.Y - RadiusRatio) * TexSize), 0, TexSize - 1);
|
||||
UpdateRegion.Max.X = FMath::Clamp(FMath::CeilToInt((ImpactUV.X + RadiusRatio) * TexSize), 1, TexSize);
|
||||
UpdateRegion.Max.Y = FMath::Clamp(FMath::CeilToInt((ImpactUV.Y + RadiusRatio) * TexSize), 1, TexSize);
|
||||
UpdateRegion.Min.X = FMath::Clamp(FMath::FloorToInt((ImpactUV.X - RadiusRatio) * _TexSize), 0, _TexSize - 1);
|
||||
UpdateRegion.Min.Y = FMath::Clamp(FMath::FloorToInt((ImpactUV.Y - RadiusRatio) * _TexSize), 0, _TexSize - 1);
|
||||
UpdateRegion.Max.X = FMath::Clamp(FMath::CeilToInt((ImpactUV.X + RadiusRatio) * _TexSize), 1, _TexSize);
|
||||
UpdateRegion.Max.Y = FMath::Clamp(FMath::CeilToInt((ImpactUV.Y + RadiusRatio) * _TexSize), 1, _TexSize);
|
||||
|
||||
// 确保 Min < Max
|
||||
if (UpdateRegion.Min.X >= UpdateRegion.Max.X) UpdateRegion.Max.X = UpdateRegion.Min.X + 1;
|
||||
@@ -399,8 +399,8 @@ void AIronBlock::ExecuteDeformationCS()
|
||||
// 临时代码,先更新全部区域
|
||||
UpdateRegion.Min.X = 0;
|
||||
UpdateRegion.Min.Y = 0;
|
||||
UpdateRegion.Max.X = TexSize;
|
||||
UpdateRegion.Max.Y = TexSize;
|
||||
UpdateRegion.Max.X = _TexSize;
|
||||
UpdateRegion.Max.Y = _TexSize;
|
||||
|
||||
// --- 关键修改:使用 RDG ---
|
||||
ENQUEUE_RENDER_COMMAND(ExecuteDeformationCS_RDG)(
|
||||
@@ -414,7 +414,7 @@ void AIronBlock::ExecuteDeformationCS()
|
||||
CurrentDeformationRadius = this->CurrentDeformationRadius,
|
||||
CurrentPlasticity = this->CurrentPlasticity,
|
||||
UpdateRegion, //
|
||||
TexSize //
|
||||
_TexSize //
|
||||
](FRHICommandListImmediate& RHICmdList)
|
||||
{
|
||||
// 1. 创建 RDG Builder
|
||||
@@ -439,7 +439,7 @@ void AIronBlock::ExecuteDeformationCS()
|
||||
Params->DeformationRadius = CurrentDeformationRadius;
|
||||
Params->Plasticity = CurrentPlasticity;
|
||||
Params->UpdateRegionParam = FIntVector4(UpdateRegion.Min.X, UpdateRegion.Min.Y, UpdateRegion.Max.X, UpdateRegion.Max.Y);
|
||||
Params->TextureSize = FIntVector(TexSize, TexSize, 1);
|
||||
Params->TextureSize = FIntVector(_TexSize, _TexSize, 1);
|
||||
UE_LOG(LogTemp,Display,TEXT("[AIronBlock::ExecuteDeformationCS]ImpactForce:%f, ImpactPoint:%s,ImpactNormal:%s,DeformationRadius:%f,Plasticity:%f,UpdateRegion:%s")
|
||||
,Params->ImpactForce,*Params->ImpactPoint.ToString(),*Params->ImpactNormal.ToString(),Params->DeformationRadius,Params->Plasticity,*Params->UpdateRegionParam.ToString());
|
||||
|
||||
|
||||
@@ -38,7 +38,11 @@ class BLADESMITH_API AIronBlock : public AActor
|
||||
|
||||
UPROPERTY(EditAnywhere)
|
||||
float ImpactForce;
|
||||
|
||||
|
||||
UPROPERTY(EditAnywhere)
|
||||
float ImpactAffectRange;
|
||||
UPROPERTY(EditAnywhere)
|
||||
float TexSize;
|
||||
public:
|
||||
// Sets default values for this actor's properties
|
||||
AIronBlock();
|
||||
|
||||
Reference in New Issue
Block a user