采用树形bounding box渲染的图片

对场景组织作了调整,采用树状的包围盒来分隔空间。Primitive被做成了recursive的结构,整个场景就是一个Primitive。每一个场景都有自己的一个包围盒,子场景也有自己的包围盒。intersect的时候从顶向下逐级过滤。对底层的单个三角形的intersect仍然采用包围球来计算,球体的intersect也一样不采用包围盒判断,因为考虑到一个球体和它的包围盒之间差别不大。

结合分形迭代,做了如下一张图片:

该图片的场景脚本如下:

// Frames
obj  =   new  Plane( 0 1 0 4.4 );
obj.setColor(
0.7 0.4 0 1.0 );
primitive.push(obj);

obj 
=   new  Plane( 0 - 1 0 7.4 );
obj.setColor(
0.7 0.4 0.0 1 );
primitive.push(obj);

obj 
=   new  Plane( 0.4 0 - 1 12 );
obj.setColor(
0.7 0.4 0.0 0.5 );
primitive.push(obj);

// Light sources
obj  =   new  Light( 0 5 5 );
lights.push(obj);

obj 
=   new  Light( - 3 5 1 );
lights.push(obj);

// Objects
obj  =   new  Sphere( 2 4 3 2.5 );
obj.setColor(
1.0 1.0 1.0 0.2 0.8 0.8 1.3 );
primitive.push(obj);

obj 
=   new  Sphere( - 5.5 2.5 7 3 );
obj.setColor(
0.7 0.7 1.0 0.1 0.9 0.0 1.3 );
primitive.push(obj);

for  (i  =   0 ; i  <   4 ++ i) {
obj 
=   new  Sphere( - 6   +  (i  *   3 ),  - 0.5 - 2 1 );
obj.setColor(
0.7 0.7 1.0 0.3 0.9 0.0 1.3 );
primitive.push(obj);
}

obj 
=   new  File( ' Y:/Others/raytracer7/meshes/knot.3ds ' 3 - 3 0 6 1 );
obj.setColor(
0.9 0.2 0.0 0.4 0.9 );
primitive.push(obj);

obj 
=  obj.clone();
obj.x 
=   - 5 ;
obj.b 
=   1 ;
primitive.push(obj);

obj 
=  obj.clone();
obj.x 
=   5 ;
obj.y 
=   5 ;
obj.b 
=   0 ;
primitive.push(obj);

 


本文属Span Zhang(张友邦)原创,转载请注明出处。

中国原创分形艺术、中国原创分形软件第一站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值