手順の図解
- 凡例
1)壁判定必要性の確認の例
壁判定を行わず、新視点位置に移動します。
2)移動前の視点位置での確認の例
移動前、接近猶予距離以内に面(壁)があるので、面(壁)より、接近猶予距離離れた位置を現視点位置とする。
3)移動後の視点位置の確認の例
移動後、接近限界距離以内に面(壁)があるので、現視点位置のままとする。
移動前の位置調整により、壁面に沿って、ジグザグに移動することもできます。
壁判定の処理は、「3D-Gallery\SCENE\CustomSceneGraphic.scurl」のmovement-eyepointメソッドで行っていますので、参照してみてください。
平面との距離計算
次に、平面との距離計算についても触れておきたいと思います。
CurlのSceneには、get-intersectionsメソッドがあり、交差する面と交点座標を得ることができるのですが、簡易実装となっているようです。交差する面は得られるのですが、交点座標は、斜めの面の場合、その面が内接する直方体の最も近い面での交点座標となり、実際の交差面との交点は得られません。
そのため、「Curl 3D Gallery」では、get-intersectionsメソッドで交差面を求め、交点座標は、交差面との幾何計算により、厳密に求めるようにしています。
ソースコードは、Geom. calc-coords-plane-intersectionメソッドになります。具体的には、交差面の平面方程式を求めます。求められた平面方程式との交点座標を求め、交点座標が、交差面に内包するか否かで、実交点を求めています。
今回は、具体的なソースコード説明はありませんでしたが、「Curl 3D Gallery」の解読や、他への応用のお役にたてれば幸いです。