第 3 章 基本的なプリミティブ 29
3.5 テキスト
3.5.1 テキストの基礎
この節では、textというプリミティブについて説明したいと思います。
textは、「テキスト」(text)と呼ばれる形状を作るプリミティブです。
「テキスト」という言葉は、もともとは文字が並んでできているデータ、つまり文字列という 意味ですが、ここで「テキスト」と呼んでいるのは、フォントによって作られた2次元の形状に 対して厚さを加えることによって、それを3次元化した形状のことです。
POV-Rayは、任意のTrueTypeフォントを使ってテキストを作ることができます。
3.5. テキスト 33 このチュートリアルでは、「文字列」という言葉を、文字が並んでできているデータという意 味で使って、「テキスト」という言葉を、文字列を3次元化した形状という意味で使うことにし ます。
3.5.2 文字列リテラル
得られるデータが文字列であるようなリテラルは、「文字列リテラル」(string literal)と呼ば れます。
文字列リテラルは、二重引用符(")で文字列を囲んだものです。文字列リテラルを評価する と、二重引用符で囲まれた文字列が値として得られます。たとえば、"namako"という文字列リ テラルを評価すると、namakoという文字列が値として得られます。
二重引用符を含む文字列を値とする文字列リテラルを書くときは、その二重引用符の直前に バックスラッシュ(\)を書く必要があります。たとえば、ab"cdという文字列を値とする文字列 リテラルは、"ab\"cd"と書く必要があります。
バックスラッシュを含む文字列を値とする文字列リテラルを書くときは、バックスラッシュ を二重に書く必要があります。たとえば、ab\cdという文字列を値とする文字列リテラルは、
"ab\\cd"と書く必要があります。
3.5.3 テキストの記述
textを使ってテキストを作る記述は、
text { ttf パス名 , 文字列 , 厚さ , 文字間隔 }
と書きます。「パス名」と「文字列」のそれぞれのところには文字列を値とする式を書いて、「厚 さ」のところにはスカラーを値とする式を書いて、「文字間隔」のところには3次元ベクトルを 値とする式を書きます。そうすると、「パス名」のところに書かれた式の値をパス名とするファイ ルに格納されているTrueTypeフォントを使って、「厚さ」のところに書かれた式の値を厚さと する、「文字列」のところに書かれた式の値を3次元化したテキストが作られます。「文字間隔」
のところに書かれた式の値は、文字の間隔を指定します。ここに0(つまり<0, 0, 0>)と書く と、ノーマルな間隔になります。
たとえば、
text { ttf "timrom.ttf", "umiushi", 3, 0 }
という記述は、timrim.ttfというファイルに格納されているTrueTypeフォントを使って、
umiushiという文字列から、厚さが3で文字間隔がノーマルなテキストを作る、という意味にな
ります。
テキストの先頭の文字は、その左下の手前が原点になる位置に置かれます。そして、それ以降 の文字は、文字間隔が0の場合、x軸の方向に並べられます。
次のシーンは、textを使ってテキストを作っています。
シーンの例 text.pov camera {
location <0, 2, -5>
look_at 0 angle 70 }
light_source { <-5, 5, -5> color rgb 1.6 } object {
text { ttf "timrom.ttf", "namako", 1, 0 } pigment { color rgb 1 }
}
文字列や厚さをいろいろと変更してレンダリングしてみましょう。
3.5.4 テキストの位置と向きと大きさ
textというプリミティブは、それ自体の位置と向きと大きさが固定されていますので、位置 を変更したり向きを変更したり大きさを変更したりするためには、変形を使う必要があります。
次のシーンは、4個のテキストを作っています。位置と向きと大きさがそのままのもの、位置 を変更したもの、向きを変更したもの、大きさと位置を変更したものです。
シーンの例 text2.pov
#declare Text = text { ttf "timrom.ttf", "m", 1, 0 } camera {
location <0, 2, -3>
look_at 0 angle 70 }
light_source { <-5, 5, -5> color rgb 1.6 } object {
Text
pigment { color rgb 1 } }
object { Text
pigment { color rgb <0, 1, 1> } translate <1, 0, 0>
}
object { Text
pigment { color rgb <1, 1, 0> } rotate -135*z
}
object { Text
pigment { color rgb <1, 0, 1> } scale 2
translate <-2, 0, 0>
}
位置や向きや大きさをいろいろと変更してレンダリングしてみましょう。
3.5.5 文字間隔
テキストを作る記述の中には、文字間隔を指定するベクトルを書くわけですが、先ほども説明 したとおり、0と書けば、普通の間隔になります。
0以外のベクトルを文字間隔として記述することによって、x軸方向とy軸方向の間隔を指定 することができます。
次のシーンは、二つのテキストを作っています。ひとつは文字間隔が0.7*xで、もうひとつは 文字間隔が0.3*yです。
シーンの例 offset.pov camera {
location <3, 3, -5>
look_at <3, 1, 0>
angle 70 }
light_source { <-5, 5, -5> color rgb 1.6 } object {
text { ttf "timrom.ttf", "hitode", 1, 0.7*x } pigment { color rgb 1 }
}
object {
text { ttf "timrom.ttf", "kamenote", 1, 0.3*y } pigment { color rgb 1 }
3.6. ブロブ 35