zmは未知じゃないのかって?あー、言い忘れてました。今回の丸は、モデル空間上ではXY平面上にあることにしましょう。zmはzm=0の定数です。wsを求めたら、zsとwsは単に便宜上入れた要らない変数なので捨ててしまいましょう。モデル空間上のマウスの座標である、xmとymを使えば、無事円との当たり判定ができます。はいおしまい、QED。...と言いたい所だが、この行列は実際一体どう解いたらいいのか?右にも、左にも未知変数があります。逆行列を一発キメたら終わり、みたいな、そういう生ぬるい式ではなさそうなのは確かです。いって、プログラムに組み込んで自動で解かなければならない以上、「頑張って手動で連立方程式を変形して解く」みたいな高校生的解法は使えません。頑張って式を変形するぞいまず確認です。行列とベクトルの掛け算とは、行列の各行ベクトルを、もう片方のベクトルのそれぞれの値で重み付けをして足し合わせることだと見なすことができます。左辺まず左辺をこれを使って変形します。zが掛かっていて複雑なので、wをくくりだします。赤線を引いた未知変数がだいぶ減って気楽な感じになりましたが、まだベクトルの中と外に未知変数が入っていて扱い方がわかりません。これをこんな感じで2つのベクトルの和に変形します。既知のベクトル」の和」に変形できました。なんとなく、これなら扱えそうな気がしてきません?最後の一捻りさっき変形した右辺と左辺の式を使って、再度等式を書いてみます:するとただの和なので、簡単に未知変数を左辺だけに集約することができます:で、ここで最後の一捻りです。さっきの行列とベクトルの掛け算とは、行列の各行ベクトルを、もう片方のクトルのそれぞれの値で重み付けをして足し合わせることだと見なすことができます。いうのを、今度は逆回しにします。こんな感じでもう一度「行列とベクトルの積」に書き戻します:ここまでくれば、もう簡単。赤線が引いてある未知変数が詰まってるベクトルの値は、逆行列を掛ければ一発で求められます。長かったですけど、纏めてみると結構綺麗な解法のような気がする。JavaScriptで最小のデモ作った「季節の歯車」だとここで実装してるんですが、流石に他のコードも多くてわかりにくいだろうという事で、この当たり判定の部分だけ切り出したサンプルを作ってみました:github.com/ledyba/__sample__3d-picking-without-shadersパースのついた円とマウスの当たり判定をする実際に動いてるデモのページはこちら。