Second Life in Japan
登録
Advertisement

Scripters_cafeログ


08/08/09[]

サーバーのバージョン1.24で追加されたllDetectedTouchUV()とllDetectedTouchST()をプレビューグリッドにて試しました。

この2つの関数は、それぞれ「タッチしたプリムの面上の位置」を取得するための関数で、UV座標またはST座標にて位置を取得できます。


UV座標とは、プリムの面に貼り付けられているテクスチャを基準とした座標です。

ST座標とは、プリムの面上での(相対)座標です。ここで相対と書いたのは、プリムの大きさなどには依存せず、面を構成するポリゴンの頂点に対する相対位置を表したものだからです。



UV座標とST座標については、以下の比較図で違いを説明します。


縮尺1.0、オフセット0[]

BOXプリムに、テクスチャの縮尺を1.0、オフセットも0でそのままテクスチャを貼り付けた場合は、UV座標とST座標は同じになります。

縮尺1


縮尺2.0、オフセット0[]

縮尺を2.0に変更すると、UV座標の幅が2倍になります。オフセットを変更していないので、プリムの面の中央が (0.5, 0.5) になり、X方向、Y方向にそれぞれ-0.5~1.5の範囲の座標になります。

これに対してST座標は縮尺に依存せず、0.0~1.0の範囲の座標のままです。

縮尺2


縮尺2.0、オフセット0.5[]

縮尺を2.0、オフセットを0.5とすると、テクスチャが左下方向にずれます。

こうすると、UV座標の原点(0, 0)が左下にくるようにできます。縮尺が2.0なので、X座標、Y座標の範囲は0.0~2.0になります。

これに対してST座標はテクスチャの縮尺やオフセットにはせず、0.0~1.0の座標のままです。

縮尺2.0、オフセット0


縮尺1.0、回転90度[]

次に縮尺を1.0に戻し、テクスチャを90度回転させました。

こうすると、UV座標も左回りに90度回転します。

これに対してST座標はテクスチャの回転には依存しません。

回転90度


Top Shear 0.5[]

次にプリムを変形させてみました。(テクスチャの縮尺は1.0、オフセットは0です)

プリムを変形させても、UV座標はあくまでテクスチャ上の座標であるため、プリムの変形には依存しません。

またST座標についても、プリムの面上での相対座標ですから、プリムの変形には依存しません。

Top Shear 0


Taper 1.0[]

次にTaperを使ってプリムを変形させてみました。

この場合、図を注意深く見て頂くと分かりますが、プリムの変形に対して、テクスチャの変改が均一ではありません。(左上部分のポリゴンだけが小さくなっています)

UV座標はテクスチャが基準となりますので、下の図で見えている三角形(もともとは四角形の右下部分)部分のテクスチャ上での座標になります。

ST座標については、若干直感とずれる結果ではありますが、UV座標と全く同じ結果になります。これは、ST座標が「面の頂点基準」ではなく、あくまで「面を構成するポリゴンの頂点基準」の座標であり、Taperを使うとポリゴンが不均一に変形してしまうからです。結果として縮尺やオフセットを用いないUV座標と同一になります。

Taper 1


これらの関数の応用方法[]

多数のボタン系のUIをプリムを増やさずに表現できるといった使い方も考えられますが、ボタンの座標範囲の判定方法などを考えると、それなりに面倒なプログラミングになってしまうことも考えられます。

いずれにしても、使い方はこれからいろいろと研究する必要があると思われます。

Advertisement