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.png 文件。