MonoGameで使う3DモデルをFusion360で作成する
準備[編集 | ソースを編集]
MonoGameの3D座標系は「Yアップ右手座標系」となっているので、Fusion360も作図前にこの設定に変更する。これを忘れると変な向きで表示されて残念なことになる。
- Fusion 360の環境設定
- 「一般」「既定のモデリング方向」→「Y(上方向)」
作成[編集 | ソースを編集]
- Fusion360でモデルを作りA360に保存する
- A360でfbxファイルにエクスポートする
- MonoGame Pipelineでfbxファイルをxnbファイルに変換する
表示[編集 | ソースを編集]
- Mesh.Draw()での表示は問題なし
バーテックスバッファの取得[編集 | ソースを編集]
meshPart.VertexBuffer.GetData<Vector3>()でバーテックスバッファを取得すると値が1/10になってる。
- A360が吐き出すfbxファイル中の「lcl scale」が「10」になってるせいだと思われる。
- MonoGameのModelクラスからscaleの値を取得する方法がわからない(ない?)
- Fusion360でScaleを変更する方法もわからない(ない?)
- 応急処置
VertexBuffer.GetData<Vector3>()で取得したバーテックス配列の中身を決め打ちで10倍にしてしまう。
var allVertex = new Vector3[meshPart.NumVertices];
meshPart.VertexBuffer.GetData<Vector3>(
meshPart.VertexOffset * declaration.VertexStride + vertexPosition.Offset,
allVertex,
0,
meshPart.NumVertices,
declaration.VertexStride);
for (int i = 0; i <= allVertex.Length; ++i)
{
allVertex[i] = allVertex[i] * 10;
}
- 備考
ゲームではバーテックスバッファを書き戻したいことはあまりないかもしれないが、物理演算を使ったシミュレーターなどで当たり判定を厳密にやりたい場合なんかはバーテックスバッファを取得してレイキャスティングを行うと結構いい感じになる。