FANDOM


Scripters_cafeログ


08/03/29 編集

オフィスアワーの開始時に参加者が少なかったこともあり、お題リストには無かったのですが「Ground系関数って使ったことある?」という話になりました。

Ground系関数には以下のようなものがあります。


この中で「llGroundNormal」を実験してみることにしました。 この関数は、地面の特定位置にある「地面ポリゴン」の面の法線ベクトルを返します。

例えば以下のようにすると、スクリプトを入れたプリムのリージョン座標の真下にある地面ポリゴンの法線ベクトルを取得できます。

vector normal = llGroundNormal( ZERO_VECTOR );


取得した法線ベクトルを視覚的に表示する方法はいくつかありますが、単純にそのベクトルの方向にオブジェクトを向けるのであれば llLookAt を使うのが簡単です。

これ以外の方法として、法線ベクトルの向きからローテーション値を計算する方法もあります。今回はこちらの方法で実験してみました。 Z軸に相当するベクトル <0,0,1> を用意して、これを基準とした法線ベクトルの向きのrotation値を取得する関数llRotBetweenを使用しています。


default {
	touch_start( integer total_number ) {
		vector normal = llGroundNormal( ZERO_VECTOR );
		vector z_axis = <0,0,1>;
		rotation between = llRotBetween( z_axis, normal );
		llSetLocalRot( between ); 
	}
}

上のようなスクリプトを図のようなオブジェクトの青色の部分(子プリム)に仕込むと、タッチした時に真下にある地面ポリゴンの法線ベクトルの向きに青色部分のプリムが回転します。


Scripters cafe 20080404 01 llGroundNormal

llGroundNormalのテスト

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


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

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

FANDOMでも見てみる

おまかせWiki