いきなり実践っぽいことをやります。#2 までで説明したことでは当然出来ません^^; とにかくソースを見てください。
1: /****************************************************************************** 2: INCLUDE FILE SECTION 3: ******************************************************************************/ 4: // 5: // Pov-Ray common include file 6: // 7: #include "colors.inc" 8: #include "shapes.inc" 9: #include "textures.inc" 10: #include "glass.inc" 11: // 12: // My include file 13: // 14: #include "include/terrain.inc" 15: #include "include/traj_pnt501000.obj" 16: 17: /****************************************************************************** 18: CAMERA AND LIGHT SOURCE SECTION 19: ******************************************************************************/ 20: // Locations of camera 21: camera { 22: location <-0.6,1.6,-2.0> 23: look_at <0,0,0> 24: angle 60 25: } 26: 27: // Light sources 28: light_source{ <-10, 15, -10> color White } 29: light_source{ <-10, 15, -5> color Yellow*0.5 } 30: light_source{ <-5,0,-5> color White*0.2 } 31: 32: 33: /****************************************************************************** 34: BACKGROUND SECTION 35: ******************************************************************************/ 36: //background {color DarkSlateGray} 37: background {color White} 38: 39: 40: /****************************************************************************** 41: MAIN 42: ******************************************************************************/ 43: 44: // Map Boundary 45: #include "include/domain.inc" 46: 47: // Terrain 48: #include "include/drawter.inc" 49: 50: // Flying ball 51: object{ T501001 } 52: object{ T501051 } 53: object{ T501101 } 54: object{ T501151 } 55: object{ T501201 } |
1〜16行目 | インクルードファイルの指定をしています。「INCLUDE FILE SECTION」 での "My include file"より上の行は POV-Ray 提供のものです。 |
17〜32行目 | カメラの位置と光源を定義しています。光源は複数個おくことが できます。色のあとの *0.5 や *0.2 は光の明るさを倍率で指定します。 カメラの項において angle とあるのは視野の範囲を角度で指定します。 簡単に言えば広角で撮るか望遠でとるかを指定するということです。 |
37行目 | #2 での例は背景が真っ暗でしたが色を指定することもできます。 |
40〜55行目 | 物体の定義等をしています。この例のように途中に #include がきても構いません。 |
球はなんとなく出来そうだと思うのですが、地形はどうやったらできるのでしょうか? POV-Ray にはやはりオブジェクトで「ハイトフィールド」というものが ありますのでこれを利用します。以下のソースをご覧下さい。
1:#declare TERRAIN = object{ 2: height_field{ 3: tga "terrain.tga" 4: water_level 0.01 5: smooth 6: } 7: texture{ 8: pigment{ 9: gradient y 10: color_map{ 11: [0.000 color rgbt <0.00 0.00 0.80 0.0>] 12: [0.001 color rgbt <0.11 1.00 0.11 0.0>] 13: [0.067 color rgbt <0.64 0.99 0.64 0.0>] 14: [0.167 color rgbt <0.96 0.89 0.54 0.0>] 15: [0.333 color rgbt <0.87 0.68 0.24 0.0>] 16: [0.667 color rgbt <0.53 0.40 0.09 0.0>] 17: [1.000 color rgbt <0.60 0.55 0.66 0.0>] 18: } 19: } 20: } 21: 22: translate <-0.5,0,-0.5> 23: scale <2,0.4,2> 24: } |
ハイトフィールドでは TGA 形式のファイルを読み込みます。ここでは terrain.tga というファイルを読み込んでいます。この画像は下のような 図です。この図の黒いところは低いところに対応し白いところは高いところに 対応するものとして POV-Ray は計算をしてくれます。それを利用して 地形に対応して白黒を変化させた画像を TGA 形式で保存すれば任意の 地形が簡単に作れます。
texture の部分に pigment という部分があると思います。 texture はどのような物質かということを定義する場所なのですが、 その中で pigment は色担当だと思ってください。pigment の領域で カラーマップを指定しています。そして translate で移動、scale で 大きさを調整しています。
このようにちょっと複雑になってきたら新たな名前で定義することが #define を使うと出来ます。上の例では地形表示の命令群を TERRAIN という名前で定義しています。
このファイルで実際に地形を書かせます。すでに地形はオブジェクト TERRAIN として定義されている(はずな)ので object{ TERRAIN } とすることにより 表示します。その他の指定は今は忘れてください。
1: /* terrain.inc を読んでいる必要があります。 */ 2: 3: difference{ 4: difference{ 5: object { TERRAIN scale <1,0.5,1> } 6: object { 7: Plane_YZ 8: pigment{ 9: color Brown 10: } 11: inverse 12: translate 0.9999*x 13: } 14: object { 15: Plane_YZ 16: pigment{ 17: color Brown 18: } 19: translate -0.9999*x 20: } 21: object { 22: Plane_XY 23: pigment{ 24: color Brown 25: } 26: translate -0.9999*z 27: } 28: object{ 29: Plane_XY 30: pigment{ 31: color Brown 32: } 33: translate 0.9999*z 34: inverse 35: } 36: } 37: object{ Plane_XZ translate -0.0001*y} 38: } |
このファイルでは外枠と海を描かせています。
浮かべるための球が定義されています。
1: #declare T501001 = object{ 2: Sphere 3: texture{ pigment{ color Yellow } } 4: translate <0.0924369747899159/0.02,0.352806666666667/0.02,-0.0458715596330275/0.02> 5: scale 0.02 6: } 7: #declare T501002 = object{ 8: Sphere 9: texture{ pigment{ color Yellow } } 10: translate <0.0936134453781512/0.02,0.355606666666667/0.02,-0.049908256880734/0.02> 11: scale 0.02 12: } (以下省略) |
ここはいままでの説明以上のことはしていません。ただひたすら定義して います。そしてこのたくさん定義した球の中から5つ選んだのが sample2.pov での51〜55行目です。
sample2.pov を実行させた結果が上の図となります。これだけのことで 発表に使えそうな図を作ることができます。