1.1-1 識別子
#declare Ring = torus {5,1} #declare Cyan = color blue 1.0 green 1.0; object { Ring pigment { Cyan } }
1.2-1 //
1.2-2 /* ... */
/* This lines are ignored by the ray-tracer */
texture { T_1 } // texture { T_2 } // texture { T_3 } (T_1 が適用される) |
// texture { T_1 } texture { T_2 } // texture {T_3} (T_2が適用される) |
// texture { T_1} // texture {T_2 } texture { T_3 } (T_3が適用される) |
1.3-1 実数表記
1.3-2 実数識別子
#declare IDENTIFIER = EXPRESSION ;
#declare Count = 0; #declare Rows = 5.3; #declare Cols = 6.15; #declare Number = Rows*Cols; #declare Count = Count+1;
1.3-3 実数演算子
1+2+3 2*5 1/3 Rows*3 Col*5 (offset-5)/2 This/That+Other*Thing ((This<That) & (Other>=Thing)?Foo:Bar)
1.4-1 ベクトル表記
< 1.0, 0.8, -5.4578, 2/3> <This+3, That/3, 5*Other_Thing> (識別子が宣言されている場合)
<1, 2, 3>-4 ⇒ <1-4, 2-4, 3-4>つまり<-3, -2, -1>というベクトルとして評価される。 <1, 2, 3>, -4 ⇒ ベクトル<1, 2, 3>の後に実数-4があるという意味になる。
#declare Here = <1,2,3>; #declare There = <3,4,5> #declare Jump = <Foo*2,Bar-1,Bob/3>; #declare Route = There - Here; #declare Jump = Jump+<1,2,3>;
1.4-3 ベクトル演算子
<1, 2, 3> + <4, 5, 6> ⇒ <1+4, 2+5, 3+6> つまり <5, 7, 9> として評価される。
という表現では、FooがBarより小さければ<1, 2, 3>、そうでなければ<5, 6, 7>となる。
1.4-4 次元の自動変換
box{0,1} ⇒ box{<0,0,0>,<1,1,1>} sphere{0,1} ⇒ spere{<0,0,0>,1}
scale 2 ⇒ scale <2, 2, 2> scale <2, 2> ⇒ scale <2, 2, 0>
・red ・green ・blue |
(物体)色の赤、緑、青成分の反射率を指定する。 (光源)色の赤、緑、青成分の強度を指定する。 |
filter | 物体の成分別の透過率を指定する。 透過する光の色は物体 の色とかけ合わされ、色づけされる。 例)ステンドグラス、色セロハン。 |
transmit | 物体の透過率を指定する。 filterと違って、透過する光の色は 物体の色に影響されない。 例)細かいメッシュなど。 |
1.5-1 カラー・ベクトル
・color rgb <RED, GREEN, BLUE> ・color rgbf <RED, GREEN, BLUE, FILTER> ・color rgbt <RED, GREEN, BLUE, TRANSMIT> ・color rgbft <RED, GREEN, BLUE, FILTER, TRANSMIT> |
||
color(colourでもよい) | 色を指定するためのキーワード。 | |
rgb | red、green、blue成分を指定するためのキーワード。 filter、transmit成分はデフォルト値である0になる。 |
|
rgbf | red、green、blue、filter成分を指定するためのキーワー ド。 transmit成分はデフォルト値である0になる。 |
|
rgbt | red、green、blue、transmit成分を指定するためのキー ワード。 filter成分はデフォルト値である0になる。 |
|
rgbft | red、green、blue、filter、transmit成分をすべて指定す るためのキーワード。 |
|
RED、GREEN、BLUE、 FILTER、TRANSMIT |
各成分の値を実数表現で指定する。 |
1.5-2 カラー・キーワード
color red FLOAT green FLORT blue FLORT filter FLORT transmit FLORT | ||
color(colourでもよい) | 色を指定するためのキーワード。 | |
red FLORT〜transmit FLORT | 各成分の値を実数表現で指定する。 |
1.5-3 カラー識別子
#declare White = rgb <1,1,1>; #declare Cyan = color blue 1.0 green 1.0; #declare Weird = rgb <Foo*2,Bar-1,Bob/3>; #declare LightGray = White*0.8; #declare LightCyan = Cyan red 0.6;
1.5-4 カラー演算子
1.5-5 色指定の注意点
《透過率を指定する場合》
と指定すると物体は真っ黒になってしまう。 これは、red、green、blue成分にデフォルト値の0が適用され、透過光の各成分の透過率が0、つまり全く光を通さないfilterを指定したことになってしまうためである。 filterをつかって完全に透明な物体を作る場合は次のように指定しなければならない。
《カラー識別子とカラー・キーワードを一緒に使う場合》
ではred成分が半分にカットされるだけのように思われるが、これではgreen、blue、filter、transmit成分に0をかけることになり、rgbft <0.5,0,0,0,0>という5成分のカラーとして評価されてしまう。
この場合、red 0.5は識別子My_colorによって完全に書き換えられてしまう。 識別子と一緒にカラー・キーワードを使うときは、識別子が最初でなければならない。
《1つの実数で色を指定する場合》
を指定するために
とするのは間違いである。 この場合0.4は<0.4, 0.4, 0.4, 0.4, 0.4> に変換されるため、filterとtransmitも0.4になってしまう。 正しい方法は、
である。 この場合はred、green、blueだけの3成分ベクトルに変換されるため、この 0.4 は<0.4, 0.4, 0.4, 0.0, 0.0>となる(filterとtransmitはデフォルト値0になる)。
1.6-1 文字列表記
1.6-2 文字列識別子
#declare Font_Name = "ariel.ttf" #declare Inc_File = "myfile.inc" #declare Name = "John" #declare Name = concat(Name," Doe")
1.7-1 定数の組み込み識別子
識別子 | 数値、ベクトル | 用途 | ||
pi | 3.1415926535897932384626 | 円周率π | ||
true yes on |
1 1 1 |
真 | 論理値 | |
false no off |
0 0 0 |
否 | ||
u v x y z t |
<1,0> <0,1> <1,0,0> <0,1,0> <0,0,1> <0,0,0,1> |
各座標の 単位ベクトル |
1.7-2 その他の組み込み識別子
abs(A) | Aの絶対値。 Aが負数であれば-Aを、そうでなければAを返す。 |
acos(A) | 逆余弦の計算、出力は角度(ラジアン)。出力値の余弦はAとなる。 |
acosh(A) | 逆双曲線余弦の計算、出力は角度(ラジアン)。出力値の双曲線余弦はAとなる。 |
asin(A) | 逆正弦の計算、出力は角度(ラジアン)。出力値の正弦はAとなる。 |
asinh(A) | 逆双曲線正弦の計算、出力は角度(ラジアン)。出力値の双曲線正弦はAとなる。 |
atan2(A,B) | 逆正接A/Bの計算、出力は角度(ラジアン)。出力値の正接はA/Bとなる。Bが0であっても適切な値を返す。 通常のatan(A)の計算にはatan2(A,1) を使用する。 |
atanh(A) | 逆双曲線正接の計算、出力は角度(ラジアン)。出力値の双曲線正接はAとなる。 |
ceil(A) | Aの上限値。 Aより大きい最小の整数を返す。 Aの次に高い整数に丸める。 |
cos(A) | 余弦の計算、入力はAラジアン |
cosh(A) | 双曲線余弦の計算、入力はAラジアン |
degrees(A) | "ラジアン" を "度" に変換する。 Aラジアンの値をA°にして返す。公式は degrees=A/pi*180.0 |
div(A,B) | 整数の割り算。 (A/B) の整数部分を返す。 |
exp(A) | A の指数、 自然対数の底がe(2.71828182846)のとき、eのA乗の値を返す。 |
floor(A) | Aの下限値、Aより小さい最大の整数を返す。 A の次に低い整数に丸める。 |
int(A) | Aの整数部分を返す。小数点は切り捨てられる。 |
log(A) | 対数(底が10)の計算、入力はA |
ln(A) | 自然対数(底がe)の計算、入力はA |
max(A,B) | A > BであればAを返し、A < BであればBを返す。 |
min(A,B) | A < BであればAを返し、A > BであればBを返す。 |
mod(A,B) | A/Bの整数の割り算による余りを返す。 公式は((A/B) - int(A/B))*B。 |
pow(A,B) | AのB乗の値を返す。 |
radians(A) | "度" を "ラジアン" に変換する。 A°の値をAラジアンにして返す。公式は radians=A*pi/180.0 。 |
rand(A) | 正の整数Aで指定されるストリームから乱数を返す。 rand()の前にseed()を使ってランダム・ストリームを初期化しなければならない。それらの数は一様に分配され、0.0〜1.0までの値をすべて含んで持っている。 別々のストリームによって生成された数は、独立したランダム変数である。 |
seed(A) | 初期値Aによって新しいランダム・ストリームを初期化する。このランダム・ストリームに相当する数が返される。 ランダム・ストリームは次の例のように使用する。 例) #declare R1 = seed(0) #declare R2 = seed(12345) #sphere { <rand(R1), rand(R1), rand(R1)>, rand(R2) } 複数の乱数発生は、rand() を使って物体のグループを配置する場合に非常に便利である。 物体のグループの配置や色の設定にrand()を使用することができる。 |
sin(A) | 正弦の計算、入力はAラジアン |
sinh(A) | 双曲線正弦の計算、入力はAラジアン |
sqrt(A) | Aの平方根の計算、2乗するとAになる値を返す。 |
tan(A) | 正接の計算、入力はAラジアン |
tanh(A) | 双曲線正接の計算、入力はAラジアン |
vaxis_rotate(A,B,F) | x,y,z座標がベクトルAである点を、ベクトルBによって定義された軸まわりでF°回転させる。 結果のベクトルは回転後の新しいx,y,z座標になる。 |
vcross(A,B) | AとBの外積であるベクトルを返す。 結果のベクトルは元のベクトルに垂直で、その長さはそれらの間の角度に比例する。アニメーションのデモ・シーンVECT2.POV を参照。 |
vdot(A,B) | AとBの内積(スカラー積)である実数値を返す。 公式はvdot=A.x*B.x+A.y*B.y+A.z*B.z 。 アニメーションのデモ・シーンVECT2.POVを参照。 |
vlength(A) | Aの長さを実数値で返す。 公式はvlength=sqrt(vdot(A,A))。また、2点間の距離の計算にも使用できる(Dist=vlength(B-A))。 |
vnormalize(A) | Aの単位ベクトルを返す。公式はvnormalize=A/vlength(A)。 |
vrotate(A,B) | x,y,z座標がベクトルAである点を、原点まわりでB°回転させる。 つまり、x 軸まわりに(B.x)゜、y 軸まわりに(B.y)゜、z 軸まわりに(B.z)゜回転させる。 結果のベクトルは回転後の新しいx,y,z座標になる。 |
asc(S1) | S1 のアスキー値。 S1 の最初の文字のアスキー値である0〜255の整数を返す。 例えば asc("ABC") は、文字 "A" の値である65となる。 |
chr(A) | アスキー値がAである文字を返す。 値の範囲は、グローバル設定でcharsetがasciiの場合が0〜127、utf8の場合が0〜65535である。アスキーの場合、chr(70)は文字列 "F" である。 3次元テキストをレンダリングする場合は、システムのTTFフォントに依存する。 多くのTTFフォントはLatin-1 (ISO 8859-1) の文字のセットを用いるが、すべてがそうであるわけではない。 |
concat(S1,S2,...,Sn) | S1〜Snを連結した文字列を返す。 2つ以上のパラメータを指定しなければならない。 例) concat("Value is ", str(A,3,1), " inches") このとき、実数値Aが12.34であれば、結果は"Value is 12.3 inches"という文字列になる。 |
file_exists(S1) | ファイル名がS1であるファイルを検索する。 カレント・ディレクトリと、Library_Path INI オプション または +L コマンドライン・スイッチで定義されたすべてのディレクトリを検索する。検索後ファイルはすぐに閉じられる。 ファイルが見つかれば1、見つからなければ0の論理値を返す。 |
str(A,L,P) | 実数Aを文字列表現にして返す。L:文字列全体の最小長さを指定する。 文字列がその長さより短い場合は、その左側に挿入するものを指定する。Lが正の数であれば空白が、負の数であれば0が挿入される。 文字列の最小長さはabs(L)。P:小数点以下の桁数を指定する。 Pが負の数であれば、既定値が使われる。 例) str(123.456,0,3) "123.456" str(123.456,4,3) "123.456" str(123.456,9,3) " 123.456" str(123.456,-9,3) "00123.456" str(123.456,0,2) "123.45" str(123.456,0,0) "123" str(123.456,5,0) " 123" str(123.000,7,2) " 123.00" str(123.456,0,-1) "123.456000" (既定値表現) |
strcmp(S1,S2) | S1とS2のアスキー値を比較する。 S1 = S2であれば0、S1 > S2であれば正の数、S1 < S2であれば負の数を返す。 |
strlen(S1) | S1の文字数(整数値)を返す。 |
strlwr(S1) | S1の中の大文字をすべて小文字にして返す(文字列そのものには影響しない)。 例) strlwr("Hello There!") ⇒ "hello there!" |
substr(S1,P,L) | S1のP 番目の桁からL 桁の長さの部分の文字列を返す。 例) substr("ABCDEFGHI",5,2) ⇒ "EF" ※ P+L > strlen(S1)の場合エラーが発生する。 |
strupr(S1) | S1の中の小文字をすべて大文字にして返す(文字列そのものには影響しない)。 例) strupr("Hello There!") ⇒ "HELLO THERE!" |
val(S1) | S1によって表現された実数値を返す。 例) val("123.45") ⇒ 123.45 |
vstr(N,A,S,L,P) | フォーマットされた文字列に変換する。Nは数値の個数、Aは数値の値(例を参照)。S1によって表現された実数値を返す。LとPは関数str(A,L,P)と同様例)vstr(2, <1,2>t;, ", ", 0,1) "1.0, 2.0" vstr(5, <1,2,3,4,5>t;, ", ", 0,1) "1.0, 2.0, 3.0, 4.0, 5.0" vstr(1, 1, ", ", 0,1) "1.0, 1.0" vstr(2, 1, ", ", 0,1) "1.0, 1.0" vstr(5, 1, ", ", 0,1) "1.0, 1.0, 1.0, 1.0, 1.0" vstr(7, 1, ", ", 0,1) "1.0, 1.0, 1.0, 1.0, 1.0" vstr(3, <1,2>t;, ", ", 0,1) "1.0, 2.0, 0.0" vstr(5, <1,2,3>t;, ", ", 0,1) "1.0, 2.0, 3.0, 0.0, 0.0" vstr(3, <1,2,3,4>t;, ", ", 0,1) error |
#declare IDENTIFIER = array[ INT ][ [ INT ] ]...[ARRAY_INITIALIZER] #local IDENTIFIER = array[ INT ][ [ INT ] ]...[ARRAY_INITIALIZER] |
||
#declare #local |
識別子を宣言するキーワード | |
IDENTIFIER |
識別子の名前(40文字以下) | |
array |
配列を宣言するためのキーワード | |
[INT] |
配列のサイズ | |
ARRAY_INITIALIZER |
配列の初期化。⇒「1.9−1 配列の初期化」 |
#declare MyArray = array [10] もしくは #local MyArray = array [10] |
#declare MyGrid = array[4][5] もしくは #local MyGrid = array[4][5] |
#include "colors.inc" #declare FlagColors = array[3] {Red,White,Blue} |
#declare Digits = array[4][10] { {7,6,7,0,2,1,6,5,5,0}, {1,2,3,4,5,6,7,8,9,0}, {0,9,8,7,6,5,4,3,2,1}, {1,1,2,2,3,3,4,4,5,5} } |