[UE4] C++에서 동적 메쉬 생성

10465 단어 C++위 4게임

환경


  • OS: 우분투 16.04 LTS
  • UE4 버전: 4.22.1
  • 편집기: Visual Studio Code

  • 소개



    UE4에서 메쉬를 동적으로 생성할 필요가 있어, 이하의 기사를 참고로 구현했으므로, 그 수법을 소개한다.
  • UE4: ProceduralMeshComponent 입문
  • UE4/C++: 메쉬의 머티리얼이나 텍스처를 C++ 코드로 제어하는 ​​방법

  • 결과(재생 → 동적 메쉬 생성)



    동적 메쉬 생성 방법


  • <프로젝트 이름>.Build.cs의 PublicDependencyModuleNames.AddRange에 "ProceduralMeshComponent"추가

  • 다음의 C++ 액터 클래스를 작성한다(헤더는 디폴트인 채로 문제없다)

    MyActor.cpp
    #include "ProceduralMeshComponent.h"
    
    AMyActor::AMyActor()
    {
        UProceduralMeshComponent* mesh; // 動的メッシュを保持するポインタ
        mesh = CreateDefaultSubobject<UProceduralMeshComponent>(TEXT("generated-mesh")); // 動的メッシュ生成
        RootComponent = mesh; // RootComponentに設定する
    
        FString materialPath = "/Game/M_Tech_Hex_Tile_Pulse";
    
        // メッシュにマテリアルを設定する
        // マテリアルインスタンスを利用するときはUMaterialをUMaterialInstanceに変更する
        mesh->SetMaterial(0, Cast<UMaterial>(StaticLoadObject(UMaterial::StaticClass(), nullptr, *materialPath))); 
    
        // 動的メッシュ用の変数
        TArray<FVector> vertices; // 頂点群
        TArray<int32> indices; // インデックス群
        TArray<FVector> normals; // 法線群(今回は空っぽのままだが、立体を作成するときには設定しないとエッジ部分が変になる)
        TArray<FVector2D> texcoords0; // テクスチャー座標群
        TArray<FLinearColor> vertex_colors; // 頂点カラー群(今回は空っぽのまま)
        TArray<FProcMeshTangent> tangents; // 接線群(今回は空っぽのままだが、立体を作成するときには設定しないとエッジ部分が変になる)
    
        // 頂点群設定
        vertices.Add(FVector(-600, 200, 400)); // 左上
        vertices.Add(FVector(-600, 200, 200)); // 左下
        vertices.Add(FVector(-600, 400, 200)); // 右下
        vertices.Add(FVector(-600, 400, 400)); // 右上
    
        // インデックス群生成(三角形ポリゴンを反時計周りに設定)
        // 1つ目の三角形ポリゴン
        indices.Add( 0 );
        indices.Add( 1 );
        indices.Add( 2 );
        // 2つ目の三角形ポリゴン
        indices.Add( 2 );
        indices.Add( 3 );
        indices.Add( 0 );
    
        // テクスチャー座標群設定
        texcoords0.Add(FVector2D(0, 0)); // 左上
        texcoords0.Add(FVector2D(0, 1)); // 左下
        texcoords0.Add(FVector2D(1, 1)); // 右下
        texcoords0.Add(FVector2D(1, 0)); // 右上
    
        // メッシュ生成
        mesh->CreateMeshSection_LinearColor( 0, vertices, indices, normals, texcoords0, vertex_colors, tangents, true );
    }
    


  • 동적 메쉬를 생성하는 cpp 파일에 다음을 기술하여 동적 메쉬를 생성한다.
    AMyActor* a = GetWorld()->SpawnActor<AMyActor>(FVector(0,0,0), FRotator(0,0,0));
    
  • 위의 프로세스를 블루프린트에서 호출

  • 결과



    결과는 시작 부분에 표시된 이미지와 같습니다.

    마지막으로



    인간이나 물건을 데이터화&해석해 보고 싶다는 분.
    3D 기술과 심층 학습을 결합하여 뭔가 재미있는 서비스를 만들어보고 싶다! 라는 분.

    당사에서는 함께 일해 주는 동료를 대모집하고 있습니다.

    흥미가 있는 분은 하기 링크로부터 부디 응모해 주세요!
    htps // 아보 t. 자 t. 이 m/레c루이 t/

    참고



    UE4: ProceduralMeshComponent 입문
    UE4/C++: 메쉬의 머티리얼이나 텍스처를 C++ 코드로 제어하는 ​​방법

    좋은 웹페이지 즐겨찾기