前一篇: [url=http://kidneyball.iteye.com/blog/1330056]分形绘图简介(一) 什么是分形绘图[/url]
首先隆重推介一下 分形艺术网 ( http://www.fxysw.com/ ),上面有不少绘制分形图的软件、教程和示例。我也是通过这个网站才知道了Apophysis 7X这款软件。
[b]Apophysis 7X简介[/b]
Apophysis 7X是一款用dephi写的开源分形图软件 ( http://sourceforge.net/projects/apophysis7x/ )。它是Apophysis的改进版 ( http://apophysis.org/ ),适用于在win7下运行。它使用了一种叫“分形火焰算法”(Fractal Flame Algorithm)的算法来绘制分形图。关于这种算法以后再来讨论。要想知道这种算法能画出什么样的分形图来,很简单,在google图片里搜索“apophysis”就能找出一大堆示例。反正当时是把我眼珠子都看到掉出来了,随便转一幅:
[img]http://dl.iteye.com/upload/attachment/614531/a4e097cb-2db6-307a-b559-d2efbd39f556.jpg[/img]
[b]其他相关软件和资源[/b]
当然,基于delphi的Apophysis只能在windows下运行。如果是非windows平台,也有其他选择,例如:
Fr0st ( http://fr0st.wordpress.com/ ):跨平台,基于python
Qosmic ( http://code.google.com/p/qosmic/ ):Linux
Oxidizer ( http://draves.org/blog/archives/000365.html ):Mac OS X
另外,有一款适用于上述所有软件的外部渲染器 flame3。可以在 http://code.google.com/p/flam3/downloads/list 下载。据说相对于Apophysis内部自带的渲染器,很多人更喜欢用这个外部渲染器来渲染最终作品。但我还没有测试过(懒得装),现在正在把玩阶段,用内部的渲染器也还凑合了。
此外,分形艺术网提供了目前能找到的大部分Apophysis插件打包下载(410个, http://www.fxysw.com/thread-764-1-1.html ),以及相当不错的中文视频教程 ( http://www.fxysw.com/thread-462-1-1.html )。
[b]初步把玩Apophysis 7X[/b]
撇开高深的公式,算法。我们先来把玩一下这个Apophysis 7X。
话说这种分形绘图的一个最大好处是,我们甚至根本不用真正动手去画什么,通过配置几个参数,就能得到一幅看上去还不错的图案。虽然这种程度离随心所欲差得还远,但已经足够让我们感受一下分形绘图的魅力了。
Apophysis甚至已经为我们想到了这点,每次我们运行Apophysis,都能看到主界面左边栏有一个列表,里面列出了随机生成的若干幅图片。自然这些图片不会有什么具体的含义,看上去有点像我们小时候玩的“漂墨画”(就是用墨汁漂在水面上,然后盖上宣纸把墨迹印下来,然后再慢慢想这画像什么)。不过有一些看上去已经很不错了,如果你都不喜欢,可以按CTRL+B让系统重新随机生成一批图案。
[img]http://dl.iteye.com/upload/attachment/614565/63a4eb65-7276-379f-be04-f4c1abbee16b.png[/img]
现在我们按F4键,会打开一个Editor窗口,这是Apophysis的公式编辑器,作图工作将主要在这个编辑器里进行。
[img]http://dl.iteye.com/upload/attachment/614567/5b5a1512-681d-356e-848d-d2d4f4e00d02.jpg[/img]
编辑器的左边,可以看到若干个三角形(例子中是6个),每个三角形就代表了一个变换公式。具体是怎么样的公式现在暂时不管,我们可以直接用鼠标拖动这些三角形(拖动顶点改变形状,拖动O顶点所对的边改变大小,推动X或Y顶点的对边旋转,拖动三角形内部改变位置)。可以看到右上角的预览窗口中的图像随即发生变化,放开鼠标后,可以看到主窗口的图案也随之变化。原来这么复杂的一幅图像就是由这6个三角形(正中一个灰色的暂时无法修改)定义出来的。
现在按Ctrl+C (或者选择主窗口上Edit菜单的Copy),然后打开一个文本编辑器(例如记事本),按Ctrl+V。会粘贴出来这样一段代码:
<flame name="Apo3D-111230-203" version="Apophysis 7x Version 15 (High-Memory Version)" size="800 690" center="0.242663060284215 -0.0767561205208778" scale="155.250209029628" oversample="1" filter="0.5" quality="50" background="0 0 0" brightness="4" gamma="4" gamma_threshold="0.01" estimator_radius="9" estimator_minimum="0" estimator_curve="0.4" enable_de="0" plugins="" >
<xform weight="0.2" color="0" swirl="0.725348455598578" foci="0.274651544401422" coefs="0.154001297547229 0.60493504054313 -0.60493504054313 0.154001297547229 0.462375303264707 -0.591377515345812" opacity="1" />
<xform weight="0.2" color="0.25" diamond="0.460409770254046" eyefish="0.539590229745954" coefs="0.489791501228399 0.109636440641612 0.303588756893197 -0.610869702495761 0.186051276978105 -0.114412325434387" opacity="1" />
<xform weight="0.2" color="0.5" spherical="0.774037769529969" horseshoe="0.225962230470032" coefs="0.168981108687069 0.271618805519773 -0.310423651956211 0.215587926970483 -0.304375217761844 0.56909538153559" opacity="1" />
<xform weight="0.2" color="0.75" eyefish="0.586237216368318" foci="0.413762783631682" coefs="-0.261984779246266 -0.664561348859473 0.720609440257043 -0.431218567826034 0.616186554078013 -0.214467371813953" opacity="1" />
<xform weight="0.2" color="1" eyefish="0.0815337933599949" rings2="0.918466206640005" coefs="-0.350262103666607 0.212207197728675 -0.0423569159730609 -0.298928331118831 0.878593480680138 0.655165375210345" rings2_val="0.2189" opacity="1" />
<palette count="256" format="RGB">
0627421B3E6361444B9C4326D87503EB8E03FEAC03FAD4A3
FCE7DAEEE2F7EFE5F9EDDDFADCCFF4CBC8F3C6C2EBC6ADD4
CDA2A7CB8A2AE99102F29401FA9D06D7AF8CCBAFC3BEA4C3
BE9489D88716D77D0AAB661781642F795F90808EAEADA1DD
B7AAE4BAADE5BCAFEDBCB4EFBFB2F2BFB0F1C3ABE6C1A6F0
C4A7E7C3A8E5B9A4DCB1A0D2898B8D86523C8D2612741801
701001731C06783D3467499F4024A61D28AF182AA7082FAA
0226AC0722B20930B91336BA1743C2283BB9343DB74144BF
4446BF4D56C75459C9696ACB7272DFB295DDC19DD3D3ACA4
F89E0BFEA503FCAC08EABFB0DBC4CFD4C1D8CFC0DBCDB1E3
CBB3E3C5B7EEC4BDF4C2B8F4C8BBF5CDC7FBD5D7FBD9D6FE
ECE9FAF7E8FDFBEEFDFBF2FBFCF3FBFBF0FCF3E7FBE9DBE7
EBD4D6D5B6DACCA4A9A16E62733B2B7728037C1F05842708
AE4907DF8005F39D0AE8B3A7E0C4D2EFCDD3F1DDDAEADFEE
ECE1F8E6D9F7E5CEEADBCDDBD6C4D2D7B8A3F69E07F9A503
F5A004F19203E98902DC7A07A15833997F82AC91C2BFA0D6
C0A4E1C0A2E6B99FE8B19CE29093DF6283DC517CD64073CB
3D75B53E6FAF456AA2426A9431649A1957961E50910D4282
11467920506744526358220B6911066A130377381F724C53
7665A7A196D9B0ACE9B3B1E9B0B7F2ABB1EEA8B5F1B1B9F2
B2BCF1B2BEF7BDC4FCC2D0FACBCBF3C5C6F4C4C3F3C0C4F4
C4C1EEC0BBEFB7BFF0B6BEF4BCBFE0B9B3E0B9ABD2AB90B1
AF815CE18A01EA8C01F09204F59706DBA88AC19DCEAD9DDB
6C7BCB537ACF467FBD4074B43D71A838619E1E598E235A80
1E597D164D7812446E1437585D0806640903760E01882906
D97103E38901DF8403A5631490371E7F2006741A06702E2C
6F47625C5D986B6EB06673C86E76D5928EDEADA3E0B6AFE5
B8B3E9B8B1ECB6ACEFB2AAEFAEADEDAAA0E16C78DA627DD2
5477DA5179D9477BDA4873D44F72D05774CE576ACB5564CA
4A5CC6395AD1375FCE3D58C33D4FBA3353C22150C32057C6
205AC93368D33A66CE3D6AB53E6EB24873A5496EA04B5F9B
4B6091445B952760941F518F1D5289174F79194078113C64
</palette>
</flame>
这就是描述这幅图像的全部信息,以后只要把这段文本直接复制粘贴到Apophysis 7X中(直接在Apophysis 7X中按Ctrl+V进行粘贴),就能重现这幅图像。如果我们在一些网站中看到带有这种代码的示例图形,直接把代码复制到软件中即可。 细心一点的话可以发现,上面的xml片段中,5个xform元素分别描述了5个三角形变换信息。最后的一坨数据,是图像中使用的渐变颜色方案。
这种形式的图像信息,在Apophysis中称为“参数”(Parameter)。我们可以发现,在File菜单下,没有“Save”选项(估计是为了避免歧义),只有“Save parameters”选项。事实上就是保存这种图像参数文件,后缀名为.flame。
[b]渲染图形[/b]
在Apophysis中创作出心仪的作品后,需要把它渲染为最终的图形文件输出。在软件的主窗口中所看到的图像出于编辑效率的考虑,还是比较粗糙的,有很多噪点。真正渲染出来的图形会比它要细腻。在主窗口中按Ctrl+R,或者选择工具栏中的“Render flame”按钮(一个小齿轮图标),将会弹出渲染对话框。
[img]http://dl.iteye.com/upload/attachment/614583/e7652030-9e4f-36db-a2dd-b682dc511188.jpg[/img]
简单介绍一下各个项目:
Destination : 输出文件名称,可以选择png或jpg后缀
Size : 输出图像尺寸
Density : 函数递归深度 (此数字越大,图像越细致,渲染速度越慢。但超过一定上限后,深层的递归图形超出了像素的精度,对图像的精度就不会再有实质的影响,但仍然会影响速度。因此需要根据图像尺寸进行选择,一般在200,500,1000中选择)
Filter Radius : 反锯齿强度。此数字越小,锯齿越明显,越大,线条边界越模糊。一般就用默认值0.4
Oversample : 为了更准确地计算亮度与颜色所使用的冗余采样率。此数越大则渲染速度越慢,小了则可能丢失一些亮度与颜色层次。一般就用默认值2。
Buffer depth : 未知有何影响,一般就用默认值。
Memory limit : 如果渲染所需内存超出可用物理内存(特别在windows下,单个应用最多可用内存为2G),则设置这个使用内存上限。虽然损失速度,但能保证正确渲染。特别要注意的是,这里的限制是渲染图像所使用的内存,渲染后进行存盘时还需要一些额外的内存。因此最好再预留200M左右的空余内存用于存盘。
Save parameters : 渲染时是否同时保持一份当前的图像参数文件(就类似上面复制粘贴的xml格式)。
下一篇 : [url=http://kidneyball.iteye.com/blog/1332865]分形绘图简介(三) 界面操作[/url]