MonoGameで使う3DモデルをFusion360で作成する

提供: MonoBook
2018年1月23日 (火) 07:42時点におけるimported>Administratorによる版 (→‎バーテックスバッファの取得)
ナビゲーションに移動 検索に移動


準備

MonoGame3D座標系は「Yアップ右手座標系」となっているので、Fusion360も作図前にこの設定に変更する。これを忘れると変な向きで表示されて残念なことになる。

Fusion 360の環境設定
  • 「一般」「既定のモデリング方向」→「Y(上方向)」

作成

表示

  • 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;
            }


備考

ゲームではバーテックスバッファを書き戻したいことはあまりないかもしれないが、物理演算を使ったシミュレーターなどで当たり判定を厳密にやりたい場合なんかはバーテックスバッファを取得してレイキャスティングを行うと結構いい感じになる。