FANDOM


Scripters_cafeログ


08/08/09 編集

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


llDetectedTouchPos()は、プリムの面上でタッチされた位置をリージョン座標で取得できます。

llDetectedTouchNormal()は、プリムの面上でタッチされた位置のポリゴンに対する法線ベクトルを取得できます。


llDetectedTouchPosとllDetectedTouchNormalを使ってレーザーポインタ 編集

これまでオフィスアワーにてカメラ位置の取得を応用したレーザーポインタなどの話題が出ていましたが、今回はタッチした位置とその場所での法線ベクトルを使ったレーザーポインタを作ってみよう、ということで早速作ってみました。

TestingPos&Normal

この画像はFakeさん作のポインタで、タッチした面上の座標と法線ベクトルをそれぞれllDetectedTouchPos/llDetectedTouchNormalで取得し、それをポインタオブジェクトに通信で送信し、ポインタオブジェクトは受け取った座標・向きに移動するというものです。


法線ベクトルの扱いのちょっとした勘違い 編集

このポインタを作る途中で、法線ベクトルの扱いを少しだけミスしていました。法線ベクトルは向きを表すものですが、rotationや、rotationのEuler表現とは全く異なります。 最初(あまり考えずに)法線ベクトルの値をllEuler2Rotしてオブジェクトの向きに適用してしまっていました。


法線ベクトル→回転の変換 編集

法線ベクトルから、オブジェクトの向きを知るためには、何らかの方向で変換を行う必要があります。

方法はいくつかあると思いますが、<0,0,1> ベクトルからの回転を求めるのが手軽かもしれません。法線ベクトルが normal_vec 変数に格納されているとして、以下のようにして回転を得ることができます。

rotation rot = llRotBetween( <0,0,1>, normal_vec );



【参考】

広告ブロッカーが検出されました。


広告収入で運営されている無料サイトWikiaでは、このたび広告ブロッカーをご利用の方向けの変更が加わりました。

広告ブロッカーが改変されている場合、Wikiaにアクセスしていただくことができなくなっています。カスタム広告ブロッカーを解除してご利用ください。

FANDOMでも見てみる

おまかせWiki