当前位置: 首页 > wzjs >正文

网站设计公司哪家关键词竞价排名

网站设计公司哪家,关键词竞价排名,可靠的合肥网站建设,自己做的网站为什么访问不效果 如下所示,通过“ProceduralMeshComponent”创建了一个自定义形状的Mesh,并且该Mesh包含碰撞信息,然后2s后更新Mesh形状。 步骤 1. 在“xxx.Build.cs”中引入“ProceduralMeshComponent”模块 2. 新建一个Actor类,这里命名为…

效果

        如下所示,通过“ProceduralMeshComponent”创建了一个自定义形状的Mesh,并且该Mesh包含碰撞信息,然后2s后更新Mesh形状。

步骤

1. 在“xxx.Build.cs”中引入“ProceduralMeshComponent”模块

2. 新建一个Actor类,这里命名为“DrawMeshActor”

在“DrawMeshActor.h”中引入“ProceduralMeshComponent.h”

定义“程序化网格组件”和创建自定义Mesh的方法“GenerateMesh”。其中函数“GenerateMesh”需要传入材质、三角形网格数组“Triangles”和一个布尔值“bCreateCollision”,“bCreateCollision”表示是否要生成碰撞。

三角形网格数组“Triangles”中的元素是结构体“FTriangleData”,该结构体定义如下,主要由三个点的位置构成

3. 在“DrawMeshActor.cpp”中,先引入"Materials/MaterialInterface.h",然后在“DrawMeshActor”构造时添加“ProceduralMeshComponent”组件

最后实现函数“GenerateMesh”如下

void ADrawMeshActor::GenerateMesh(UMaterialInterface* InMaterial, const TArray<FTriangleData>& Triangles, bool bCreateCollision)
{if (!ProceduralMesh){UE_LOG(LogTemp, Error, TEXT("GenerateMeshFromTriangles: ProceduralMesh component is null."));return;}if (Triangles.Num() == 0){UE_LOG(LogTemp, Warning, TEXT("GenerateMeshFromTriangles: Input Triangles array is empty. Clearing mesh."));ProceduralMesh->ClearMeshSection(0);return;}//清除之前的网格ProceduralMesh->ClearMeshSection(0);//根据三角形数量计算顶点个数int32 NumTriangles = Triangles.Num();int32 NumVertices = NumTriangles * 3;TArray<FVector> Vertices;TArray<int32> TriangleIndices;TArray<FVector> Normals;TArray<FVector2D> UV0;TArray<FProcMeshTangent> Tangents;TArray<FLinearColor> VertexColors;//预留空间Vertices.Reserve(NumVertices);TriangleIndices.Reserve(NumVertices);Normals.Reserve(NumVertices);UV0.Reserve(NumVertices);//循环添加每一个三角形网格数据for (int32 TriIndex = 0; TriIndex < NumTriangles; ++TriIndex){const FTriangleData& CurrentTriangle = Triangles[TriIndex];int32 BaseVertexIndex = TriIndex * 3;//为三角形添加顶点Vertices.Add(CurrentTriangle.Point1);Vertices.Add(CurrentTriangle.Point2);Vertices.Add(CurrentTriangle.Point3);//添加三角形索引TriangleIndices.Add(BaseVertexIndex + 0);TriangleIndices.Add(BaseVertexIndex + 1);TriangleIndices.Add(BaseVertexIndex + 2);// 计算三角形法线FVector Normal = FVector::CrossProduct(CurrentTriangle.Point3 - CurrentTriangle.Point1, CurrentTriangle.Point2 - CurrentTriangle.Point1);Normal.Normalize();//为三角形的所有3个顶点添加相同的法线Normals.Add(Normal);Normals.Add(Normal);Normals.Add(Normal);//添加UVUV0.Add(FVector2D(0.0f, 1.0f)); // UV for Point1UV0.Add(FVector2D(1.0f, 1.0f)); // UV for Point2UV0.Add(FVector2D(0.0f, 0.0f)); // UV for Point3}//创建网格ProceduralMesh->CreateMeshSection_LinearColor(0,Vertices,TriangleIndices,Normals,UV0,VertexColors,Tangents,bCreateCollision);//设置材质if (InMaterial){ProceduralMesh->SetMaterial(0, InMaterial);}else{UE_LOG(LogTemp, Warning, TEXT("GenerateMeshFromTriangles: Input Material (InMaterial) is null. Mesh section 0 might have default material."));// if (DefaultMaterial) ProceduralMesh->SetMaterial(0, DefaultMaterial);}
}

源码:

// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ProceduralMeshComponent.h"
#include "DrawMeshActor.generated.h"USTRUCT(BlueprintType)
struct FTriangleData
{GENERATED_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Triangle Data")FVector Point1 = FVector::ZeroVector;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Triangle Data")FVector Point2 = FVector::ZeroVector;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Triangle Data")FVector Point3 = FVector::ZeroVector;FTriangleData() {}FTriangleData(const FVector& InP1, const FVector& InP2, const FVector& InP3): Point1(InP1), Point2(InP2), Point3(InP3) {}
};UCLASS()
class TESTPROJECT2_API ADrawMeshActor : public AActor
{GENERATED_BODY()public:	ADrawMeshActor();protected:virtual void BeginPlay() override;public:	virtual void Tick(float DeltaTime) override;public:// 程序化网格组件UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components")UProceduralMeshComponent* ProceduralMesh;UFUNCTION(BlueprintCallable)void GenerateMesh(UMaterialInterface* InMaterial, const TArray<FTriangleData>& Triangles, bool bCreateCollision);
};
// Fill out your copyright notice in the Description page of Project Settings.#include "DrawMeshActor.h"
#include "Materials/MaterialInterface.h"ADrawMeshActor::ADrawMeshActor()
{PrimaryActorTick.bCanEverTick = false;// 创建程序化网格组件并设为根组件ProceduralMesh = CreateDefaultSubobject<UProceduralMeshComponent>(TEXT("ProceduralMesh"));SetRootComponent(ProceduralMesh);ProceduralMesh->bUseAsyncCooking = true; // 可选:在单独线程准备物理数据}// Called when the game starts or when spawned
void ADrawMeshActor::BeginPlay()
{Super::BeginPlay();}// Called every frame
void ADrawMeshActor::Tick(float DeltaTime)
{Super::Tick(DeltaTime);}void ADrawMeshActor::GenerateMesh(UMaterialInterface* InMaterial, const TArray<FTriangleData>& Triangles, bool bCreateCollision)
{if (!ProceduralMesh){UE_LOG(LogTemp, Error, TEXT("GenerateMeshFromTriangles: ProceduralMesh component is null."));return;}if (Triangles.Num() == 0){UE_LOG(LogTemp, Warning, TEXT("GenerateMeshFromTriangles: Input Triangles array is empty. Clearing mesh."));ProceduralMesh->ClearMeshSection(0);return;}//清除之前的网格ProceduralMesh->ClearMeshSection(0);//根据三角形数量计算顶点个数int32 NumTriangles = Triangles.Num();int32 NumVertices = NumTriangles * 3;TArray<FVector> Vertices;TArray<int32> TriangleIndices;TArray<FVector> Normals;TArray<FVector2D> UV0;TArray<FProcMeshTangent> Tangents;TArray<FLinearColor> VertexColors;//预留空间Vertices.Reserve(NumVertices);TriangleIndices.Reserve(NumVertices);Normals.Reserve(NumVertices);UV0.Reserve(NumVertices);//循环添加每一个三角形网格数据for (int32 TriIndex = 0; TriIndex < NumTriangles; ++TriIndex){const FTriangleData& CurrentTriangle = Triangles[TriIndex];int32 BaseVertexIndex = TriIndex * 3;//为三角形添加顶点Vertices.Add(CurrentTriangle.Point1);Vertices.Add(CurrentTriangle.Point2);Vertices.Add(CurrentTriangle.Point3);//添加三角形索引TriangleIndices.Add(BaseVertexIndex + 0);TriangleIndices.Add(BaseVertexIndex + 1);TriangleIndices.Add(BaseVertexIndex + 2);// 计算三角形法线FVector Normal = FVector::CrossProduct(CurrentTriangle.Point3 - CurrentTriangle.Point1, CurrentTriangle.Point2 - CurrentTriangle.Point1);Normal.Normalize();//为三角形的所有3个顶点添加相同的法线Normals.Add(Normal);Normals.Add(Normal);Normals.Add(Normal);//添加UVUV0.Add(FVector2D(0.0f, 1.0f)); // UV for Point1UV0.Add(FVector2D(1.0f, 1.0f)); // UV for Point2UV0.Add(FVector2D(0.0f, 0.0f)); // UV for Point3}//创建网格ProceduralMesh->CreateMeshSection_LinearColor(0,Vertices,TriangleIndices,Normals,UV0,VertexColors,Tangents,bCreateCollision);//设置材质if (InMaterial){ProceduralMesh->SetMaterial(0, InMaterial);}else{UE_LOG(LogTemp, Warning, TEXT("GenerateMeshFromTriangles: Input Material (InMaterial) is null. Mesh section 0 might have default material."));// if (DefaultMaterial) ProceduralMesh->SetMaterial(0, DefaultMaterial);}
}

4. 在UE编辑器中创建基于“DrawMeshActor”的蓝图派生类“BP_DrawMeshActor”,再创建一个材质

在“BP_DrawMeshActor”事件图表中调用函数“GenerateMesh”来生成自定义网格体

最终效果如文章开头所示。

http://www.dtcms.com/wzjs/58599.html

相关文章:

  • 塘沽做网站的公司镇海seo关键词优化费用
  • 免费建立教育网站免费浏览外国网站的软件
  • 做外贸 需要做网站吗seo研究中心好客站
  • 网站流量优化百度账号登录中心
  • 济宁哪里做网站最便宜汽车网络营销的方式有哪些
  • 行业平台网站建设网络销售怎么才能找到客户
  • wordpress网站维护页面关键词优化app
  • 网站排名靠什么化妆品推广软文
  • 网站系统升级建设合同上海比较大的优化公司
  • 个人网站做企业网站chrome浏览器官网入口
  • 网站做推广 建设哪种类型合适外链代发公司
  • 自己做网站空间aso优化分析
  • 湘西州住房和城乡建设局网站百度扫一扫识别图片
  • 个人网站趋向搜索引擎优化策略
  • 网站建设实训意见和建议免费自媒体网站
  • 自己的网站做优化怎么设置缓存windows优化大师官网
  • 住建委官网首页百度关键词seo排名优化
  • 网站做反向代理后样式加载错误品牌推广方式
  • 在线看视频网站怎么做的深圳seo优化推广公司
  • 怎么做网站编程靠谱的代运营公司
  • 网页制作公司需要什么资质站长工具seo综合查询columbu cat
  • 青海省住房城乡建设厅网站首页营销型网站的分类
  • 上饶网站制作济南seo优化公司助力排名
  • 找公司做网站先付全款吗搜索引擎营销是什么意思
  • 百度用户服务中心官网优化营商环境
  • wordpress新闻抓取插件seo综合查询平台官网
  • 创意品牌型网站百度经验悬赏令
  • 制作网站需要什么知识销售外包公司
  • 广州住建官方网站关键词优化计划
  • 网站怎么做友链百度竞价点击软件