SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Second Life建築入門 ~城を建ててみよう~

Second Lifeの3Dオブジェクト作成の基本

城制作ブロックの作成

 ここまでは、基本的な制作オプションの操作方法を見てきました。これにより、以下の作業ができるようになりました。

  • プリムタイプの作成
  • プリムまたはオブジェクトの移動
  • プリムまたはオブジェクトのサイズの変更
  • テクスチャの適用
  • 各面への異なるテクスチャの適用

 図1に示したような城を短時間で築くためには、城制作ブロックを使用するのが有効です。この節では、城制作ブロックを作成する方法について説明します。Second Life世界のテクスチャと城制作ブロックは、すべてSecond Lifeの下記URL(SLURL)から入手できます。

 城は「Castle in a Box Tutorial」と呼ばれる大きなボックスにパッケージされています。このチュートリアルボックスには、この城に必要なテクスチャと制作ブロックがすべて含まれています。さらに、ユーザーにはこれらのオブジェクトに対してフルアクセス権が付与されているので、その制作過程を調べて正確に理解することができます。

 Second Lifeでは、こうしたテクニックを使うことで自分オリジナルの建築物を作成することができます。まず、プリムを作成し、作成したプリムを組み合わせてより大きなオブジェクトを構築します。これらのより大きなオブジェクトが自分の構造物の制作ブロックになります。例えば、城を構成する制作ブロックは次のとおりです。図10に、これらの制作ブロックのレイアウトの一部を示します。

制作ブロック 用途
3X3 Cement 3×3コンクリート
3X3 Cement Grass 3×3コンクリート用芝生
Battlement 銃眼付き胸壁
Corner Wall コーナー壁
Corner Tower コーナータワー
Door Section ドア部
Floor
Front Door 玄関ドア
Roof 屋根
Short Wall 壁(低)
Small Corner Tower コーナータワー(小)
Stairs 階段
Wall
Window Wall 窓壁
図10 城制作ブロック。図中のグループ化されたプリムセットは、築城建築用の制作ブロックの基本単位になる。
図10 城制作ブロック。図中のグループ化されたプリムセットは、築城建築用の制作ブロックの基本単位になる。

 これらの制作ブロックは、この章で既に説明したテクニックを使って作成したものです。例えば、標準サイズのシリンダを数本積み上げてその上に青色の円錐を乗せれば、塔ができあがります。また、表面に壁/窓のテクスチャを配置してその裏面にインテリアのテクスチャを配置すれば、壁ができあがります。各ブロックのプリムはグループ化されています。ドア以外は、この記事で説明したテクニックだけを使って作成してあります。ドアに関しては、開閉機能の部分に簡単なLinden Scripting Language(LSL)プログラム(私の以前の記事を参照)を使用しています。

 リスト1に、ドアを操作するためのLinden Scripting Language(LSL)コードを示します。

リスト1 ドアに関するLSLコード
// ********** USER SETTINGS HERE **********
// automatically close the door after this
// many seconds, set to 0 to disable
float       TIMER_CLOSE = 5.0;

// direction door opens in. Either 1
// (outwards) or -1 (inwards);
integer     DIRECTION   = -1;
// ********** END OF USER SETTINGS **********

integer     DOOR_OPEN   = 1;
integer     DOOR_CLOSE  = 2;

vector      mypos;      // starting pos of the door

door(integer what)
{
  rotation    rot;
  rotation    delta;

  llSetTimerEvent(0); // kill any running timers

  if ( what == DOOR_OPEN )
  {
    llTriggerSound("Door open", 0.8);

    rot = llGetRot();
    delta = llEuler2Rot(<0, 0, -DIRECTION * PI_BY_TWO>);
    rot = delta * rot;
    // rotate by -45 degree
    llSetRot(rot);
  }
  else if ( what == DOOR_CLOSE)
  {
    rot = llGetRot();
    delta = llEuler2Rot(<0, 0, DIRECTION * PI_BY_TWO>);
    // rotate by 45 degree
    rot = delta * rot;
    llSetRot(rot);
    llTriggerSound("Door close", 0.8);
  }
}


