✈️

Unity with ARFoundationでスマホで取得した平面をOBJ出力する

2022/03/12に公開

スマホで取得した平面を出力したい

何でもいいからとりあえず題目のことをしたいというせっかちさんは↓からどうぞ
※動確はしていますが、細かいところは自分で解決してください。
https://github.com/SohMitian/ObjExp

コード解説

回転角

これ重要
角度を計算しないとオブジェクトが2個以上だった時に水平に突っ伏します。

// 回転反映
Vector3 RotateAroundPoint(Vector3 point, Vector3 pivot, Quaternion angle)
{
    return angle * (point - pivot) + pivot;
}

スケール

これも重要
スケールを計算しないとオブジェクトが2個以上だった時にバウンディングボックスが重なります。

// スケール反映
Vector3 MultiplyVec3s(Vector3 v1, Vector3 v2)
{
    return new Vector3(v1.x * v2.x, v1.y * v2.y, v1.z * v2.z);
}

ポジション

これも重要
ポジションを計算しないとオブジェクトが2個以上だった時に同じ位置で重なります。

v += mf.gameObject.transform.position;

以上を考慮した頂点算出

//頂点情報
foreach (Vector3 vx in msh.vertices)
{
    Vector3 v = vx;
    v = MultiplyVec3s(v, mf.gameObject.transform.lossyScale);
    v = RotateAroundPoint(v, Vector3.zero, mf.gameObject.transform.rotation);
    v += mf.gameObject.transform.position;
    v.x *= -1;
    sb.AppendLine("v " + v.x + " " + v.y + " " + v.z);
}

Discussion