博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
povray[0] = 第一幅画
阅读量:6529 次
发布时间:2019-06-24

本文共 2154 字,大约阅读时间需要 7 分钟。

前言

povray 是用来画画的,它的全称是 Persistence of Vision Raytracer。

我不会画画。我的一个朋友遭遇短期囹圄之灾后,一直闭门在家画画……不过,没遭此灾时,他也是一直闭门在家画画。他最近在学 3D MAX。我说,可以学 povray 阿,他说这玩意能画 18X 吗……

不能!povray 虽然也能画,但是它能画的东西,是 CSG 形体,也就是可以用球、方块、锥体、圆柱、圆环等基本形体堆砌而成的形体。理论上,任何三维形体可以用一堆小方块堆砌而成,这些小方块叫做体素。简而言之,povray 适合画 Minecraft。

povray 虽然不擅长绘画,但是它擅长摆弄光线。没有了光,我们只能画一群乌鸦在夜里飞。povray 提供了一种三维场景描述语言。利用这种语言,可以描述相机是如何摆放的,物体的位置以及它们的表面是什么颜色的,光源在哪个方位以及它发出什么颜色的光。povray 可以根据这些描述,绘制一幅「照片」级别的画。

可通过以下命令在 Gentoo 中安装 povray:

$ sudo emerge -avt povray

下面,通过这种三维场景语言,描述一个只存在一个球体的三维场景,初步了解一下 povray 的能耐。

下文中的 povray 三维场景代码,是以 orez 源文件中的代码片段的形式给出的。可从「」了解 orez 的用法。

准备

可能是从 3.7 版本(我写此文时最新的 povray 版本)开始,povray 的三维场景文件的首部必须放置版本声明语句:

@ 版本声明 ##version 3.7;@

相机

下面的代码定义了一个相机,它位于 (0, 2, -3),所拍摄的画面的中心位于 (0, 1, 2)

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

若要在大脑中构建出这个相机的方位,需要了解 povray 的坐标系。povray 的坐标系是左手系。以计算机屏幕为参考平面,X 轴表示水平方向,自左向右;Y 轴表示竖直方向,自下向上;Z 轴表示垂直于屏幕的方向,自外向内。坐标原点位于屏幕中心。

物体

在相机拍摄的画面的中心位置 (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 文件。

转载地址:http://wcxbo.baihongyu.com/

你可能感兴趣的文章
C# 延时小函数 很好用
查看>>
Nginx出现413 Request Entity Too Large错误解决方法
查看>>
Future、FutureTask实现原理浅析(源码解读)
查看>>
android loading界面 及 处理
查看>>
【排序】BubbleSort
查看>>
Windows界面编程第九篇 位图显示特效 交错效果
查看>>
移动端touch实现下拉刷新
查看>>
C/C++中的volatile关键字
查看>>
ASP.NET Core 微服务初探[2]:熔断降级之Polly
查看>>
POJ 3264 Balanced Lineup
查看>>
poj1000
查看>>
【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数
查看>>
从程序员到项目经理(一)
查看>>
Java读取Properties文件的六种方法 .
查看>>
Android中的Shape使用总结
查看>>
Duanxx的STM32学习:STM32命名规则
查看>>
【iCore3 双核心板_ uC/OS-III】例程三:任务的挂起与恢复
查看>>
开源实时日志分析ELK平台部署
查看>>
一起谈.NET技术,使用VS2010的Database项目模板统一管理数据库对象
查看>>
taro 创建 Tabbar
查看>>