POV-Ray简单上手教程——第一幅图像和基础图形

来源:互联网 发布:centos libudev.h 编辑:程序博客网 时间:2024/04/27 17:00

第一幅图像和基础图形

     在本篇中,我们将会用POV-Ray渲染出我们的第一幅图像,以及一些其他简单的图形物体(球,平面,正方体)。

1.坐标系

左手系坐标。Z轴指向屏幕里面(了解POV-Ray坐标系,有利于我们渲染图像,比如一些位置信息)。

2.添加INCLUDE文件

创建一个.pov类型的文件后,用POV-Ray打开,进行编辑(当然,你也可以用其他的文本编辑器进行编辑)。首先,我们就需要include一些基本文件,来构建我们的场景(这一点和一些语言的编程是很相像的)。

  #include "colors.inc"    // The include files contain  #include "stones.inc"    // pre-defined scene elements

第一个文件,是加入颜色,第二个是加入石头的Texture的头文件(他们都是以.inc结尾的)。另外,我们还可以加入一些其他的文件,以后会继续用到。这里,只是为了得到一幅简单的图像,这两个头文件足够。

3.添加摄像机

 camera {    location <0, 2, -3>    look_at  <0, 1,  2>  }
location是摄像机所在位置,look_at是摄像机指向方向。后面<x,y,z>是他在坐标系中的位置信息。

4.描述物体

 sphere {    <0, 1, 2>, 2    texture {      pigment { color Yellow }    }  }
这里是创建一个球体(sphere)<0,1,2>是球心所在位置;2是半径。texture{}设置纹理。pigment是一个关键字。color Yellow设置为黄色(注意颜色首字母大写)
关于颜色,可以有几种使用方式:
color red 1.0 green 0.8 blue 0.8 color rgb <1.0, 0.8, 0.8>rgb <1.0, 0.8, 0.8>

5.定义光源

light_source { <2, 4, -3> color White}  
light_source{}是关键字,其他就不做过多解释了,很直接明了

最后是全部代码:
  #include "colors.inc"  background { color Cyan }  camera {    location <0, 2, -3>    look_at  <0, 1,  2>  }  sphere {    <0, 1, 2>, 2    texture {      pigment { color Yellow }    }  }  light_source { <2, 4, -3> color White}
加入的background是设置背景的,这里设置背景颜色为:Cyan
渲染效果如图:


其他基础图形

1.box 

box{   <-1,0,-1>,   <1,0.5,3>   texture   {      T_Stone25  //设置纹理效果      scale 4    //设置比例   }   rotate y*20} 
(摄像机位置没有调整好,但是我们可以看到一块就有大理石材质的长方体)

2.cone(圆锥)

cone{   <0,1,0>, 0.3    <1,2,3>, 1.0    //两个圆的坐标及半径   open    //设置是否开口   texture   {      T_Stone25      scale 4   }}

3.cylinder

cylinder{   <0,2,0>,   <-2,2,3>,   0.5   open   texture{T_Stone25 scale 4}} 



4.plane

plane{   <0,1,0>,-1   pigment   {       checker color Red, color Blue  //红蓝相间   }   } 

5.Torus(环形)

基础图形:
#include "colors.inc"camera {   location <0,1,-25>   look_at 0   angle 30}          background { color Gray50}light_source{<300,300,-1000> White}    torus{   4,1   rotate -90*x      pigment {Green}     }



高级变形(1):
#include "colors.inc"camera {   location <0,1,-25>   look_at 0   angle 30}          background { color Gray50}light_source{<300,300,-1000> White} #declare Half_Torus=difference      //difference:A与B两个物体。效果为:在A中去除AB相交的部分{torus{   4,1   rotate -90*x   }box{<-5,-5,-1>,<5,0,1>}pigment {Green}        }     #declare Flip_It_Over=180*x;          //declare声明,便于后面调用#declare Torus_Translate=8;union{   object{Half_Torus}          object   {      Half_Torus      rotate Flip_It_Over      translate Torus_Translate*x   }          object   {              Half_Torus                     translate Torus_Translate*x*2   }       object   {       Half_Torus               rotate  Flip_It_Over              translate Torus_Translate*x*3           }      object   {       Half_Torus               rotate  Flip_It_Over       translate -x*Torus_Translate   }       object   {       Half_Torus                translate -x*Torus_Translate*2          }        object   {       Half_Torus          rotate  Flip_It_Over       translate -x*Torus_Translate*3   }       object   {       Half_Torus       translate -x*Torus_Translate*4   }           rotate y*45        translate z*90      }    
蛇形图案
高级变形(2):
 #include "colors.inc"camera {   location <0,1,-25>   look_at 0   angle 30}          background { color Gray50}light_source{<300,300,-1000> White} #declare Half_Torus=difference{torus{   4,1   rotate -90*x   }box{<-5,-5,-1>,<5,0,1>}         }     #declare Flip_It_Over=180*x;#declare Torus_Translate=8;    #declare Chain_Segment=cylinder{   <0,4,0>,<0,-4,0>,1         }   #declare Chain_Gold=texture{   pigment{BrightGold}   finish   {      ambient .1      diffuse .4      reflection .25      specular 1      metallic   }}  #declare Link=union{   object   {       Half_Torus        translate y*Torus_Translate/2      }   object   {       Half_Torus       rotate Flip_It_Over       translate -y*Torus_Translate/2   }   object   {       Chain_Segment        translate x*Torus_Translate/2   }   object   {       Chain_Segment       translate -x*Torus_Translate/2   }           texture{Chain_Gold}}       #declare Link_Translate=Torus_Translate*2-2*y;     #declare Link_Pair=union{   object{Link}   object   {      Link       translate   y*Link_Translate       rotate y*90   }               }   #declare Chain=union{   object {Link_Pair}   object    {      Link_Pair      translate y*Link_Translate*2    }    object    {      Link_Pair      translate y*Link_Translate*4    }   object    {      Link_Pair      translate y*Link_Translate*6    }   object    {      Link_Pair      translate -y*Link_Translate*2    }   object    {      Link_Pair      translate -y*Link_Translate*4    }   object    {      Link_Pair      translate -y*Link_Translate*6    }}   object {Chain scale .1 rotate <0,45,-45>}

链条:


(好吧,关于Torus这部分,我偷懒了,其中有一些东西没有解释,但大家应该能够了解,如果有问题,大家可以留言,或者翻阅官方文档)

本篇结束!!!









1 0