クォータニオンを使用して、3D 空間で球を回転させました。
球体は p = (0, 0, 0) に配置されます
問題は、カメラに最も近い点や面を見つける方法です。
クォータニオンを使用して、3D 空間で球を回転させました。
球体は p = (0, 0, 0) に配置されます
問題は、カメラに最も近い点や面を見つける方法です。
これは簡単です。球には、中心からの距離が特定の値 (半径) を持つすべての点の集合によって形成されるという優れた特性があります。
OpenGL では、オブザーバーが原点にあると想定しています。オブジェクトは、線形変換 (モデルビュー) によって個々の座標空間に配置されます。したがって、私たちがしなければならないことは、球のローカル座標系でオブザーバーの位置を見つけ、ベクトルをローカル空間オブザーバーの位置に向かって単位長さに向かって正規化することだけです。
変換は完全なモデル ビュー マトリックスMVです。クォータニオンqは、行列Rにマッピングできます。q、つまりRがそれ自体のローカル フレーム内での球の回転を定義すると仮定すると、ビュー スペースへの全体的な変換は次のようになります。
p_view = MV · R · p_local
ここで、pは球の点のセットです。
したがって、球のフレーム参照に対してローカルなオブザーバーは次の場所にあります。
o_local = inv(MV · R) · (0,0,0,1)
最後に、ローカル フレームの位置ベクトルを観測者に向けて球の半径に再スケーリングする必要があります。
o_direction_on_sphere = radious · o_local / len(o_local)