From de8b523c3d62c09072302934739fa6aacb8703a0 Mon Sep 17 00:00:00 2001 From: zhangqing Date: Mon, 22 Dec 2025 18:45:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B6=E7=82=B9=E8=89=B2=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=88=90=E5=8A=9F=EF=BC=8C=E9=A1=B6=E7=82=B9=E4=BB=8E=E7=83=AD?= =?UTF-8?q?=E5=8A=9B=E4=BD=93=E7=B4=A0=E9=87=87=E6=A0=B7=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E9=9C=80=E8=A6=81=E6=A3=80=E6=9F=A5=EF=BC=8C=E9=83=A8=E5=88=86?= =?UTF-8?q?=E7=83=AD=E5=8A=9B=E5=8C=BA=E5=9F=9F=E6=B2=A1=E6=9C=89=E9=87=87?= =?UTF-8?q?=E6=A0=B7=E5=88=B0=E9=A1=B6=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Content/Maps/Demo.umap | Bin 389500 -> 389500 bytes Content/Res/Materials/M_VertexColor.uasset | Bin 14369 -> 15287 bytes Source/BladeSmith/DynamicIronBlock.cpp | 83 ++++++++++++--------- 3 files changed, 48 insertions(+), 35 deletions(-) diff --git a/Content/Maps/Demo.umap b/Content/Maps/Demo.umap index db5e6f745f1907678afc3f84ed2d38f857b0692b..0c0967fe9f99447fcd5d8ff3bdd059975690965c 100644 GIT binary patch delta 168 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[&](FDynamicMesh3& EditMesh) + // 准备颜色列表和调试信息 + TArray VertexColors; + int32 VertexCount = 0; + float MinTemp = FLT_MAX; + float MaxTemp = -FLT_MAX; + FLinearColor FirstVertexColor = FLinearColor::Black; + float FirstVertexTemp = 0.0f; + FVector FirstVertexPos = FVector::ZeroVector; + + // 读取网格以获取顶点信息并计算颜色 + DynMesh->ProcessMesh([&](const FDynamicMesh3& ReadMesh) { - // 确保网格启用了顶点颜色属性 - if (!EditMesh.HasVertexColors()) - { - EditMesh.EnableVertexColors(FVector3f::Zero()); // 初始化为黑色 - } + VertexCount = ReadMesh.MaxVertexID(); - // 遍历所有顶点 - int32 ColoredVertices = 0; - float MinTemp = FLT_MAX; - float MaxTemp = -FLT_MAX; - FVector3f FirstVertexColor = FVector3f::Zero(); - float FirstVertexTemp = 0.0f; - FVector FirstVertexPos = FVector::ZeroVector; + // 预分配颜色数组大小 + VertexColors.Reserve(VertexCount); - for (int32 VertexID : EditMesh.VertexIndicesItr()) + for (int32 VertexID = 0; VertexID < VertexCount; ++VertexID) { + if (!ReadMesh.IsVertex(VertexID)) + { + // 对于无效顶点,使用默认颜色 + VertexColors.Add(FLinearColor::Black); + continue; + } + // 获取顶点位置(局部坐标) - FVector3d VertexPos = EditMesh.GetVertex(VertexID); + FVector3d VertexPos = ReadMesh.GetVertex(VertexID); FVector VertexPosFloat(VertexPos.X, VertexPos.Y, VertexPos.Z); // 采样该位置的温度 - float Temperature = SampleTemperatureAtPosition(VertexPosFloat); - + //float Temperature = SampleTemperatureAtPosition(VertexPosFloat); + float Temperature = 900; // 统计温度范围 MinTemp = FMath::Min(MinTemp, Temperature); MaxTemp = FMath::Max(MaxTemp, Temperature); // 将温度转换为黑体辐射颜色 FLinearColor TempColor = TemperatureToColor(Temperature); + VertexColors.Add(TempColor); - // 设置顶点颜色(FDynamicMesh3使用FVector3f表示颜色,范围0-1) - FVector3f VertexColor = FVector3f(TempColor.R, TempColor.G, TempColor.B); - EditMesh.SetVertexColor(VertexID, VertexColor); - - // 记录第一个顶点的信息用于调试 - if (ColoredVertices == 0) + // 记录第一个有效顶点的信息用于调试 + if (VertexID == 0) { - FirstVertexColor = VertexColor; + FirstVertexColor = TempColor; FirstVertexTemp = Temperature; FirstVertexPos = VertexPosFloat; } - - ++ColoredVertices; } + }); - UE_LOG(LogTemp, Warning, TEXT("=== UpdateVertexColors Debug Info ===")); - UE_LOG(LogTemp, Warning, TEXT(" Total vertices: %d"), ColoredVertices); - UE_LOG(LogTemp, Warning, TEXT(" Temperature range: %.1f°C - %.1f°C"), MinTemp, MaxTemp); - UE_LOG(LogTemp, Warning, TEXT(" First vertex: Pos=(%.1f, %.1f, %.1f), Temp=%.1f°C, Color=(%.3f, %.3f, %.3f)"), - FirstVertexPos.X, FirstVertexPos.Y, FirstVertexPos.Z, - FirstVertexTemp, - FirstVertexColor.X, FirstVertexColor.Y, FirstVertexColor.Z); - }, EDynamicMeshChangeType::GeneralEdit, EDynamicMeshAttributeChangeFlags::Unknown, false); + // 创建 FGeometryScriptColorList 并关联颜色数组 + FGeometryScriptColorList ColorList; + ColorList.List = MakeShared>(MoveTemp(VertexColors)); + + // 使用 GeometryScript 设置顶点颜色 + UGeometryScriptLibrary_MeshVertexColorFunctions::SetMeshPerVertexColors( + DynMesh, + ColorList + ); + + UE_LOG(LogTemp, Warning, TEXT("=== UpdateVertexColors Debug Info ===")); + UE_LOG(LogTemp, Warning, TEXT(" Total vertices: %d"), VertexCount); + UE_LOG(LogTemp, Warning, TEXT(" Temperature range: %.1f°C - %.1f°C"), MinTemp, MaxTemp); + UE_LOG(LogTemp, Warning, TEXT(" First vertex: Pos=(%.1f, %.1f, %.1f), Temp=%.1f°C, Color=(%.3f, %.3f, %.3f)"), + FirstVertexPos.X, FirstVertexPos.Y, FirstVertexPos.Z, + FirstVertexTemp, + FirstVertexColor.R, FirstVertexColor.G, FirstVertexColor.B); // 通知组件网格已更新 DynMeshComp->NotifyMeshUpdated();