はじめに
canvas上をクリックして、その点におけるローカル座標系の座標を取得する方法です。
アルゴリズム
モデルビュー行列を 、射影行列を とします。
まずは、ローカル座標系(オブジェクト座標系)から正規化デバイス座標系への行列 を求めます。
次にクリックされた点の座標が、canvasの左上隅原点で、右側にx+下側にy+という座標系(以下canvas座標系と呼ぶ)なのでこれを正規化デバイス座標系に直します。
クリックされた点のcanvas座標系での座標を 、正規化デバイス座標系での座標を とします。
また、canvasの幅、高さをとします。
(表示範囲はcanvas全体とします。なのでビューポートの原点はcanvas座標系で(0,0)、幅と高さはcanvasの幅と高さと等しいとします。)
見つかった交点を とします。
これらを正規化デバイス座標系に変換し(を掛ける)、最もz値が小さい点(一番手前)が求めるべき交点となります。