POV-Ray简单上手教程——CSG 物体

CSG Objects(构造立体几何)

CSG(Constructive Solid Geometry),一种利用原始物体(圆/立方体/圆锥等)来构造复杂物体的强有力工具。在本篇中,我会运用POV-Ray,来渲染出一些令人惊奇的物体来。

1.What is CSG?

关于CSG是什么?前面已经做了简单解释,在这里,我主要介绍关于POV-Ray中关于CSG的东西。在POV-Ray渲染CSG物体,主要包括四个不同的方式。

union:几个物体的整合。

intersection:两个或多个形状的结合

difference:在前面,我们已经用到了。主要是一个物体遮掩住其他物体的一部分

merge:类似union,但内部的融合去除了,多用在透明物体上

下面将对以上的四种方式,进行细致的说明

2. CSG Union

 #include "colors.inc"
  camera {
    location <0, 1, -10>
    look_at 0
    angle 36
  }
  light_source { <500, 500, -1000> White }
  plane { y, -1.5
    pigment { checker Green White }   //构建一个白绿相间的平面
  }
union{
    sphere { <0, 0, 0>, 1
      pigment { Blue }
      translate -0.5*x
    }
    sphere { <0, 0, 0>, 1           //两个蓝色和红色的小球
      pigment { Red }
      translate 0.5*x
    }
  }
POV-Ray简单上手教程——CSG 物体_第1张图片
接下来,为了使两个小球成为一体,更换他们的材质,是他们都为红色,并旋转一定的角度
  union{
    sphere { <0, 0, 0>, 1
      translate -0.5*x
    }
    sphere { <0, 0, 0>, 1
      translate 0.5*x
    }
    pigment { Red }
    scale <1, .25, 1>
    rotate <30, 0, 45>
  }
POV-Ray简单上手教程——CSG 物体_第2张图片

这里,教程中提到,在CSG物体中,使用同一种材质,具有很多优势:1.存储量少2.计算量少3.速度快

3.CSG Intersection

将之前的两个红色小球,进行,修改,出去scale和rotate部分,把union关键字替换为intersection关键字
intersection {
    sphere { <0, 0, 0>, 1
      translate -0.5*x
    }
    sphere { <0, 0, 0>, 1
      translate 0.5*x
    }
    pigment { Red }
  }

POV-Ray简单上手教程——CSG 物体_第3张图片
是不是像一个晶体呢,,,,,

4.CSG Difference

旋转物体,使他面对摄像机
intersection{
    sphere { <0, 0, 0>, 1
      translate -0.5*x
    }
    sphere { <0, 0, 0>, 1
      translate 0.5*x
    }
    pigment { Red }
    rotate 90*y
  }
创建一个圆柱体
cylinder { <0, 0, -1> <0, 0, 1>, .35
    pigment { Blue }
  }
运用difference,实现圆柱体和球体的交互
 difference {
    intersection {
      sphere { <0, 0, 0>, 1
        translate -0.5*x
      }
      sphere { <0, 0, 0>, 1
        translate 0.5*x
      }
      pigment { Red }
      rotate 90*y
    }
    cylinder { <0, 0, -1> <0, 0, 1>, .35
      pigment { Blue }
    }
  }
POV-Ray简单上手教程——CSG 物体_第4张图片

从图片中,我们可以看到圆柱体,在球体中产生了一个洞?你看这不像是因为他是蓝色,如果把颜色去除,他就是黑色了。

下面让我们扩宽一下,进行一下升级!
消除所有颜色,delcare一下
 #declare Lens_With_Hole = difference {
    intersection {
      sphere { <0, 0, 0>, 1
        translate -0.5*x
      }
      sphere { <0, 0, 0>, 1
        translate 0.5*x
      }
      rotate 90*y
    }
    cylinder { <0, 0, -1> <0, 0, 1>, .35 }
  }

运用一下union产生四个上面的物体
union {
    object { Lens_With_Hole translate <-.65, .65, 0> }
    object { Lens_With_Hole translate <.65, .65, 0> }
    object { Lens_With_Hole translate <-.65, -.65, 0> }
    object { Lens_With_Hole translate <.65, -.65, 0> }
    pigment { Red }
  }

POV-Ray简单上手教程——CSG 物体_第5张图片

效果是不是很棒,让我们在坐一下,升级!,把他们变成透明一点

 union {
    object { Lens_With_Hole translate <-.65, .65, 0> }
    object { Lens_With_Hole translate <.65, .65, 0> }
    object { Lens_With_Hole translate <-.65, -.65, 0> }
    object { Lens_With_Hole translate <.65, -.65, 0> }
    pigment { Red filter .5 }   //filter 使物体透明
  }
POV-Ray简单上手教程——CSG 物体_第6张图片
透明是透明了,但是在物体交互部分产生了重影效果

5.CSG Merge

下面我们用merge来消除上面的问题

 merge {
    object { Lens_With_Hole translate <-.65, .65, 0> }
    object { Lens_With_Hole translate <.65, .65, 0> }
    object { Lens_With_Hole translate <-.65, -.65, 0> }
    object { Lens_With_Hole translate <.65, -.65, 0> }
    pigment { Red filter .5 }
  }

POV-Ray简单上手教程——CSG 物体_第7张图片

是不是好很多!

6.问题

当我们用四种方式来渲染物体时,两种物体表面重合时,会产生一些意想不到的问题
  difference {
    box { -1, 1 pigment { Red } }
    cylinder { -z, z, 0.5 pigment { Green } }
  }
POV-Ray简单上手教程——CSG 物体_第8张图片
从图片中,我们可以看到,在两个物体相交的表面,产生了红绿斑点,这是因为,坐标相同的两个相交表面,POV-Ray不知道具体渲染哪一个,可能一会渲染这个,一会渲染那个,就会产生这种现象。
既然,是因为坐标完全一样,导致的这种问题,如果想解决这种问题,我们只需将其移动一点位置就可以了
difference {
    box { -1, 1 pigment { Red } }
    cylinder { -1.001*z, 1.001*z, 0.5 pigment { Green } }
  }
POV-Ray简单上手教程——CSG 物体_第9张图片
这才是真正的效果,问题解决了。以后注意了。避免出现!一定要小心一些坐标相同的表面!

结束!!!



你可能感兴趣的:(POY-Ray)