povray[0] = 第一幅畫

前言

povray 是用來畫畫的,它的全稱是 Persistence of Vision Raytracer。segmentfault

我不會畫畫。個人一個朋友遭遇短時間囹圄之災後,一直閉門在家畫畫……不過,沒遭此災時,他也是一直閉門在家畫畫。他最近在學 3D MAX。我說,能夠學 povray 阿,他說這玩意能畫 18X 嗎……工具

不能!povray 雖然也能畫,可是它能畫的東西,是 CSG 形體,也就是能夠用球、方塊、錐體、圓柱、圓環等基本形體堆砌而成的形體。理論上,任何三維形體能夠用一堆小方塊堆砌而成,這些小方塊叫作體素。簡而言之,povray 適合畫 Minecraft。spa

povray 雖然不擅長繪畫,可是它擅長擺弄光線。沒有了光,咱們只能畫一羣烏鴉在夜裏飛。povray 提供了一種三維場景描述語言。利用這種語言,能夠描述相機是如何擺放的,物體的位置以及它們的表面是什麼顏色的,光源在哪一個方位以及它發出什麼顏色的光。povray 能夠根據這些描述,繪製一幅「照片」級別的畫。操作系統

可經過如下命令在 Gentoo 中安裝 povray:code

$ sudo emerge -avt povray

下面,經過這種三維場景語言,描述一個只存在一個球體的三維場景,初步瞭解一下 povray 的能耐。blog

下文中的 povray 三維場景代碼,是以 orez 源文件中的代碼片斷的形式給出的。可從「orez 的故事」瞭解 orez 的用法。圖片

準備

多是從 3.7 版本(我寫此文時最新的 povray 版本)開始,povray 的三維場景文件的首部必須放置版本聲明語句:文檔

@ 版本聲明 #
#version 3.7;
@

相機

下面的代碼定義了一個相機,它位於 (0, 2, -3),所拍攝的畫面的中心位於 (0, 1, 2)get

@ 設定相機 #
camera {
  location <0, 2, -3>
  look_at  <0, 1,  2>
}
@

若要在大腦中構建出這個相機的方位,須要瞭解 povray 的座標系。povray 的座標系是左手系。以計算機屏幕爲參考平面,X 軸表示水平方向,自左向右;Y 軸表示豎直方向,自下向上;Z 軸表示垂直於屏幕的方向,自外向內。座標原點位於屏幕中心。it

物體

在相機拍攝的畫面的中心位置 (0, 1, 2) 放置一個半徑爲 2 的黃色球體:

@ 球體 #
sphere {
  <0, 1, 2>, 2
  texture {
    pigment { color Yellow }
  }
}
@

按照 povray 三維場景語法,Yellow 實質上是:

rgb <1, 1, 0>

因爲它是常見的顏色,povray 在 colors.inc 文件中對它進行了定義:

#declare Yello = rgb <1, 1, 0>;

colors.inc 文件的位置依賴於操做系統以及你的安裝方式而定。在個人機器上,它位於 /usr/share/povray/include。若在場景文件中使用 colors.inc 中定義的顏色,須要使用 #include 指令加載它:

@ 預約義的場景文件 #
#include "colors.inc"
@

光源

(2, 4, -2) 處放置一個白色光源:

@ 設定光源 #
light_source {
  <2, 4, -2>
  color White
}
@

渲染

將上述語句塊組合起來即可獲得一份完整的 povray 三維場景文件:

@ 只存在一個球體的場景 #
# 版本聲明 @

# 預約義的場景文件 @

# 設定相機 @

# 設定光源 @

# 球體 @
@

如今,可將這份描述了相機、物體以及光源等信息的三維場景文件交由 povray 解析、渲染、輸出。

可使用 orez 工具,從本文檔中提取所有的三維場景代碼:

$ orez povray-0.md -t -e "只存在一個球體的場景" -o sphere.pov

其中 povray-0.md 是本文檔的文件名,sphere.pov 是存放三維場景代碼的文件。

照顧一下不懂 orez 的人,下面給出 sphere.pov 文件的所有內容:

#version 3.7;
#include "colors.inc"

camera {
  location <0, 2, -3>
  look_at  <0, 1,  2>
}

sphere {
  <0, 1, 2>, 2
  texture {
    pigment { color Yellow }
  }
}

light_source {
  <2, 4, -2>
  color White
}

使用如下命令,可將場景文件 sphere.pov 交由 povray 解析,以得到渲染結果 sphere.png :

$ povray sphere.pov

在 X11 環境(大部分 Linux 桌面的基本圖形環境)中,povray 會在自身運行過程當中,將渲染結果逐漸的在一個 X11 窗口中顯示出來,待其運行過程結束後,這個 X11 窗口會自動關閉,最終的渲染結果默認保存於 PNG 格式的圖片文件。

對於上述示例而言,會出現相似於下圖所示的 X11 窗口:

sphere

渲染結果會被保存爲 sphere.png 文件。

相關文章
相關標籤/搜索