Okamoto's Homepage
たとえば「ぽぶ」と入力すると「POV-Ray」と表示されるというような感じで,単語登録をしている人は多いと思います。あるいは,何らかの3Dアプリなどで,いくつかのオブジェクトをグループ化して名前をつけたりすることがあると思います。
「#declare」という命令を使うと,それらと同じような感じで,シーンファイルを書くときに,数字や座標,オブジェクトやテクスチャなどに名前をつけることができます。
最も簡単な例を挙げると,次のような感じです。
#declare MyValue = 0.00001
|
このようにMyValueに0.00001を入れておくと,この後で「0.00001」を使いたいときには「MyValue」と書くことで使うことができるようになります。
まあ,これだけだとあまり有り難みは感じられないとは思いますが(^^;),繰り返し処理などをしようとするときには,必ず必要になる命令文です。
なお,付ける名前はPOV-Rayであらかじめ定義されているものをのぞけば(アルファベットや数字を使って)自由に付けることができます。アルファベットの大文字で始まる名前を付けておけば,ほとんど大丈夫なはずです。
#declareを使って名前を付けられるのは,数字だけではありません。オブジェクトやピグメントなどにも名前をつけることができます。
オブジェクトの場合も上の数値と同じように,たとえば球一つに名前をつけてもあまりメリットはありませんが,union等を使っていくつかのオブジェクトを組み合わせたものに名前をつけておくと便利なことがあります。たとえば次のような感じになります。
#declare MyObj =
union {
object {
sphere { <0, 0, 0>, 0.5 }
pigment { Red }
translate <0, 1, 0>
}
object {
cone { <0, -0.5, 0>, 0.5, <0, 1, 0>, 0 }
pigment { Yellow }
}
}
|
簡略化すると次のようになります。
#declare MyObj = union { object { } object { } }
|
チェスの駒のように,同じものがいくつも出てくる場合に使うと便利でしょう。ソースファイル全体は,例えば次のようになります。
#include "colors.inc"
camera {
location <0.0, 1.0, -3.0>
look_at <0.0, 0.5, 0.0>
right x*image_width/image_height
}
light_source {
<100, 100, -100>
color rgb 1.0
}
#declare MyObj =
union {
object {
sphere { <0, 0, 0>, 0.5 }
pigment { Red }
translate <0, 1, 0>
}
object {
cone { <0, -0.5, 0>, 0.5, <0, 1, 0>, 0 }
pigment { Yellow }
}
}
object { MyObj }
|
#declareを使って名前をつけたオブジェクトを使うときは,上のソースファイルの赤字のように,必要に応じて記述する必要があります。画像は次のようになります。
このオブジェクトは次のようにしてやると移動させることができます。拡大なども同様です。
object { MyObj translate <0, 1, 0>}
|
テクスチャやピグメントに名前をつけたい場合は次のようになります。複数のオブジェクトに同じテクスチャを適用したい場合などに便利です。
#declare MyTex = texture { pigment { ... } finish { ... } }
|
#declare MyPig = pigment { ... }
|
インクルードファイルをテキストエディタなどで開いてみると,#declareを使っていろいろと定義してあるのが分かります。