Saqoosha

2022.08.01

Diary

SCNNode の physicsBody に適切な値をセットすると物理シミュが走るとこまでは非常に簡単でよかったのだがそこから physicsBody に nil を設定して物理シミュをやめてから position なり rotation なりのプロパティを設定しても反映されたりされなかったりという謎現象にぶちあたり1日溶かしたのだけど結局のところ SCNNode の transform 系プロパティは内部に dirty フラグがあって同じ値を設定すると反映されないかつ物理シミュでの姿勢行列は別のプロパティに格納されてるので元の transform 値と全く同じ値を設定すると反映されなくって画面位置は物理シミュの位置のままということっぽい。

2022.08.02

Diary

SceneKit の物理エンジンにはなぜか spring joint がないのでなつかしのフックの法則を調べながら(調べるまでもなかったけど)実装するなど。

2022.08.03

Diary

SCNMaterial の shader modifier はちょっとだけ頂点位置を動かすとかってのがさくっと書けてよさげなんけどあらかじめ定義してあるとドキュメントにある uniform 変数たちがなぜか使えたり使えなかったりするのがよくわかんなくていろいろいじって動作を調べたところ shader modifier は Metal と GLSL 両方で書けることになってておそらく shader のテキストに出てくるキーワードをひっかけてどっちで書かれてるかを判断してるっぽくてそのせいで特に短いシェーダーコードはちょっとしたことで Metal か GLSL が切り替わって uniform 変数の名前が変わるのが原因くさい。