|
C++ - ダイナミックメッシュ
動的にメッシュを生成する
UE4:ver.4.7.2
参考 †
テスト †
動的にポリゴン分割 †
- Wireフレーム描画。

- ベースはnkdさんのダイナミックメッシュ。ポリゴンを表示できるところまで。
http://qiita.com/nkdtr/items/c2d055e349a2d03b5175
- 「UMyPrimitiveComponent」でProxyクラスを保持するようにしておく
FPrimitiveSceneProxy* UMyPrimitiveComponent::CreateSceneProxy()
{
m_proxy = new FMySceneProxy(this);
return m_proxy;
}
- 「UMyPrimitiveComponent」クラスにBPから分割数を設定するメソッド追加
UFUNCTION(BlueprintCallable, Category=Dynamic)
void SetDivideNum(int32 num);
- BlueprintCallable: BPからアクセスできる
- Category: BP上で候補を出す時のグルーピング名
- メソッドを実装
void UMyPrimitiveComponent::SetDivideNum(int32 num)
{
// proxyクラスに分割数の変数を用意しておく
m_proxy->m_divide = num;
// Dirtyフラグを立ててポリゴン作りなおす
MarkRenderDynamicDataDirty();
}
- 「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);
}
- Visual Studioでビルドしてエディターを立ち上げ直す。
- BPで適当に組む

ソースコード †
MyPrimitiveComponent.cpp
MyPrimitiveComponent.h
MySceneProxy.cpp
MySceneProxy.h
|