int pcopen(string filename, string channel, int shaded, ...)
int pcopen(string filename, string Pchannel, vector P, float radius, int maxpoints, ...)
int pcopen(string filename, string Pchannel, vector P, string Nchannel, vector N, float radius, int maxpoints, ...)
int pcopen(int opinput, string Pchannel, vector P, float radius, int maxpoints)
この関数は、ポイントクラウドファイル(.pc
)を開いて、そこに含まれているポイントへのアクセスのキューを作成します。
そして、pcunshadedやpciterateによってポイントを繰り返すことができます。
この関数の最初の2つのバージョンは、Pchannelで見つかったポイントポジションに基づいて特定の位置Pからradius以内のポイントのキューを作成します。
指定した半径内で一番近いmaxpoints個のみのポイントのキューが作成されます。
pcopen()
とpciterate()
を使用すれば、距離が近い順にポイントが並べ替えられます。
ファイル名にop:
の構文を使用すれば、OPコンテキストでSOPジオメトリを参照することができます。
Pchannelパラメータは、検索されるポジションを含むテクスチャ内のチャンネルを意味します。
Pchannelが既に存在すれば、読み取り専用になります。
その後にpcexportでチャンネルを使用しようとすると、pcunshadedは失敗します。
オプションで、Nchannelは方向チャンネルを指定し、Nベクトルは検索方向を指定します。
同じ方向(つまり、dot(N, Npoint) > 0
)を向いたポイントのみがキューになります。
いくつかの場合では、ポイントクラウドにチャンネルを追加する必要があります。チャンネルの追加は、pcexportとpcunshadedを使います。 ほとんどの場合は、ポイントクラウドのすべてのポイントに対して余分にチャンネルデータを追加する必要はありません(例えば、ポイントクラウドの一部のみがカメラのフラスタム内にある場合)。 これらの場合では、近接検索で返されたポイントにのみチャンネルデータを追加するのが一番良いです。 しかし、時々、ポイントクラウド内のすべてのポイントが、意味のある検索をする前に余分なチャンネルデータを受け取らなければなりません(例えば、ポジションチャンネルを追加する時)。 これらの場合では、この関数の3番目のバージョンを使って、あるチャンネルchannelのシェーディングされたポイント(shaded != 0)またはシェーディングされていないポイント(shaded == 0)すべてのキューを作成することができます。 <<channel>が存在しなければ、すべてのポイントがキューになります。 この関数は、最初の2つの関数とは違って、channelをロックしません。
"prefix"
文字列パラメータを追加して、その後にチャンネルプリフィックス文字列を指定すれば、タイル化されたブロックファイルを参照することができます。
Note
事前ロードオプションは、全体のポイントクラウドをメモリに読み込みます。このオプションを無効にすると、ポイントクラウドはタイルキャッシュを使用します。
Examples ¶
近接検索を実行します。
int handle = pcopen(texturename, "P", P, maxdistance, maxpoints); while (pcunshaded(handle, "irradiance")) { pcimport(handle, "P", cloudP); pcimport(handle, "N", cloudN); ir = computeIrraciance(cloudP, cloudN); pcexport(handle, "irradiance", ir); } pcfilter(handle, radius, "irradiance", ir);
全体のチャンネルのシェーディング。
vector sample; int rval, handle; handle = pcopen(texturename, "P", 0); while (pcunshaded(handle, "P")) { sample = set(nrandom("qstrat"), nrandom("qstrat"), 0.0); rval = sample_geometry( sample, sample, Time, "scope", getobjectname(), "pipeline", "displacement", "P", pos); if (rval) rval = pcexport(handle, "P", pos); } pcclose(handle);
フィルタリングされたポイントに対して、ポイント法線とpcopen()
に渡された法線の間の最小の内積を制御する。
// これは、dot(N, Npoint) > 0.8のポイントのみを返します。 int handle = pcopen("test.pc", "P", P, "N", N, 1e6, 100, "ndot", 0.8);
See also | |
file | |
ptcloud |
|