【VR,OculusGo,Unity】素人がメッシュカットについて実際に触って理解する Part5
今回でPart5なかなか手強い。
さてさて前回の記事はグダグダだったが、Planeの線とMeshの交点にSphereを配置することができた。
しかし、スクリプト丸写しで全然理解が深まっていない。
まずはスクリプトを丁寧に読んでみることにする。
Planeとの交点の理解を深める
参考
実践
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; //なぜ回転させるかわからん
何もいじってない時に出力したログ
group2に2つ、group1に1つ振り分けられている。
group1がtrueなので法線は正面からみて右側に向いてることがわかる。
-90にしてみる。
normal = (Quaternion.Euler(0f, 0f, -90.0f) * p1).normalized;
おおおお。グループ分けが逆転して、g1に2つ、g2に1つ振り分けられた。
法線を回転させないとどうなるんだろうか。
normal = p1.normalized;
おおお?全部true、法線の向き側に配置された。
法線がどっちに向いてるか可視化したい。と思ったら。Sceneビューですでに可視化されていた。
めっちゃ細い青い線。
最初から気づいていれば早かった!CreatePlane.csも全然理解してなかった。
まぁ結果良ければ全て良し!次行こう!