Top > C++-ダイナミックメッシュ

C++ - ダイナミックメッシュ

動的にメッシュを生成する

UE4:ver.4.7.2


参考

テスト

動的にポリゴン分割

  • Wireフレーム描画。
    ue4-dynamic_mesh.gif
  1. ベースはnkdさんのダイナミックメッシュ。ポリゴンを表示できるところまで。
    http://qiita.com/nkdtr/items/c2d055e349a2d03b5175
  2. 「UMyPrimitiveComponent」でProxyクラスを保持するようにしておく
     FPrimitiveSceneProxy* UMyPrimitiveComponent::CreateSceneProxy()
     {
       m_proxy = new FMySceneProxy(this);
       return m_proxy;
     }
  3. 「UMyPrimitiveComponent」クラスにBPから分割数を設定するメソッド追加
     UFUNCTION(BlueprintCallable, Category=Dynamic)
     void SetDivideNum(int32 num);
    • BlueprintCallable: BPからアクセスできる
    • Category: BP上で候補を出す時のグルーピング名
  4. メソッドを実装
     void UMyPrimitiveComponent::SetDivideNum(int32 num)
     {
       // proxyクラスに分割数の変数を用意しておく
       m_proxy->m_divide = num;
       
       // Dirtyフラグを立ててポリゴン作りなおす
       MarkRenderDynamicDataDirty();
     }
  5. 「FMySceneProxy」のCreateMeshでいい感じに
     void FMySceneProxy::CreateMesh(FDynamicMeshBuilder &mesh_builder) const
     {
       if (m_divide <= 2) return;
       
       mesh_builder.AddVertex(FVector(0, 0, 0), FVector2D(0, 0), FVector(1, 0, 0), FVector(1, 1, 0), FVector(0, 0, 1), FColor::White);
       
       for (size_t i = 0 ; i < m_divide ; ++i) {
         float rad = FMath::DegreesToRadians(360.0f / m_divide * i);
         float s = sinf(rad);
         float c = cosf(rad);
         
         mesh_builder.AddVertex(FVector(s * 100, c * 100, 0), FVector2D(s, c), FVector(1, 0, 0), FVector(1, 1, 0), FVector(0, 0, 1), FColor::White); 
       }
       for (size_t i = 1 ; i < m_divide ; ++i) {
         mesh_builder.AddTriangle(0, i, i+1);
       }
       mesh_builder.AddTriangle(0, m_divide, 1);
     }
  6. Visual Studioでビルドしてエディターを立ち上げ直す。
  7. BPで適当に組む
    ue4-cpp-dynamic_mesh01.png

ソースコード

fileMyPrimitiveComponent.cpp
fileMyPrimitiveComponent.h
fileMySceneProxy.cpp
fileMySceneProxy.h


添付ファイル: fileMySceneProxy.h 250件 [詳細] fileMySceneProxy.cpp 257件 [詳細] fileMyPrimitiveComponent.h 335件 [詳細] fileMyPrimitiveComponent.cpp 264件 [詳細] fileue4-cpp-dynamic_mesh01.png 228件 [詳細] fileue4-dynamic_mesh.gif 438件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2015-03-21 (土) 02:10:11 (1936d)