换了个模型

This commit is contained in:
zhangqing
2025-11-13 19:11:35 +08:00
parent fcc1641189
commit 9d92b65af6
7 changed files with 19 additions and 14 deletions
+11 -11
View File
@@ -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());
+5 -1
View File
@@ -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();