ソラマメブログ
SecondLife ウェブマガジン MagSL.NET
QRコード
QRCODE
Information
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。 解除は→こちら
現在の読者数 1人
プロフィール
gpapa
オーナーへメッセージ

2007年04月26日

スクリプトで重さを測る

物理属性で、コマもひと段落したが、その中で疑問点が出てきた。
セカンドライフ内の質量はどうなってるのだろうか?
そこで、体重計というか重量計を作ってみたくなった。
まずは、セカンドライフ内での重さの図り方。
llGetObjectMassを使用する。llGetObjectMassの引数はkeyidであるが、これは、touchとかcollition時にllDetectedKeyをcallすれば得る事が出来る。
試しに立方体で図ってみると、

 1m四方の立方体:10.000006リンデングラム
 素材によっては、重さは変わらない
素材による密度の違いが無い世界なので、リンデングラムは、何Kgなの?というのは意味のない事になってしまう。
水の密度を1g/cm3とすると、1m四方だと1000Kgなので、すべてが水の密度と仮定すると、

 1リンデングラム = 100Kg (あくまでも水の密度を基準の場合)

やはり体重計としては、Kgに換算して考えられた方が面白そうだなあ


#Touchするとその人の重さが表示。何かを載せたりぶつけると、そのオブジェクトの重さを表示するスクリプト
------------------------
integer index;
key kid;
default
{
state_entry()
{
}

touch_start(integer total_number)
{
for ( index = 0; index < 10; index++ ) {
kid = llDetectedKey(index);
if ( kid != NULL_KEY )
llSay(0, (string)llKey2Name(kid)+" = "+(string)llGetObjectMass(kid));
}
}
touch_start(integer total_number)
{
for ( index = 0; index < total_number; index++ ) {
kid = llDetectedKey(index);
if ( kid != NULL_KEY )
llSay(0, (string)llKey2Name(kid)+" = "+(string)llGetObjectMass(kid));
}
}
collision_start(integer total_number)
{
for ( index = 0; index < total_number; index++ ) {
kid = llDetectedKey(index);
if ( kid != NULL_KEY )
llSay(0, (string)llKey2Name(kid)+" = "+(string)llGetObjectMass(kid));
}
}
}  
Posted by gpapa at 07:07Comments(275)TrackBack(11)スクリプト

2007年04月21日

スクリプトでコマまわし:物理属性の衝撃!

なんという事だろう。今までの苦労が無駄に見える美しい解を見つけてしまった。
コマの回転をどのように減速させるかを、時間による減速、衝突による減速など、苦労しながら試行錯誤していたのが、すべて無駄だったのである。
まず、物理属性を持たせたコマを他のオブジェクトで回す事を考えた。
他のオブジェクトをコマに接続して、そのオブジェクトを回して、時間がたったら、ファントムにして影響を消す。→うまく行かない。ファントムになるたびに、外れる。リンクするとコマまでファントムに…
もしやと思い、回転させた後、llResetScript()を使用してみると、なんとちゃんと動作するではないか…
これまでの長いスクリプトとは打って変わって、シンプルなスクリプトで、ちゃんと動いた…
かなり衝撃!→もっと早く気づけよーという感じか。

--------------------------
default
{
  state_entry()
  {
  }
  touch_start(integer total_number){
    llTargetOmega(<0,0,1>, 100*PI, 1); //適当に回転スピード
    llSetTimerEvent(2.0);
  }
  timer() {
  llResetScript();
  }
}  
Posted by gpapa at 15:38Comments(383)TrackBack(1)

2007年04月14日

物理属性でこま回し

オブジェクトの属性で「物理」というのがある。
今までは、これをOFFにして、強制的にまわして、最後にパタンと倒れるだけというものだった。
この物理をONにしてびっくり。
セカンドライフ内の物理法則にしたがって、動くではないか。
ほんとにセカンドライフを作った人達は、すごい!
以前のコマだと重心が高くて、きちんと立たなかったので、重心を低くした。
新しいコマで、llTargetOmegaでまわして見ると、回ったぞー!
複数のコマをまわすと、ぶつかって跳ね返る所まで再現される…すごい!
難点は、倒れたまま回転すると、ころころ転がって、どこかへ行ってしまう。
しばらく探しても、見つからない事も…
あとは、どのように回転の強さを減らしてゆくかが問題。
摩擦係数や衝突時の衝撃により、回転を減らして行くとかすると、楽しそう。
どうやるのかは、まだ判らないが…
とりあえずは、衝突時に乱数で回転力を減らしてゆく程度しかできないだろうなあ。
  
