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

哪家网站设计比较好免费源码资源源码站

哪家网站设计比较好,免费源码资源源码站,罗湖专业做网站公司,wordpress 4.3自动草稿效果 如下所示,通过“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/200332.html

相关文章:

  • 服务一流的做网站标题关键词优化报价
  • 快三免费直播app关键词搜索优化
  • 用asp做的网站打开页面很慢国内好用的搜索引擎
  • 专注做一家男生最爱的网站搜索引擎排名优化
  • 市场咨询公司排名思亿欧seo靠谱吗
  • 做网站价格哈尔滨优化调整人员流动管理
  • 医疗网站建设cnzz数据统计
  • 佛山做网站哪家公司好关键词的选取原则
  • 东莞清溪镇做网站公司小红书外链管家
  • 做ppt用什么网站搜索风云榜入口
  • 政府门户网站源码广州头条今日头条新闻
  • 企业网站用什么系统好推广普通话绘画
  • 辽宁丹东建设厅网站佛山关键词排名工具
  • 黄冈论坛遗爱网贴吧东莞百度seo新网站快速排名
  • 网站推广的基本方法网络推广外包流程
  • 松江品划网络做网站百度seo关键词优化市场
  • 产品网站建设自己的网站怎么样推广优化
  • 公司如何做网站不发钱全网推广费用
  • 怀化公司做网站精准引流推广
  • 国内优秀门户网站设计网络运营师资格证
  • 安阳网站推广公司网站诊断工具
  • 云南省公共资源交易中心十堰seo排名公司
  • 企业网站建设内容外贸网站建设设计方案
  • 做电商的常去网站百度网站优化公司
  • 昆明新闻最新消息今天优化seo设置
  • 河北网站建设价格低百度蜘蛛池自动收录seo
  • 有没有专门做美食的网站2022年国际十大新闻
  • 如何制作营销网站搜索引擎下载入口
  • 微信辅助网站制作什么是网络营销策略
  • 建设网站需要设备搜索量查询