POV-Ray
此條目需要补充更多来源。 (2020年7月26日) |
開發者 | The POV-Team |
---|---|
当前版本 | 3.7.0(2013年11月9日 | )
预览版本 | 3.7 rc3 |
源代码库 | |
操作系统 | Windows、Mac OS 、Linux |
类型 | 三维计算机图形 |
许可协议 | AGPLv3[1] |
网站 | www.povray.org |
POV-Ray,全名是Persistence of Vision Raytracer,是一个使用光线跟踪绘制三维图像的开放源代码自由軟體。运行POV脚本语言。它是基于DKBTrace来开发的,DKBTrace是由David Kirk Buck和Aaron A. Collins编写在Amiga上的。POV-Ray早期也受到了Polyray raytracer作者Alexander Enzmann的帮助。很多漂亮的图片就是由POV-Ray来制作的。
历史
[编辑]该软件最初发展始于80年代,是一個歷史悠久的三維算圖引擎。David Kirk Buck下载了一个为Unix编写的Amiga光线跟踪软件的原始碼。当他玩了一段时间后,他觉得应该自己写一个类似软件,以自己的名字縮寫命名為DKBTrace,以。於是他將它贴在了一个電子佈告欄上面,以为别人也許对它感兴趣。1987年,Aaron Collins下载了DKBTrace然后开始了x86机器的移植工作。他和David Buck一起合作为它添加了更多功能。
这个软件越來越流行,他们已经为了加新功能而应付不过来。1989年7月,David把这个軟體变成了一个程序员团队合作的項目。这时候,他觉得繼續用自己的名字来命名不甚妥當,因為他已不再維護此軟體。所以考虑了很多新的名字。最初打算使用「STAR-Light」(为动画和渲染而生存的软件:Software Taskforce on Animation and Rendering),但是最后变成了「持续不断更新版本的光线跟踪引擎Persistence of Vision Raytracer」,简写为「POV-Ray」。
POV-Ray是第一个在空间轨道渲染出图片的光线跟踪软件,由马克·沙特尔沃思在国际空间站渲染。
特征
[编辑]POV-Ray不像一般的3D軟體有圖形化使用介面,其使用自有腳本語言來描述場景。POV腳本語言具備圖靈完備性,可以編寫巨集以及迴圈程式。
- 支援幾種幾何元素以及構造實體幾何。
- 物件表面的折射、反射。
- 支援TGA、PNG影像格式
当前版本
[编辑]最新的版本是3.7。
基元
[编辑]场景描述语言(Scene Description Language)例子
[编辑]下面的例子给出了场景描述语言(Scene Description Language)在POV-Ray的一个应用实例。展示了使用视角,光源,一个简单的方块模型和缩放,旋转,平移变换的效果。
#version 3.6; #include "colors.inc" global_settings { assumed_gamma 1.0 } background { color rgb <0.25, 0.25, 0.25> } camera { location <0.0, 0.5, -4.0> direction 1.5*z right x*image_width/image_height look_at <0.0, 0.0, 0.0> } light_source { <0, 0, 0> color rgb <1, 1, 1> translate <-5, 5, -5> } light_source { <0, 0, 0> color rgb <0.25, 0.25, 0.25> translate <6, -6, -6> } box { <-0.5, -0.5, -0.5> <0.5, 0.5, 0.5> texture { pigment { color Red } finish { specular 0.6 } normal { agate 0.25 scale 1/2 } } rotate <45,46,47> }
下面的脚本片段展示了使用变量声明,赋值,比较和while循环结构。
#declare the_angle = 0; #while (the_angle <= 360) box { <-0.5, -0.5, -0.5> <0.5, 0.5, 0.5> texture { pigment { color Red } finish { specular 0.6 } normal { agate 0.25 scale 1/2 } } rotate the_angle } #declare the_angle = the_angle 45; #end