default // closed
{
  on_rez(integer start_param)
  {
    // reset, so we store the new position
    llResetScript();
  }

  state_entry()
  {
    // remember where we're supposed to be
    mypos = llGetPos();
  }

  touch_start(integer total_number)
  {
    door(DOOR_OPEN);
    state is_open;
  }

  // done moving me around, store new position
  moving_end()
  {
    mypos = llGetPos();
  }
}

state is_open
{
  state_entry()
  {
    llSetTimerEvent(TIMER_CLOSE);
  }

  touch_start(integer num)
  {
    door(DOOR_CLOSE);

    llSetPos(mypos);

    state default;
  }

  timer()
  {
    // time to close the door
    door(DOOR_CLOSE);
    llSetPos(mypos);
    state default;
  }

  moving_start()
  {
    // close door when door is being moved
    door(DOOR_CLOSE);

    state default;
  }
}

 リスト1のスクリプトでは、ドアの2つの状態(オープンとクローズ)を定義しています。ユーザーがドアに触れると、ドアが現在の状態からもう一方の状態に変更されます。ドアには単純な長方形のプリムを使用する必要があります。touch関数はドアを45度回転させるdoor関数を呼び出し、これによってドアが開き、オープン状態に設定されます。オープン状態では、事前に設定された時間(リスト1のユーザー設定値では5.0秒)だけ待機し、その後、ドアを45度戻して閉じます。

 この城には数多くのテクスチャを使用しています(テクスチャ作成の説明だけで1本分の記事が書けるぐらいです)。テクスチャを入手する最も簡単な方法は、インターネットでフリーのテクスチャを見つけることです。インターネットでテクスチャを見つけたら、そのテクスチャをSecond Lifeにアップロードします。例えば花崗岩テクスチャを探すには、Googleの「イメージ検索」で検索ワードに「花崗岩 テクスチャ」や「granite texture」と入力して実行すると、かなり多くのテクスチャが見つかります。

著者注
 テクスチャを使用する前に、そのテクスチャがフリーであることを確認してください。テクスチャを掲載しているほとんどのWebサイトには、そのテクスチャの使用ライセンスが記述されています。Second Lifeでは、ユーザーが有効なライセンスを取得したテクスチャであればどんなテクスチャでも使用可能であり、コミュニティ基準に違反しません。自分オリジナルのテクスチャを作成したい場合は、Adobe PhotoshopやAdobe Illustratorなどのソフトウェアで作成してみてください。
 

 環境整備、プリム、グループ、テクスチャを使うことで、自分のアイディアを具現化することができます。この記事では、まず、建物を建築するために土地を整備する方法を説明し、建物を築くための再利用可能な制作ブロックを作成する方法を示しました。また、城制作ブロックの入手場所も説明しました。

 制作は非常に時間のかかるプロセスです。しかし、ビルダーとしての経験が増えるにつれて、以前作成したオブジェクトが共有ライブラリに蓄積されるので、新しいオブジェクトを既存のオブジェクトをベースにしてすばやく構築することができるようになります。

次のステップ

 この記事では、オブジェクトで利用可能な基本オプションを説明したにすぎません。しかし、これらの基本オプションだけでも城を築くことはできます。基本オプションを習得したら、hollow(中空)やtaper(テーパー)などの他のオプションも試してみることをお勧めします。これらのオプションを使用すると、プリムを変形して、今まで見たことのないおもしろい形を作成することができます。例えば、立方体に穴を開けて内側にも面のあるボックスを作ったり、球にカットパスを適用して半球を作ったりできます。このような追加オプションを理解するには、実際にプリムを作成し、選択可能な各オプションをあれこれ試してみるのが最も効果的です。どんどん挑戦してみてください。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

Jeff Heaton(Jeff Heaton)

ライター、人工知能(AI)研究者、元大学教員。AI、仮想世界、スパイダー、ボットなどの話題を取り上げて執筆した書籍は10冊以上。Java、.Net、Silverlightを対象に、高度なニューラルネットワークおよびAIフレームワークの提供を目的とするオープンソースイニシアチブ、Encogプロジェクトを統括している。また、個人のWebサイトを管理し、人工知能とスパイダー/ボットプログラミングをはじめとする話題について情報発信を行っている。メールの宛先はjheaton@heatonresearch.com。Sun認定Javaプログラマ兼IEEEシニアメンバー。ミズーリ州セントルイスのワシントン大学情報管理修士号を持ち、セントルイス在住。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1428 2008/09/26 16:42

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー