同じオブジェクトをたくさん並べてみよう


このページの内容は,プログラミングのようなことをやったことがない人にとっては,やや難しいかもしれません。よく分からん,という人は,とりあえずこのページのことは無視してください。


まずは次の画像を見てください。

見ての通り,黄色い球が五つ並んでいるだけの画像です。球を5個並べるだけなら,一つ一つ作って移動していっても大したことはありません。でも,これが1000個並べろと言われたら,とても手作業では無理ですね。POV-Rayでは「#while (...) 〜 #end」という命令を使うことで,大量の同じオブジェクトを簡単に作成することができます。


上の画像のソースは次の通りです。

#include "colors.inc"

camera {
  location  <0.0, 1.0, -5.0>
  look_at   <0.0, 0.0,  0.0>
  right     x*image_width/image_height
}

light_source {
  <100, 100, -100>
  color rgb 1.0
}

#declare MyValue = -2;
#while ( MyValue <= 2 )
  object {
    sphere { <0, 0, 0>, 0.5 }
    pigment { Yellow }
    translate <MyValue, 0, 0>
  }
  #declare MyValue = MyValue + 1;
#end

「#while (...)〜#end」というのは,「(...)」内の条件である間は,「〜」の部分の処理をしなさいという命令です。

上のソースでは,赤字の部分で「#while」の後に「( MyValue <= 2 )」とありますね。つまりこの場合は,「MyValue」が2以下である間は,#whileと#endで囲まれた部分の処理をしなさいと,POV-Rayに命令しているのです。

上の赤字の部分でやろうとしていることを整理すると,

  1. #declareでMyValueの値を宣言(MyValue = -2)
  2. #whileの行に条件を書く(MyValue <= 2)
  3. 必要な部分(上の例ではtranslate)にMyValueを書く
  4. MyValueの値を変更する(MyValue = MyValue + 1)
  5. 条件に一致しなくなったら,繰り返し処理から抜ける(#end)

という感じになります。1.では,#while(...) 〜 #endの外側で,MyValueを-2にしています。これが初期値になります。4.で,MyValueの値を1だけ足しています。つまりMyValueの値は-2からはじまって,1ずつ増えていきます。

-2から1ずつ足していくと,いずれ3になりますね。#whileのところで,「MyValue <= 2」,つまりMyValueが2以下である場合に,次の処理をしろという条件を付けていますから,MyValueの値が3になってしまえば,もう条件には合っていないわけです。

うーん,なんかややこしいかんじですね。

でも,何度か試してみると何となく分かると思いますので,やってみてください。

上の例ではオブジェクトを移動させていますが,拡大・縮小したり,色を変えたりと,いろいろなことができます。


戻る