差分

ナビゲーションに移動 検索に移動

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

2,116 バイト追加, 2018年1月23日 (火) 02:44
ページの作成:「 == 準備 == MonoGame3D座標系は「Yアップ右手座標系」となっているので、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倍にしてしまう。

<source lang="csharp">
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;
}
</source>


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

[[category: MonoGame]]
[[category: Fusion 360]]
匿名利用者

案内メニュー