"そこ"から這い上がるブログ

プログラミングと電子工作が趣味でそこら辺のことを備忘録的に書きつつ這い上がっていこうといったブログ。そこ這い。

オリジナルのSphereを作りたくて苦労した話

以前頂点数を変えられるPlaneを作りましたが、今回はSphereを作りました。
どうやって作ったかなどは、ひとまず置いといて(気が向いたら更新します)

頂点法線ベクトル(mesh.normals)の設定で悩んだのでメモします。

OriginalSphereを作るまでのざっくりとした流れは

・Mesh.verticesを設定

・(Mesh.uvを設定)
・Mesh.trianglesを設定

・Mesh.normalsを設定

という感じになりますが、今回てこずったのはMesh.RecalculateNormals()を呼ぶタイミングです。

上手くいった手順は
1.Mesh.trianglesを設定
2.Mesh.RecalculateNormals()
3.Mesh.normalsを設定
この123の順序でやればうまくいきました。RecalculateNormalsを呼ぶ前にnormalsにアクセスするとnormalsを正しく設定できませんでした。ちなみに頂点法線は球の中心から各頂点に向かってのベクトルです。

f:id:knasa:20180203060431j:plain

上の写真は123順番を変えながら作成したものになります。
灰色になっているものはnormalsが空です。また、Mesh.Recalculateをしただけだと接続部分がおかしくなってしまいました。左上はnormalsの設定はしていないけどRecalculateNormalsを呼ぶ前にMesh.normalsにアクセスしています。

勝手な考察としては先にMesh.RecalculateをしておかないとMesh.normals配列が作成されないんじゃないかなと。

そもそも頂点の設定の仕方なども原因に含まれているかもしれないので一概には言えないですが、trianglesを設定したらすぐRecalculateNormalsをするのがよさそうです。