采用树形bounding box渲染的图片

本文介绍了一种采用树状包围盒结构进行空间分隔的场景组织方式,并通过递归构建Primitive实现了高效的交集计算。同时展示了使用该技术创建的一个具体场景实例,包括平面、球体和复杂模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对场景组织作了调整,采用树状的包围盒来分隔空间。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);

// Lightsources
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、付费专栏及课程。

余额充值