Skip to content

组合体

组合体是由两个或更多其他对象组成的。组合体是一个单一的对象,可以像操作单个对象一样对其进行操作。一旦创建,组成对象将失去其身份,无法更改,但整个组合体可以移动。(相比之下,用于创建 的对象保留其各自的身份,并且可以移动、旋转等)。与组相比,组合体的计算成本较低。

image-20240518150446903

常用属性

python
compound(objectlist, pos=vec(3, 2, 0), axis=vec(1, 1, 0))
参数名类型说明
first_argument列表要合并的对象列表。请参阅下面的代码示例。
origin向量复合对象的 pos 的位置。默认为边界框的中心。
pos向量复合对象的位置。默认为 <0,0,0>。更改 pos 会移动整个对象。
axis向量忽略大小;仅使用方向。默认为 <1,0,0>。
color向量修改整个复合对象的颜色。默认为 color.white
size向量边界框的尺寸。默认为 <1,1,1>。更改 size 不会 改变 axis,反之亦然。

页面顶部图像中的锤子由以下代码创建:

python
handle = cylinder(size=vec(1, 0.2, 0.2), color=vec(0.72, 0.42, 0))
head = box(size=vec(0.2, 0.6, 0.2), pos=vec(1.1, 0, 0), color=color.gray(0.6))
hammer = compound([handle, head])
hammer.axis = vec(1,1,0)

不常用属性

python
compound(canvas=mycanvas, emissive=False)
参数名类型说明
opacity标量默认为1.0;范围0-1。
shininess标量默认为0.6;范围0-1。
emissive布尔值默认为False。如果为True,则对象发光,失去所有阴影效果。
visible布尔值如果为False,对象不显示。默认为True。
texture类元素 或 路径整个组合体的纹理。默认为None。
canvas对象默认为 scene
make_trail布尔值如果为True,对象移动时会留下轨迹。
up向量与轴线垂直的向量。

组合体的限制

以下对象无法合并:标签、灯光、曲线、螺旋线。要合并的所有对象必须位于同一画布中,并且组合体本身也必须位于画布中。无法将组合体克隆到不同的画布,但可以将组合体克隆到同一画布以制作多个副本。

组合体与世界坐标

如果组合体对象已移动、旋转或调整大小,则其内部坐标可能与世界坐标不同。如果 v1 例如是 mycompound 中一个对象的原始位置:

newv1 = mycompound.compound_to_world( v1 ) 给出了世界坐标中的新位置。

v2 = mycompound.world_to_compound( newv2) 将世界坐标转换为内部坐标。