换了个模型
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);
|
// GetStaticMeshVertexPositions(VertexPositions);
|
||||||
|
|
||||||
// 创建位置纹理
|
// 创建位置纹理
|
||||||
const int32 TextureSize = 1024; // 纹理尺寸
|
const int32 TextureSize = TexSize; // 纹理尺寸
|
||||||
// TArray<FLinearColor> InitialData;
|
// TArray<FLinearColor> InitialData;
|
||||||
// InitialData.SetNum(TextureSize * TextureSize);
|
// InitialData.SetNum(TextureSize * TextureSize);
|
||||||
//
|
//
|
||||||
@@ -273,7 +273,7 @@ void AIronBlock::OnHammerHit(const FHitResult& HitResult)
|
|||||||
FVector2D HitUV;
|
FVector2D HitUV;
|
||||||
UGameplayStatics::FindCollisionUV(HitResult,0,HitUV);
|
UGameplayStatics::FindCollisionUV(HitResult,0,HitUV);
|
||||||
FVector ImpactNormal = -HitResult.ImpactNormal;
|
FVector ImpactNormal = -HitResult.ImpactNormal;
|
||||||
CurrentDeformationRadius = 10.0f/1024.0f;
|
CurrentDeformationRadius = ImpactAffectRange/TexSize;
|
||||||
UTextureRenderTarget2D* LastTex = nullptr;
|
UTextureRenderTarget2D* LastTex = nullptr;
|
||||||
UTextureRenderTarget2D* CurTex = nullptr;
|
UTextureRenderTarget2D* CurTex = nullptr;
|
||||||
if(CurrentTextureIndex == 0)
|
if(CurrentTextureIndex == 0)
|
||||||
@@ -363,7 +363,7 @@ void AIronBlock::ExecuteDeformationCS()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 计算纹理UV坐标
|
// 计算纹理UV坐标
|
||||||
const int32 TexSize = ReadTarget->SizeX;
|
const int32 _TexSize = ReadTarget->SizeX;
|
||||||
FVector2D ImpactUV(
|
FVector2D ImpactUV(
|
||||||
(CurrentImpactPoint.X - LocalBounds.Min.X) / LocalBounds.GetSize().X,
|
(CurrentImpactPoint.X - LocalBounds.Min.X) / LocalBounds.GetSize().X,
|
||||||
(CurrentImpactPoint.Y - LocalBounds.Min.Y) / LocalBounds.GetSize().Y
|
(CurrentImpactPoint.Y - LocalBounds.Min.Y) / LocalBounds.GetSize().Y
|
||||||
@@ -387,10 +387,10 @@ void AIronBlock::ExecuteDeformationCS()
|
|||||||
// 计算更新区域 (只更新受影响部分)
|
// 计算更新区域 (只更新受影响部分)
|
||||||
//const float RadiusRatio = CurrentDeformationRadius / LocalBounds.GetExtent().GetMax();
|
//const float RadiusRatio = CurrentDeformationRadius / LocalBounds.GetExtent().GetMax();
|
||||||
FIntRect UpdateRegion;
|
FIntRect UpdateRegion;
|
||||||
UpdateRegion.Min.X = FMath::Clamp(FMath::FloorToInt((ImpactUV.X - RadiusRatio) * TexSize), 0, TexSize - 1);
|
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.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.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.Max.Y = FMath::Clamp(FMath::CeilToInt((ImpactUV.Y + RadiusRatio) * _TexSize), 1, _TexSize);
|
||||||
|
|
||||||
// 确保 Min < Max
|
// 确保 Min < Max
|
||||||
if (UpdateRegion.Min.X >= UpdateRegion.Max.X) UpdateRegion.Max.X = UpdateRegion.Min.X + 1;
|
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.X = 0;
|
||||||
UpdateRegion.Min.Y = 0;
|
UpdateRegion.Min.Y = 0;
|
||||||
UpdateRegion.Max.X = TexSize;
|
UpdateRegion.Max.X = _TexSize;
|
||||||
UpdateRegion.Max.Y = TexSize;
|
UpdateRegion.Max.Y = _TexSize;
|
||||||
|
|
||||||
// --- 关键修改:使用 RDG ---
|
// --- 关键修改:使用 RDG ---
|
||||||
ENQUEUE_RENDER_COMMAND(ExecuteDeformationCS_RDG)(
|
ENQUEUE_RENDER_COMMAND(ExecuteDeformationCS_RDG)(
|
||||||
@@ -414,7 +414,7 @@ void AIronBlock::ExecuteDeformationCS()
|
|||||||
CurrentDeformationRadius = this->CurrentDeformationRadius,
|
CurrentDeformationRadius = this->CurrentDeformationRadius,
|
||||||
CurrentPlasticity = this->CurrentPlasticity,
|
CurrentPlasticity = this->CurrentPlasticity,
|
||||||
UpdateRegion, //
|
UpdateRegion, //
|
||||||
TexSize //
|
_TexSize //
|
||||||
](FRHICommandListImmediate& RHICmdList)
|
](FRHICommandListImmediate& RHICmdList)
|
||||||
{
|
{
|
||||||
// 1. 创建 RDG Builder
|
// 1. 创建 RDG Builder
|
||||||
@@ -439,7 +439,7 @@ void AIronBlock::ExecuteDeformationCS()
|
|||||||
Params->DeformationRadius = CurrentDeformationRadius;
|
Params->DeformationRadius = CurrentDeformationRadius;
|
||||||
Params->Plasticity = CurrentPlasticity;
|
Params->Plasticity = CurrentPlasticity;
|
||||||
Params->UpdateRegionParam = FIntVector4(UpdateRegion.Min.X, UpdateRegion.Min.Y, UpdateRegion.Max.X, UpdateRegion.Max.Y);
|
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")
|
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());
|
,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)
|
UPROPERTY(EditAnywhere)
|
||||||
float ImpactForce;
|
float ImpactForce;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere)
|
||||||
|
float ImpactAffectRange;
|
||||||
|
UPROPERTY(EditAnywhere)
|
||||||
|
float TexSize;
|
||||||
public:
|
public:
|
||||||
// Sets default values for this actor's properties
|
// Sets default values for this actor's properties
|
||||||
AIronBlock();
|
AIronBlock();
|
||||||
|
|||||||
Reference in New Issue
Block a user