情報メディアリテラシII | - |
|
- |
|
前回までの演習では、C言語を利用して2次元模様を作ることに取り組んでいました。今週からはPOV-Rayを使って3次元CGに挑戦することにします。前回の演習でプレゼンテーションをしなかった人も自分で作った模様の画像とCのソースコード(main.c)は提出してください。少し成績は下がりますが、今回は特例ということで、遅れでも提出を受け付けることにします。まだ提出していない人も、kadai@sato-lab.jpまで大至急課題を送ってください。演習系の科目では、決められた期間内に課題を出すことが単位を取得することの大前提です。この情報メディア演習IIは神奈川工科大学情報学部情報メディア学科の1年次の必修科目なので、がんばって課題を出してください。 提出していない人は、必修科目の意味することをよく考えてください。
前回までの演習では、C言語を利用して2次元模様を作ることに取り組んでいました。今週からはPOV-Rayを使って3次元CGに挑戦することにします。
POV-Ray(ポブレイと呼びます)は、世界中で使われている3次元CG用フリーソフトウェアの一つです。パソコンからスパーコンピュータまで、様々なコンピュータで利用できます。POV-Rayは、3次元形状の形をプログラムのような方法で指定する(これをシーンファイルと呼びます)し、レイトレーシング法によって高品質な画像を生成することが出来ます。
今回は、POV-Ray入門の第1回目なので、ソフトウェアのインストールや簡単なシーンファイルの作成を行います。
POV-Rayはシーンファイル(Scene File)というテキスト形式のファイルから画像を作り出します。このシーンファイルの中には、物体形状の情報、カメラ(視点)の情報、光源の情報などを記述します。下にシーンファイルの簡単なサンプルを示します。
|
POV-Rayでは次のような手順で画像を作り出します。
POV-Rayの起動 | ⇒ | シーンファイルを書く | ⇒ | レンダリングの実行 | ⇒ | 画像ファイルの完成 |
起動時にメッセージなどを表示するウィンドウが開くことがありますが、 そのような場合には全て[OK]ボタンを押して閉じてしまって下さい。
これとか | これ |
---|---|
![]() |
![]() |
"New"ボタンを押す前 | "New"ボタンを押した直後 |
---|---|
![]() |
![]() |
ここに、上のシーンファイルの簡単なサンプルの内容を書き込んで下さい。 POV-Rayでは、大文字と小文字を区別するの注意して入力してください。
"Save"ボタンを押す前 | "Save"ボタンを押した直後 |
---|---|
![]() |
![]() |
ファイル保存ダイアログが現れるので、適当な場所に、適当なファイル名をつけて、保存して下さい。 ただし、ファイル名の終わり(拡張子)は.povとして下さい。
レンダリング終了すると、画像が表示されます。いくつかのウインドウが表示されますが、Okボタンをクリックしてください。
シーンファイルに何らかのエラーがあると、次の画面のように、エラーがある行の色が変わります。 この場合はうち間違いがないかなどを調べてください。この例では、"Red"ではなく"red"になっています。
画像を表示しているウインドウの”閉じる”ボタンをクリックすると、画像ウインドウを閉じることが出来ます。
ここまでできたら、先生かTAの人にOKをもらってください。 確認をしてもらう前には、画像ウインドウを閉じないでください。
先ほど入力したものを一部変えたサンプルを下に示します。
|
←カメラ(視点)の設定です。 ←ライト(光源)の設定、ライトは2本です。 ←3次元形状の設定です。 形の情報はobjectの中に書きます。 |
camera{
location < 10,5,-10 >
look_at < 0,0,0 >
angle 20
}
の部分で、カメラ(視点の設定)をしています。
"location{・・・}"の部分では、カメラの位置を指定しています。数学などでは3次元空間の点の座標を表すのに(x座標の値,y座標の値,z座標の値)と書きますが、 POV0-Rayでは3次元空間の点の座標を表すのに<x座標の値,y座標の値,z座標の値>と書きます。従って、この例では(10,5,-10)という場所にカメラが置かれています。
"look_at"の部分では、カメラが見ている場所を指定しています。この例では、カメラは原点の方を向いていることになります。また、"angle"の部分では、画角を六十分法で指定してます。数字が大きくなると広角レンズのようになります。
"object{・・・}"の部分では、表示する形状や色などを指定しています。 この例では、物体形状としてSphereとなっているので、物体の形状は中心が原点(0,0,0)で半径1の球となっています。 また、"object{・・・}"内のの"pigment{color Yellow}"の部分で色を指定しています。この場合は、Yellowなので黄色となります。
上でも書いたように、色は"object{・・・}"内にある"pigment{・・・}"の部分で設定をします。 色の指定の仕方は、上の例のように英語名で設定する方法と、RGB値を利用して設定する方法の2つがあります。
RGB値で設定する場合には、2つの方法があります。
一つ目の方法は、"pigment{color < R値,G値,B値 >}"のように設定するものです。 POV-Rayの場合、red,green,blueの後に指定する数値は0〜1までの実数値となります。 例えば、赤色を設定する場合には、"pigment{colro red 1 green 0 blue 0}"となります。 黄色にするには、"pigment{color < 1,1,0 >}"とします。 また、"pigment{color < 0.5,0.5,0.5 >}"とすると灰色になります。
二つ目の方法は、"pigment{color red R値 green G値 blue B値}"のように設定します。 一つ目の方法と同じく、red,green,blueの後に指定する数値は0〜1までの実数値となります。 例えば、赤色を設定する場合には、"pigment{colro red 1 green 0 blue 0}"となります。黄色にするには、 "pigment{color red 1 green 1 blue 1}"とします。 また、"pigment{color red 0.5 green 0.5 blue 0.5}"とすると灰色になります。
英語名で設定する場合には、例で取り挙げた"Yellow"や"White"のように先頭の文字を大文字にする必要があります。 例えば、ピンク色にする場合には、"pigment{color Pink}"となります。 英語名で設定できる主な色は、次の表のような色です。この色の情報は、colors.incの中で定義されています。
物体の色の強さを変えるには、"pigment{color 2*< 1,0,0 >}"や"pigment{color 2*Red}"などのように"数字*"とします。 "pigment{color 0.5*< 1,1,0 >}"の0.5のように1より小さな値を指定すると色は弱くなります。 "pigment{color 1.5*Pink}"の1.5のように1より大きな値を指定すると色は強くなります。
色名 | 色表示 | 色名 | 色表示 | 色名 | 色表示 |
---|---|---|---|---|---|
Red | Green | Blue | |||
Yellow | Cyan | Magenta | |||
Clear | White | Black | |||
Gray05 | Gray10 | Gray15 | |||
Gray20 | Gray25 | Gray30 | |||
Gray35 | Gray40 | Gray45 | |||
Gray50 | Gray55 | Gray60 | |||
Gray65 | Gray70 | Gray75 | |||
Gray80 | Gray85 | Gray90 | |||
Gray95 | DimGray | DimGrey | |||
Gray | Grey | LightGray | |||
LightGrey | VLightGray | VLightGrey | |||
Aquamarine | BlueViolet | Brown | |||
CadetBlue | Coral | CornflowerBlue | |||
DarkGreen | DarkOliveGreen | DarkOrchid | |||
DarkSlateBlue | DarkSlateGray | DarkSlateGrey | |||
DarkTurquoise | Firebrick | ForestGreen | |||
Gold | Goldenrod | GreenYellow | |||
IndianRed | Khaki | LightBlue | |||
LightSteelBlue | LimeGreen | Maroon | |||
MediumAquamarine | MediumBlue | MediumForestGreen | |||
MediumGoldenrod | MediumOrchid | MediumSeaGreen | |||
MediumSlateBlue | MediumSpringGreen | MediumTurquoise | |||
MediumVioletRed | MidnightBlue | Navy | |||
NavyBlue | Orange | OrangeRed | |||
Orchid | PaleGreen | Pink | |||
Plum | Salmon | SeaGreen | |||
Sienna | SkyBlue | SlateBlue | |||
SpringGreen | SteelBlue | Tan | |||
Thistle | Turquoise | Violet | |||
VioletRed | Wheat | YellowGreen | |||
SummerSky | RichBlue | Brass | |||
Copper | Bronze | Bronze2 | |||
Silver | BrightGold | OldGold | |||
Feldspar | Quartz | NeonPink | |||
DarkPurple | NeonBlue | CoolCopper | |||
MandarinOrange | LightWood | MediumWood | |||
DarkWood | SpicyPink | SemiSweetChoc | |||
BakersChoc | Flesh | NewTan | |||
NewMidnightBlue | VeryDarkBrown | DarkBrown | |||
DarkTan | GreenCopper | DkGreenCopper | |||
DustyRose | HuntersGreen | Scarlet | |||
Med_Purple | Light_Purple | Very_Light_Purple |
これが出来たら、先生かTAの人に確認をしてもらったください。
これが出来たら、先生かTAの人に確認をしてもらったください。
"object{・・・}"内の形にかかわる部分を変えると、球以外の図形を描くことが出来ます。 上の例では、"object { Sphere ・・・}"となっているので球が描かれています。 POV-Rayでは、球や立方体、円錐、円柱などの基本的な形状が用意されています。 これらの形状はプリミティブ(基本形状)と呼ばれます。 "object{・・・}"内のSphereを、以下の表の命令に置き換えると、立方体、円錐、円柱などを位置に作り出すことが出来ます。
形状 | 命令 |
---|---|
立方体 | Cube |
円錐(x軸方向) | Cone_X |
円錐(y軸方向) | Cone_Y |
円錐(z軸方向) | Cone_Z |
円柱(x軸方向) | Disk_X |
円柱(y軸方向) | Disk_Y |
円柱(z軸方向) | Disk_Z |
これが出来たら、先生かTAの人に確認をしてもらったください。
これが出来たら、先生かTAの人に確認をしてもらったください。
回の利用がありました。