• 検索結果がありません。

インクルードファイル 65

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 }