ぼくの息抜き

ぼくの息抜き

気ままな二人が記事を書くことで息抜きしていくブログ

CSS MenuMaker

【VR,OculusGo,Unity】素人がメッシュカットについて実際に触って理解する Part5

f:id:bokunoikinuki:20180908232241p:plain

 今回でPart5なかなか手強い。

 

さてさて前回の記事はグダグダだったが、Planeの線とMeshの交点にSphereを配置することができた。

しかし、スクリプト丸写しで全然理解が深まっていない。

まずはスクリプトを丁寧に読んでみることにする。

Planeとの交点の理解を深める

参考

  1. 【Unity】メッシュカッターについて その3 - ぐーるらいふ

  2. 【Unity】メッシュカッターについて その2 - ぐーるらいふ

実践

33行目の関数。

CheckPlaneSide(plane, group1PosList, group2PosList); // 1.グループ分け

 引数はCheckPlaneSide(Plane plane, List<Vector3> group1 , List<Vector3> group2)

 前回の記事Part4で詰まったのがGetterを43行目でも作らないといけないというところ。ここでMeshのVector3での頂点座標を取得する。

var vertices = _createMesh.Vertices; // これもGetterを作らないといけない

頂点座標分foreachで繰り返す。

        foreach (var v in vertices)
        {
            // どちらかのグループに振り分ける
            if (plane.GetSide(v))
            {
                group1.Add(v);
            }
            else
            {
                group2.Add(v);
            }
        }

GetSideとは?

参考記事

Plane.GetSide - Unity スクリプトリファレンス

平面の表がどちらを向いているかを判断します。

よくわからん。

と思ったら参考記事2で絵付きで丁寧に教えてもらっていた。

内部的には
その頂点が法線方向にあればtrue。
無ければfalseなだけだ。

うーん!わかりやすい!

Planeの法線normalをCreatePlane.csで定義している理由がわかったかもしれない。

//CreatePlane.cs

normal = (Quaternion.Euler(0f, 0f, 90.0f) * p1).normalized;
//なぜ回転させるかわからん

何もいじってない時に出力したログ

f:id:bokunoikinuki:20180923065806p:plain

group2に2つ、group1に1つ振り分けられている。

group1がtrueなので法線は正面からみて右側に向いてることがわかる。

-90にしてみる。

normal = (Quaternion.Euler(0f, 0f, -90.0f) * p1).normalized; 

おおおお。グループ分けが逆転して、g1に2つ、g2に1つ振り分けられた。

f:id:bokunoikinuki:20180923070120p:plain

法線を回転させないとどうなるんだろうか。

normal = p1.normalized; 

f:id:bokunoikinuki:20180923070929p:plain

おおお?全部true、法線の向き側に配置された。

法線がどっちに向いてるか可視化したい。と思ったら。Sceneビューですでに可視化されていた。

f:id:bokunoikinuki:20180923073456p:plain

めっちゃ細い青い線。 

最初から気づいていれば早かった!CreatePlane.csも全然理解してなかった。

まぁ結果良ければ全て良し!次行こう!