Posted by gpapa at 21:15Comments(286)TrackBack(0)スクリプト

2007年04月11日

土地の購入をしてしまった

土地を購入してしまったあ~!
検索の土地売買タブで、検索して、色々な所の土地を見に行った。
よさそうな土地があったので、その周りを見ていて、ここが良いかなあと考えていて、土地情報を見ると…
売れていた…
どうりで、誰かがObjectを作っているわけだ…
また検索、放浪。きりが無いので、ついに、256sqmの土地をMainLandに購入してしまったあ。
土地に座って、ボーっとする。なんだか、気分が良い。わくわくする。楽しい。
隣には、きれいな噴水と虹がある。(逆は看板だが…)
その手前のなーんにも無い場所が、自分の土地。さあー。何をつくろうかなあー。
  
Posted by gpapa at 21:52Comments(202)TrackBack(2)

2007年04月11日

ひぐまJAPAN

SapporoのひぐまJAPANという所に行った。
2~3日前まで、看板しかなかったけど、見る間にきれいな建物がたった。
楽しい事ができるようになると良いなあ。期待。

/sapporo/118/66/0/
  

2007年04月10日

Tinyアバター

Tinyアバターに興味があり、購入してみた。
Tinyアバターって、ひざを追って座っているんだあ。
いったいどうすると、このように出来るのか、摩訶不思議である。
とてもかわいいが、Animationが良いように動かなかったり、不満点も。
  
Posted by gpapa at 07:38Comments(214)TrackBack(1)

2007年04月07日

調子が悪い

今日は、とってもシステムの調子が悪いようです。
テレポートも検索も出来ない状態です。
あきらめかな。  
Posted by gpapa at 00:18Comments(206)TrackBack(0)

2007年04月06日

スクリプトでこまを倒す2

こまを倒す時の方法。
結局、llSetRotは、rotationの中身を理解しなくても使えるように、座標系の変換関数が用意されている。
通常のVectorの値をセットして、llEuler2Rotでrotationに変換し、それをllSetRotの引数にすれば良いのであった。

rotation yoko = llEuler2Rot(<-PI_BY_TWO,0,0>); // 目的の角度をrotationに変換
llSetRot(yoko); //倒れる

1行目で、<-PI_BY_TWO, 0, 0>と、X軸を中心に-90度のみ回転とした。
PI_BY_TWOは、π(円周率割る2)で、単位がラジアン。
ラジアンは、その角度の時の円周(半径1の時)をあらわしている。
なので、360度は、円の円周になり、直径x3.14(PI) = 2 x PI という事になり、90度はPI/2という事になる。
DEG_TO_RADというのが用意されていて、Vectorに掛けると、Euler角になる。
<-PI_BY_TWO, 0, 0>
は、
<-90, 0, 0> * DEG_TO_RAD
と同じ事になる。これらは、変数への代入なしでも書けるので、1行で書くと、以下となる。

