6.1 インクルードファイルの基礎
6.1.1 インクルードファイルとは何か
第1.10節で説明したように、POV-Rayでは、数値、ベクトル、色、物体、光源など、さまざ まなものに識別子を与えることができます。
何かに識別子を与える記述、つまり宣言は、基本的には、その識別子を使うシーンの中に書け ばいいわけですが、識別子を与える記述と、その識別子を使う記述とを、別々のファイルの中に 入れておく、ということも可能です。そのように、宣言をシーンから独立させてひとつのファイ
ファイル名 内容 colors.inc 色
shapes.inc 形状
shapes2.inc 形状(shapes.incが必要)
shapesq.inc 形状(shapes.incが必要)
woods.inc 木材のテクスチャー(colors.incが必要)
stones.inc 石のテクスチャー(colors.incが必要)
metals.inc 金属のテクスチャー
golds.inc 金のテクスチャー
表6.1: 主要な標準インクルードファイル
ルに入れておくことによって、過去に書いた宣言を新しいシーンで再利用することが、とても簡 単にできるようになります。
別のファイルの中の記述をシーンの中に埋め込むことを、ファイルを「インクルードする」
(include)と言います。そして、ファイルにインクルードされるファイル(またはその内容)は、
「インクルードファイル」(include file)と呼ばれます。
POV-Rayのシーンを格納するファイルには、.povという拡張子を付けるわけですが、それ
に対して、POV-Rayのインクルードファイルには、.incという拡張子を付けることになってい ます。
6.1.2 ファイルをインクルードする記述
シーンの中にファイルの内容をインクルードしたいときは、
#include " パス名 "
という記述を書きます。そうすると、「パス名」のところに書かれたパス名を持つファイルの内 容が、この記述の場所に埋め込まれることになります。たとえば、
#include "namako.inc"
という記述を書くことによって、namako.incというファイルの内容を、その記述の場所に埋め 込むことができます。
6.1.3 標準インクルードファイル
POV-Rayの公式サイトで配布されているアーカイブの中には、POV-Rayの本体だけではなく
て、さまざまな識別子を宣言しているインクルードファイルも含まれています。そのような、 POV-Rayに標準で添付されているインクルードファイルは、「標準インクルードファイル」(standard
include file)と呼ばれます。表6.1は、標準インクルードファイルのうちの主要なものについて、
そのファイル名と、その中に書かれているものを示しています。
POV-RayをWindowsにインストールした場合、標準インクルードファイルは、POV-Ray
をインストールしたユーザーのマイドキュメントの中にあるPOV-Rayのフォルダーの中にあ
るincludeというフォルダーの中に格納されます。しかし、標準インクルードファイルを指定す
るパス名の中に、そのフォルダーを指定する長いパス名を書く必要はありません。なぜなら、標準 インクルードファイルは、それがたとえシーンのファイルと同じフォルダーの中に置かれていない としても、ファイルの名前を書くだけで指定することができるからです。たとえば、colors.inc という標準インクルードファイルをインクルードしたい場合は、
#include "colors.inc"
と書くだけで、それをインクルードすることができます。
6.2 色の標準インクルードファイル
6.2.1 色の標準インクルードファイル
6.3. 形状の標準インクルードファイル 67
colors.incという標準インクルードファイルの中には、さまざまな色に対して識別子を与え
る宣言が書かれています。
6.2.2 colors.incを使ったシーンの例
次のシーンは、colors.incで洗顔されている識別子を使って、三つの立方体に対して色を適 用しています。
シーンの例 colors.pov
#include "colors.inc"
#declare Box = box { <-1, -1, -1>, <1, 1, 1> } camera {
location <6, 3, -4>
look_at <1.4, 0, 0>
angle 70 }
light_source { <8, 10, -12> color rgb 1.6 }
object { Box pigment { SkyBlue } translate <-3, 0, 0> } object { Box pigment { Orange } }
object { Box pigment { SpringGreen } translate <3, 0, 0> }
6.3 形状の標準インクルードファイル
6.3.1 形状の標準インクルードファイルの基礎
次の標準インクルードファイルの中には、さまざまな形状に対して識別子を与える宣言が書か れています。
• shapes.inc
• shapes2.inc
• shapesq.inc 6.3.2 shapes.inc
shapes.incの中に書かれている形状は、立方体、球、楕円体、円柱、円錐、平面、放物面、そ
して双曲面です。
次のシーンは、shapes.incを使って双曲面を作っています。
シーンの例 shapes.pov
#include "shapes.inc"
camera {
location <0, 0, -10>
look_at 0 angle 70 }
light_source { <3, 2, -5> color rgb 1.6 } object {
Hyperboloid_Y
pigment { color rgb 1 } }
6.3.3 shapes2.inc
shapes2.incの中に書かれている形状には、四面体、八面体、十二面体、二十面体、円錐台、
斜方六面体、六角柱、ピラミッドなどがあります。
shapes2.incを使うためには、それに先立ってshapes.incをインクルードしておく必要があ
ります。
次のシーンは、shapes2.incを使って六角柱を作っています。
シーンの例 shapes2.pov
#include "shapes.inc"
#include "shapes2.inc"
camera {
location <3, 1, -2>
look_at 0 angle 70 }
light_source { <6, 8, -4> color rgb 1.6 } object {
Hexagon
pigment { color rgb 1 } }
6.3.4 shapesq.inc
shapesq.incの中には、さまざまな不思議な形状が書かれています。
shapesq.incを使うためには、それに先立ってshapes.incをインクルードしておく必要があ
ります。
次のシーンは、shapesq.incの中でQuartic_Cylinderという識別子が与えられている形状 を持つ物体を作っています。
シーンの例 shapesq.pov
#include "shapes.inc"
#include "shapesq.inc"
camera {
location <0, 1, -3>
look_at 0 angle 70 }
light_source { <4, 8, -4> color rgb 1.6 } light_source { <0, -1, -1> color rgb 0.8 } object {
Quartic_Cylinder
pigment { color rgb 1 } }
6.4 テクスチャーの標準インクルードファイル
6.4.1 形状の標準インクルードファイルの基礎
次の標準インクルードファイルの中には、さまざまなテクスチャーに対して識別子を与える宣 言が書かれています。
• woods.inc
• stones.inc
• metals.inc
• golds.inc 6.4.2 woods.inc
woods.incの中には、さまざまな木材のテクスチャーが書かれています。
woods.incを使うためには、それに先立ってcolors.incをインクルードしておく必要があり
6.4. テクスチャーの標準インクルードファイル 69 ます。
次のシーンは、woods.incの中でT_Wood10という識別子が与えられているテクスチャーが適 用された物体を作っています。
シーンの例 woods.pov
#include "colors.inc"
#include "woods.inc"
camera {
location <2, 2, -3>
look_at 0 angle 70 }
light_source { <6, 8, -5> color rgb 1.6 } object {
box { <-1, -1, -1>, <1, 1, 1> } texture { T_Wood10 }
}
6.4.3 stones.inc
stones.incの中には、さまざまな石のテクスチャーが書かれています。
stones.incを使うためには、それに先立ってcolors.incをインクルードしておく必要があ
ります。
次のシーンは、stones.incの中でT_Stone17という識別子が与えられているテクスチャーが 適用された物体を作っています。
シーンの例 stones.pov
#include "colors.inc"
#include "stones.inc"
camera {
location <2, 2, -3>
look_at 0 angle 70 }
light_source { <6, 8, -5> color rgb 1.6 } object {
box { <-1, -1, -1>, <1, 1, 1> } texture { T_Stone17 }
}
6.4.4 metals.inc
metals.incの中には、さまざまな金属のテクスチャーが書かれています。
次のシーンは、metals.incの中でT_Chrome_2Aという識別子が与えられているテクスチャー が適用された物体を作っています。
シーンの例 metals.pov
#include "metals.inc"
camera {
location <0, 1, -3>
look_at <0, 2, 0>
angle 70 }
light_source { <10, 10, -10> color rgb 1.6 } object {
plane { y, 0 }
pigment { checker color rgb 1, color rgb <0, 0.4, 0> } }
object {
sphere { <0, 2, 0>, 1 } texture { T_Chrome_2A } }
6.4.5 golds.inc
golds.incの中には、金のテクスチャーが書かれています。
次のシーンは、golds.incの中でT_Gold_1Aという識別子が与えられているテクスチャーが 適用された物体を作っています。
シーンの例 golds.pov
#include "golds.inc"
camera {
location <0, 1, -3>
look_at <0, 2, 0>
angle 70 }
light_source { <10, 10, -10> color rgb 1.6 } object {
plane { y, 0 }
pigment { checker color rgb 1, color rgb <0, 0.4, 0> } }
object {
sphere { <0, 2, 0>, 1 } texture { T_Gold_1A } }
6.5 オリジナルなインクルードファイル
6.5.1 この節について
インクルードファイルというのは、POV-Rayのユーザーが自分で書くことも可能です。自分 がよく使う形状やテクスチャーなどは、シーンの中に書くのではなく、インクルードファイルの 中に書いておけば、同じものを何回も書く手間が省けますので、とても便利です。
そこで、この節では、インクルードファイルというのはどのように書けばいいのか、というこ とについて説明したいと思います。
6.5.2 インクルードファイルの書き方
インクルードファイルの書き方は、シーンの書き方とほとんど同じで、異なっているのは次の 2点だけです。
(1) インクルードファイルの中には、カメラやライトや物体などに識別子を与える宣言を書くこ とはできるが、それらを実際に作る記述を書くことはできない。
(2) インクルードファイルの先頭と末尾には、同一のインクルードファイルが重複して処理され ることを防ぐためと、POV-Rayのバージョン番号を退避させて、設定して、復元するため の記述を書かないといけない。
6.5.3 インクルードファイルの先頭の記述
インクルードファイルの先頭には、まず最初に、同一のインクルードファイルが重複して処理 されることを防ぐために、
#ifndef ( 独自の識別子 )
6.5. オリジナルなインクルードファイル 71 という記述を書く必要があります。「独自の識別子」というところには、ほかのインクルードファ イルでは使われていない識別子を書きます。
インクルードファイルの先頭には、上の記述に続けて、識別子を使ってPOV-Rayのバージョ ン番号を退避させておくために、
#declare 独自の識別子 = version;
という記述を書く必要があります。「独自の識別子」というところには、#ifndefに書いたもの と同じ識別子を書きます。
インクルードファイルの先頭には、上の記述に続けて、インクルードファイルを処理すること
のできるPOV-Rayのバージョン番号をPOV-Rayに設定するために、
#version バージョン番号 ;
という記述を書く必要があります。「バージョン番号」というところには、インクルードファイ ルを処理することのできるPOV-Rayのバージョン番号を書きます。
6.5.4 インクルードファイルの末尾の記述
インクルードファイルの末尾には、まず最初に、POV-Rayのバージョン番号を復元するた めに、
#version 独自の識別子 ;
という記述を書く必要があります。「独自の識別子」のところには、インクルードファイルの先 頭に書いたものと同じ識別子を書きます。
インクルードファイルの末尾には、上の記述に続けて、
#end
という記述を書く必要があります。この記述は、#ifndefとペアになるもので、インクルード ファイルを処理する必要がない場合に、どこまでスキップすればいいかということを示してい ます。
6.5.5 オリジナルなインクルードファイルの例
それでは、オリジナルなインクルードファイルを実際に書いてみましょう。
次のインクルードファイルは、正方形の枠という形状に対してFrameという識別子を与えてい ます。
インクルードファイルの例 frame.inc
#ifndef (Frame_Inc_Temp)
#declare Frame_Inc_Temp = version;
#version 3.6;
#declare Frame = difference {
box { <-1, -0.05, -1>, <1, 0.05, 1> } box { <-0.9, -0.1, -0.9>, <0.9, 0.1, 0.9> } }
#version Frame_Inc_Temp;
#end
次のシーンは、上のframe.incの中でFrameという識別子が与えられている形状を持つ物体 を作っています。
シーンの例 frame.pov
#include "frame.inc"
camera {
location <0, 2, -2>
look_at 0 angle 70 }