前: アニメーション形状 次: スクリプト形状 上級編

4. テクスチャ形状

テクスチャや材質をスクリプト形状に、ほかのオブジェクトに割り当てるのとまったく同じように割り当てることができます。しかし、さらに複雑なことをしたくなるときがあります。例えば木を作り出すスクリプトを書く場合はどうでしょう。樹皮を茶色に、葉を緑にするとします。短く言えば、テクスチャをスクリプトで自動で選択して、オブジェクトの異なる部分に異なるテクスチャを割り当てるということです。

以下のスクリプトでその方法を紹介します。これは「球の雲」の別バージョンで、今回だけは球に異なる色を配しています。


r = new Random(0);
texture = new Texture [3];
texture[0] = new UniformTexture();
texture[1] = new UniformTexture();
texture[2] = new UniformTexture();
texture[0].diffuseColor.setRGB(1.0, 0.0, 0.0);
texture[1].diffuseColor.setRGB(0.0, 0.0, 1.0);
texture[2].diffuseColor.setRGB(1.0, 1.0, 1.0);
for (i = 0; i < 100; i++)
{
  sphere = new Sphere(0.05, 0.05, 0.05);
  sphere.setTexture(texture[i%3], texture[i%3].getDefaultMapping(sphere));
  pos = new Vec3(r.nextDouble(), r.nextDouble(), r.nextDouble());
  script.addObject(sphere, new CoordinateSystem(pos, 0, 0, 0));
}

このスクリプトでは木の一様なテクスチャの配列を作成して、それぞれが異なる拡散反射色を持つようにしています。球が作られるとテクスチャのリストを一巡して、球それぞれについて色を選択します。

この場合、スクリプトは必要なテクスチャを単に作成しました。一様なテクスチャでは充分に簡単なことですが、樹皮に複雑な手続きテクスチャを使う場合はどうでしょう。手続きテクスチャをスクリプトで作るのは確かに可能ですが、普通は手作業のほうが簡単です。このようなときは以下のようにしましょう。(訳注: 以下の数式の "bark" は「樹皮」の意味)


barkTexture = script.getScene().getTexture("bark");

getScene() メソッドは、このスクリプト形状が構成の一部となるシーン(artofillusion.Scene)を表すオブジェクトを返します。これで、テクスチャ、材質、画像、シーン内の他のオブジェクトを探すのにこれを使えます。

前: アニメーション形状 次: スクリプト形状 上級編