ポイントクラウド


どうも篠島です。今回はポイントクラウドについて説明します。ポイントクラウドとは、大量のポイントです。別に大量でなく、2つや3つのポイントでもポイントクラウドです。要はただのポイントの集まりですね。

 

 

ポイントクラウドは関連するノードも複数あり最初は非常に難しく感じますが、理解してしまえば非常に役に立つツールになります。今回はこのポイントクラウドの概念について説明します。

Point Cloud OpenとはVOPノードであり、VEXコードだとpcopen()となります。VOPノードのPoint Cloud Openはただ単純に内部でpcopen()関数を呼び出しているだけで両者は全く同じものです。

Point Cloud Openはあるポイントから指定した距離内にあるポイントを特定の数だけ取り出し、データベース化します。下の図だと、赤いポイントがクエリーの位置で、この赤いポイントから一定の距離にあるポイント(赤と青のポイント)がリストアップされます。このデータベースの仕様は公開されていませんが、恐らく配列な様な物だと思います。
VOPノードもしくはWrangleノードでpcopen()を呼び出すと、それに応じてデータベースが作られ、そのデータベースにアクセスする用のハンドルが渡されます。複数Point Cloud Open した場合は、それぞれ異なるハンドルが渡されます。

 

このデータベースに自分で直接アクセスしてデータの読み書きをすることはできません。基本的にPoint Cloud Import ノード、もしくはVEXのpcimport() 関数を使ってデータを読み込みます。Point Cloud Import ノードによってデータが読み込めますが、どこのデータを読み込むかを自分で選ぶことはできません。Point Cloud Iterate、VEXだと pciterate() によって指定された場所からしかデータが読み込めないのです。なのでデータベースの全てのポイントからデータを取得したい場合は Point Cloud Import と Point Cloud Iterate  を交互に使ってやる必要があります。
Point Cloud Iterate はデータベースの次の場所へとポインタを動かし、まだデータベースにポイントリストが残っている場合は 1 を返し、何も残っていない場合は 0 を返します。

a

 

上の一連の処理はWhileループで簡単にできます。擬似コードによって簡潔にこれらの処理を書くと下のようなイメージになります。

5

 

今回はポイントクラウドの概念だけ説明したので、次回は実際にHoudiniを使って実例を作りたいと思います。