首页 - 《Introduction to 3D Graphics》
作者:Malcolm A. Kesson
章节1:Getting Started
翻译:梁逸晨
kvspas@gmail.com
转载请注明出处
原文引用地址:http://renderman.kvspas.com/rib/GettingStarted.html
©2006 光之追随者
概述: 该章节是一个直观简洁的RenderMan使用指导入门. 每个范例都讲述了创建3DCG的一些概念. 虽然这个章节仅仅是一个简单的入门教程,但是它所涵盖的基本知识是我们在以后更复杂的图象创建中必不可少的,所以,请不要抱怨这些范例过于简单。
“万事开头难”,学习RIB也不例外,请坚持下去,直到你真正弄懂了这个章节的每一个例子。.
学习完这个章节,你将掌握:
注:这里我们给出的所有例子都在PRMAN里面得到正确地运行.
例子1:
#ortho disk1.RIB
#using a default camera
WorldBegin
Disk 1 0.5 360
WorldEnd
前面两行使用了"#"符号,以该符号开头的行仅仅作为注释之用,在实际的渲染过程中,会被渲染器忽略而过.
"WorldBegin"关键词标志着一个渲染过程的开始,在一个完成的RIB文件中,它总是和"WorldEnd"关键词成对地出现的.
Disk 是系统预定义好的一个关键词,它包含有三个参数, 依次代表着: Z轴的高度 , DISK的半径 ,旋转的角度.这条命令"告诉"渲染器:"我需要显示一个DISK,它距离世界坐标的原点的Z轴1个单位,它的半径是0.5,这个DISK是个完整的DISK(360度旋转的圆盘)"
我们也可以把命令写成下面这样的格式,同样可以被渲染器正确识别出来(也更便于我们阅读):
Disk
1 #unit along the z axis
"WorldEnd"标志着一个RIB文件的结束. 这个简单的例子说明了一个RIB文件的基本要素. 虽然在这里我们没有指示渲染器如何去处理摄像机的角度和方向,DISK的表面材质和颜色等要素, 尽管如此, 渲染器仍然能够创建出一幅图象,在缺乏这些参数的时候,渲染器会给出默认的设置参数:
以下是对例子1的详细步骤解释:
![]() |
前面两行作为一个注释信息,会被渲染器所忽略. |
| WorldBegin告诉渲染器:"你现在可以开始处理工作了" ,接下来,渲染器创建一个320*240像素大小的图象(这里是使用了默认大小), |
|
| 创建一个DISK对象,距离原点Z轴方向上一个单位 0.5个单位的半径和360度的圆周旋转(DISK对象本省决定了它需要有一个旋转度的参数) WorldEnd命令告诉渲染器:"工作完成!" |
例子2:
#perspective disk.RIB
#setting a perspective view
Projection "perspective" "fov" 40
WorldBegin
Translate 0 0 3
Disk 0 0.5 360
WorldEnd
这个例子描述了怎样创建一幅透视图.
我们只需要通过Projection标记就可以实现,这个标记包含有三个参数:
"perspective": 创建透视图
"fov": 摄像机的焦距
40 : 焦距是40度
(*注: 在这里,"fov" 和 40 是起到共同作用的----描述的意思是:用40的焦距来控制摄像机)
接下来,
Translate x y z
描述了摄像机和世界原点的距离关系,通过这个格式,我们可以看出,在例子中所描述的是摄像机距离世界原点的Z轴坐标3个单位的距离.
工作原理:
![]() |
|
![]() |
例子3:
#tube.RIB
#rotating an object
Projection "perspective" "fov" 40
WorldBegin
Translate 0 0 5
Rotate -120 1 0 0
Color 1 0 0
Cylinder 1 -1 1 360
WorldEnd
前面的例子2虽然是得到了透视图,但是我们看不出它和例子1产生的图象有什么差别,因为例子2和例子1都是一个DISK的平面对象,为了对控制摄像机的透视参数得到一个更直观的认识,在这个例子3中我们加入了一个圆柱体对象(Cylinder).
Cylinder标记拥有四个参数:
Cylinder radius depth height arc
Cylinder 半径 深度 高度 弧度
在这个例子中还出现了一个用来控制摄像机旋转的标记:
Rotate angle x y z
Rotate 旋转角度(值范围是0-360,正负两种状态代表顺时针和逆时针) x轴 y轴 z轴
(译者注: 后面那三个XYZ参数似乎是代表着在每个轴上面作多少次角度值为angle的旋转,在这里我还不敢确定)
在这里我们要注意这两段话:
Translate 0 0 5
Rotate -120 1 0 0
虽然是文本中移动的命令在前,旋转的命令在后,但是系统的处理流程是首先把摄像机在X轴上进行一次120度的逆时针旋转,然后才是在Z轴上移动5个单位的距离.这个过程就象装枪的子弹一样,后面装的子弹总是最先射出的.
(译者注:我也不明白为什么要弄出个这样的规定,似乎与我们熟悉的程序执行流程不一样,总之,RenderMan它就是这么处理的.)
接下来是颜色参数,通过RGB色域来表示颜色(0-1)
Color red green blue
颜色参数总是为在它之后接着定义的一个对象所使用,直到另一个对象被创建为止.
执行流程:
![]() |
|
![]() |
例子4:
#scaled tube.RIB
#scaling
Display "scaling" "framebuffer" "rgb"
Projection "perspective" "fov" 40
Format 200 150 1
WorldBegin
Scale 0.3 0.3 0.3
Translate 0 0 5
Rotate -120 1 0 0
Cylinder 1 -1 1 360
WorldEnd
这个例子中引入了图象缩放和窗口显示的概念,在这里 我们可以把图象控制到30%的大小.并且可以在渲染完成的时候,自动得到一个直观的窗口显示.
从今往后,我们将可以通过, Display 和 Format 标记可以用来控制这些功能. Display 标记拥有三个控制参数:
Format 也同样拥有三个控制参数:
Format 图象宽度 图象高度 长宽比
就和前面的例子一样,在WorldBegin之后,Scale是第一个命令,但是它却是最后一个得到执行的.
Scale x y z
Scale 命令控制着对整个场景的缩放比率,分别是三个坐标轴
执行原理图:

例子5:
#goblet.RIB
#assembling an object
Display "goblet" "framebuffer" "rgb"
Projection "perspective" "fov" 40
| Format 150 200 1 | |
|---|---|
| WorldBegin | |
| Scale 1 1 1 | #change these to squash and stretch the goblet |
| Translate 0 0 5 | |
| Rotate -120 1 0 0 | |
| Color 1.0 0.978 0.34 | #gold |
| Cylinder 1 0 1.5 360 | #container |
| Disk 0 1 360 | #base of the container |
| Cylinder 0.25 -1.5 0 360 | #stem |
| Disk -1.5 1 360 | #base of the goblet |
| WorldEnd | |
在最后这个例子中,我们使用几个基本的对象来组合成一个新的对象 : 
现在你已经完成了这个章节的学习,
对我们所学习的这些标记作一个总体回顾:
但是光有这样还不够,还需要对这几个例子作反复地推敲和修改.才能够真正掌握这些概念
================================================================================
《Introduction to 3D Graphics》
章节1:Getting Started
作者:Malcolm A. Kesson
翻译:梁逸晨
kvspas@gmail.com
转载请注明出处
原文引用地址:http://renderman.kvspas.com/rib/GettingStarted.html
©2006 光之追随者