博士家园

查看: 638|回复: 2

Menger Sponge

[复制链接]
发表于 2018-1-30 14:51:02 | 显示全部楼层 |阅读模式
画了一个 Menger 海绵。用povray 运行代码即可。



  1. #include "colors.inc"

  2. camera {
  3.   location <150, 450, -300>
  4.   look_at  <150, 150, 150>
  5.   right x*image_width/image_height
  6.   up y
  7. }

  8. light_source {
  9.   <150, 800, -500>
  10.   color rgb <1, 1, 1>
  11. }

  12. #declare T_Cube =
  13.   texture {
  14.     pigment {
  15.       color rgb <1, 0.2, 0>
  16.     }
  17.   }

  18. #declare T_Menger =
  19.   texture {
  20.     pigment {
  21.       bozo
  22.       color_map {
  23.         [0 color White*0.7]
  24.         [1 color White*1.1]
  25.       }
  26.     }
  27.    
  28.     normal {
  29.       agate 0.3
  30.       scale <1, 1, 1>*1.6
  31.     }
  32.    
  33.     finish {
  34.       ambient Black
  35.       diffuse 0.8
  36.       specular 0.1
  37.       roughness 0.1
  38.       brilliance 1
  39.       metallic
  40.     }
  41.    
  42.     scale <1, 1, 1>*0.4
  43.   }

  44. #declare prod1 = -0.1;
  45. #declare prod2 = 1.1;

  46. #macro RemoveCubes(level)
  47.   #local cubelen = 1.0 / pow(3, level+1);
  48.   #local dz = cubelen;
  49.   
  50.   #while (dz <= 1)
  51.     #local dy = 1.0 / pow(3, level+1);
  52.     #while (dy <= 1)
  53.       box{ <prod1, dy, dz>, <prod2, dy+cubelen, dz+cubelen> texture { T_Cube }}
  54.       box{ <dy, dz, prod1>, <dy+cubelen, dz+cubelen, prod2> texture { T_Cube }}
  55.       box{ <dy, prod1, dz>, <dy+cubelen, prod2, dz+cubelen> texture { T_Cube }}
  56.       
  57.       #if (level<2)
  58.         light_source { <(prod1+prod2)/2, dy, dz> color rgb <1, 1, 1>}
  59.         light_source { <dy, dz, (prod1+prod2)/2> color rgb <1, 1, 1>}
  60.         light_source { <dy, (prod1+prod2)/2, dz> color rgb <1, 1, 1>}
  61.       #end
  62.       
  63.       #local dy = dy + 1.0 / pow(3, level);
  64.     #end
  65.     #local dz = dz + 1.0 / pow(3, level);
  66.   #end
  67. #end


  68. #declare menger =
  69.   difference {
  70.     box { <0, 0, 0>, <1, 1, 1> }
  71.     RemoveCubes(0)
  72.     RemoveCubes(1)
  73.     RemoveCubes(2)
  74.     RemoveCubes(3)
  75. }

  76. object {
  77.   menger
  78.   texture{ T_Menger }
  79.   scale 300
  80. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2018-2-1 20:37:12 | 显示全部楼层
是否为中空的呢?
Asymptote 的主页那个是我当年画的,是用最少的曲目片构成,因此里面是空的,人可以无障碍在里面行走,是一个连通的建筑,但我代码那时候写得很乱,也不知如何以中空的形式达到你的这么高阶。
 楼主| 发表于 2018-2-2 17:03:38 | 显示全部楼层
herbertfederer 发表于 2018-2-1 20:37
是否为中空的呢?
Asymptote 的主页那个是我当年画的,是用最少的曲目片构成,因此里面是空的,人可以无障 ...

这个图大概不是你指的那种中空。这个就是普通的CSG,在一个单位正方体里面反复挖去小的立方体,没有挖去的部分仍然是实心的。

对光线追踪技术来说,看不到曲面是不会去计算其颜色的。

关于我们|手机版|博士家园 ( 沪ICP备15045866号 )(沪公网安备沪公网安备 31011702001868号) 

GMT+8, 2018-5-25 01:22 , Processed in 0.253645 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.2

© 2004-2017 Comsenz Inc.

快速回复 返回顶部 返回列表