llSetRot(llEuler2Rot(<-90,0,0>*DEG_TO_RAD); //X軸を中心に-90度倒す

ちなみに、+と-は、右手を親指を伸ばした状態で握り、親指をXの正方向に向けた時、人差し指他が巻いている方向が+との事だった。
  
Posted by gpapa at 08:01Comments(18)TrackBack(0)

2007年04月05日

rotationってなに?

rotationの各要素はいったい何を表すのだろうか?
さっぱり判らないので、調べてみる。
オイラー座標系から変換しているて、回転する軸を変える事で
便利にあらわせるものなのかな?

http://www.mech.tohoku-gakuin.ac.jp/rde/contents/course/robotics/coordtrans.html
このページが勉強になったが、後は、パラメータを変えながらスクリプトで
動かしながらという感じだろうか。  
Posted by gpapa at 07:46Comments(2)TrackBack(0)スクリプト

2007年04月03日

無料のものが山のように…

無料のアバターや洋服などが数えられないほど…
ちょっと、途方にくれてしまう。
探すだけで、時間がどんどんすぎる。

/ecaz/0/200/0/
  
Posted by gpapa at 23:38Comments(144)TrackBack(2)アバター

2007年04月03日

スクリプトでこまを倒す

こまを倒してみる。
llSetRot(rotation rot);
これで倒れるようだが、今ひとつ納得できない。
rotationは、x,y,z,sとの事だが、sの意味がよくわからない。うーん。




--------------------------------
default
{
state_entry()
{

}

touch_start(integer total_number){
state roll_speed_2;
}
}

state reset_pos{
state_entry(){
llSetTimerEvent(2.0);
}
timer(){
llSetRot(<PI,0,0,0>); //modoru
llOwnerSay("Rot3="+(string)llGetRot());
}
touch_start(integer total_number){
state roll_speed_2;
}
}

state roll_speed_0{
state_entry(){
llOwnerSay("Rot="+(string)llGetRot());
llTargetOmega(<0,0,0>, PI, 1);
llSetTimerEvent(2.0);
}
timer(){
llSetRot(<PI_BY_TWO,0,0,1>); //taoreru
llOwnerSay("Rot2="+(string)llGetRot());
state reset_pos;
}
}

state roll_speed_1{
state_entry(){
llTargetOmega(<0,0,2>, PI, 1);
llSetTimerEvent(2.0);
}
timer(){
state roll_speed_0;
}
}

state roll_speed_2{
state_entry(){
llTargetOmega(<0,0,4>, PI, 1);
llSetTimerEvent(2.0);
}
timer(){
state roll_speed_1;
}
}
------------------------------------

#スクリプトの表示がうまく出来ません。改行が入ってしまう~。タブ&スペースがそのままで改行も入らないようにするには、どうすればよいのでしょうかー?  
Posted by gpapa at 00:43Comments(8)TrackBack(0)スクリプト

2007年04月01日

スクリプトで時間がたってからの処理

こまをまわして、時間がたつと、だんだん遅くなって、止まるというスクリプトを試す。
タイマーを使う場合には、
llSetTimerEvent(float sec);
を使う。
secで指定した時間経過後に、timer()が呼ばれる。
うーん。簡単で便利~。
次は、止まりそうになると、軸を変えてふらふら回り、最後に倒れる所までやりたいなあー。


--------------------------
default
{
state_entry()
{

}

touch_start(integer total_number){
state roll_speed_2;
}


}

state roll_speed_0{
state_entry(){
llTargetOmega(<0,0,0>, PI, 1);
}
touch_start(integer total_number){
state roll_speed_2;
}
}

state roll_speed_1{
state_entry(){
llTargetOmega(<0,0,2>, PI, 1);
llSetTimerEvent(2.0);
}
touch_start(integer total_number){
state roll_speed_0;
}
timer(){
state roll_speed_0;
}
}

state roll_speed_2{
state_entry(){
llTargetOmega(<0,0,4>, PI, 1);
llSetTimerEvent(2.0);
}
touch_start(integer total_number){
state roll_speed_1;
}
timer(){
state roll_speed_1;
}
}

--------------------------
  
Posted by gpapa at 22:50Comments(354)TrackBack(0)スクリプト

2007年03月30日

フリーのアバター

フルメタルドラゴンAVというのを見つけたので、着てみた。
飛ぶとジェット音と煙がでたり、行き交う人に「Cool Full Metal Dragon AV!」と言われたりしたが、表情も乏しく、動作もぬいぐるみを着たようになってしまうので、今ひとつ。
Shapeから変わる変なアバターは無いのかなあ?

  
Posted by gpapa at 23:57Comments(20)TrackBack(8)アバター

2007年03月29日

スクリプトでこまを回してみる

こまを作って、そのこまをまわして見ようと思った。
エディターでこまを作ってみるが、なんだか歪んでいて、不恰好なものしか作れない。
適当にテクスチャーを貼り付けて、こんな感じになった。

これにスクリプトを使って、タッチすると早く回転するようにしてみた。
うーん、ちょっと芸がないなあ。
本当は、ひもを付けて、投げると回って、時間が来ると止まって倒れて、ぶつかると跳ね返るこまが作りたいが、まだ、そこまで出来ない…くやしい~
------------------------------------------
default
{
state_entry()
{

}

touch_start(integer total_number){
llSay(0, "Move!");
state roll_speed_1;
}


}

state roll_speed_0{
state_entry(){
llSay(0, "speed 0");
llTargetOmega(<0,0,0>, PI, 1);
}
touch_start(integer total_number){
state roll_speed_1;
}
}

state roll_speed_1{
state_entry(){
llSay(0, "speed 1");
llTargetOmega(<0,0,2>, PI, 1);
}
touch_start(integer total_number){
state roll_speed_2;
}
}

state roll_speed_2{
state_entry(){
llSay(0, "speed 2");
llTargetOmega(<0,0,4>, PI, 1);
}
touch_start(integer total_number){
state roll_speed_0;
}
}  
Posted by gpapa at 23:52Comments(376)TrackBack(0)スクリプト

2007年03月28日

無料のもの沢山GET

無料のskinやObjectを取ってきた。
ただの箱に山のように入っている…
何かを調べるだけでも時間がどんどんたってゆく。
こりゃすごいなあー。

/burns/103/116/0/
  

2007年03月28日

逆立ちしたい

この間、どこかでObjectに乗った時に、逆立ち状態になってしまった。
ずーっと、どうやってやるのか気になっていた。
ScriptのAPIでは、それらしいものがない。
うーん。と考えているうちに、アバターの動作がジェスチャーで出来るのを思い出す。
新しいジェスチャーを作ろうとすると、Animationというのがある。
そこで気づいた。
アニメーションって、アバターの動作のことなんだあー!
ScriptのAPIを見直すと、やっと見つけたー。
という事で、touchすると、バク転するScriptを作ってみる。
よくわからないが、パーミッションがない場合には、要求する必要があるようなので、
そのコードも入れて、backflipのアニメーションを起動すると、できたぞーっ!
#ほんとは、逆立ちしたかったが、libにはないらしい…
-------------------------------------
default
{
state_entry()
{
}
touch(integer num)
{
integer perm = llGetPermissions();

if (! (perm & PERMISSION_TRIGGER_ANIMATION)) {
llRequestPermissions(llGetOwner(), PERMISSION_TRIGGER_ANIMATION);
}
llStartAnimation("backflip");
}
}-------------------------------------
  
Posted by gpapa at 00:36Comments(361)TrackBack(0)スクリプト

2007年03月27日

アバターを変えたい

アバターを変えたいという欲求はあるが、まだ、わけがわからない…
http://www.slboutique.com/chipmidnight/
こんなページもあるが…
PSDファイルって…
さっぱりわからん。
こういうさっぱりわからないが、できそうな所が、セカンドライフの面白い所かも。
調査し、試行錯誤し、出来るようになるまでの過程は、何でも楽しい。  
Posted by gpapa at 17:34Comments(378)TrackBack(12)

2007年03月27日

スクリプトを作ってみる

スクリプトを作ってみた。
C言語likeな書式で、まずは、stateを試してみる。
最初はdefaultがあり、state_entryは、そのstateに入った時に実行されるらしい。
touch_startがtouchした時に実行される関数。
オブジェクトの色の変更関数のllSetColorのみを使って、シンプルに書いてみた。
これで、オブジェクトをクリックするたびに、赤→緑→青と色がかわったー!!!!
#でも、この手の言語は、なんでもそうだが、こういうシンプルなサンプルは簡単だけど、目的を持ったコードを書く時は、難儀するに違いない…と自戒する。
--------------------------
default
{
state_entry(){
state red;
}
}

state red{
state_entry(){
llSetColor(<1,0,0>, ALL_SIDES);
}
touch_start(integer total_number){
state green;
}
}

state green{
state_entry(){
llSetColor(<0,1,0>, ALL_SIDES);
}
touch_start(integer total_number){
state blue;
}
}

state blue{
state_entry(){
llSetColor(<0,0,1>, ALL_SIDES);
}
touch_start(integer total_number){
state red;
}
}
-----------------------
  
Posted by gpapa at 00:42Comments(379)TrackBack(0)スクリプト

2007年03月25日

スキーをした

スキー場に行ってスキーをしました。
よくわかりませんが、スキーを着て、右左するとシュプールを描きます。

/epic conditions ski/13/126/0/

滑ってるうちに、ひっくり返って逆さまになったり、海に落ちたり…

  
Posted by gpapa at 17:30Comments(271)TrackBack(1)

2007年03月25日

SLMAME_POSを試す

試してみました。
すごい!

Akiba/143/86/21/

  
Posted by gpapa at 11:48Comments(298)TrackBack(1)