画了一个 Menger 海绵。用povray 运行代码即可。
- #include "colors.inc"
- camera {
- location <150, 450, -300>
- look_at <150, 150, 150>
- right x*image_width/image_height
- up y
- }
- light_source {
- <150, 800, -500>
- color rgb <1, 1, 1>
- }
- #declare T_Cube =
- texture {
- pigment {
- color rgb <1, 0.2, 0>
- }
- }
- #declare T_Menger =
- texture {
- pigment {
- bozo
- color_map {
- [0 color White*0.7]
- [1 color White*1.1]
- }
- }
-
- normal {
- agate 0.3
- scale <1, 1, 1>*1.6
- }
-
- finish {
- ambient Black
- diffuse 0.8
- specular 0.1
- roughness 0.1
- brilliance 1
- metallic
- }
-
- scale <1, 1, 1>*0.4
- }
- #declare prod1 = -0.1;
- #declare prod2 = 1.1;
- #macro RemoveCubes(level)
- #local cubelen = 1.0 / pow(3, level+1);
- #local dz = cubelen;
-
- #while (dz <= 1)
- #local dy = 1.0 / pow(3, level+1);
- #while (dy <= 1)
- box{ <prod1, dy, dz>, <prod2, dy+cubelen, dz+cubelen> texture { T_Cube }}
- box{ <dy, dz, prod1>, <dy+cubelen, dz+cubelen, prod2> texture { T_Cube }}
- box{ <dy, prod1, dz>, <dy+cubelen, prod2, dz+cubelen> texture { T_Cube }}
-
- #if (level<2)
- light_source { <(prod1+prod2)/2, dy, dz> color rgb <1, 1, 1>}
- light_source { <dy, dz, (prod1+prod2)/2> color rgb <1, 1, 1>}
- light_source { <dy, (prod1+prod2)/2, dz> color rgb <1, 1, 1>}
- #end
-
- #local dy = dy + 1.0 / pow(3, level);
- #end
- #local dz = dz + 1.0 / pow(3, level);
- #end
- #end
- #declare menger =
- difference {
- box { <0, 0, 0>, <1, 1, 1> }
- RemoveCubes(0)
- RemoveCubes(1)
- RemoveCubes(2)
- RemoveCubes(3)
- }
- object {
- menger
- texture{ T_Menger }
- scale 300
- }
复制代码 |