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

相关文章
相关标签/搜索