Home Pictures of 3D objects

The compound object lets you group objects together and manage them as though they were one object, by specifying in the usual way pos, color, size (and length, width, height), axis, up, opacity, shininess, emissive, and texture. Moreover, the display of a complicated compound object is faster than displaying the individual objects one at a time. (In GlowScript version 2.1 the details were somewhat different.)

The object shown above is a compound of a cylinder and a box:

handle = cylinder( size=vec(1,.2,.2),                   color=vec(0.72,0.42,0) )

head = box( size=vec(.2,.6,.2),
             pos=vec(1.1,0,0),              color=color.gray(.6) )

hammer = compound([handle, head])
hammer.axis = vec(1,1,0)

The size of the object: After creating the compound named "hammer", hammer.size represents the size of the bounding box of the object.

The position of the compound is hammer.pos: After creating the compound, hammer.pos is located at the center of the bounding box. Later changes to hammer.pos move the center of the extrusion to a new location.

The individual objects in a compound are "frozen". You can't change their attributes such as positions or orientations except as a group.

Color blending

Setting hammer.color to something other than white makes a multiplicative blend of the overall color with the colors of the individual objects. For example, if the color of the handle is cyan, vec(0,1,1), and the hammer color is yellow, vec(1,1,0), the blend results in vec(0*1, 1*1, 0*0) or vec(0,1,0), which is green. If you plan to vary the color after creating the compound object, start with the color being white, vec(1,1,1), which is the default.

Setting parameters when creating a compound

You can optionally specify parameters to be applied to a compound after its creation. The following statement is equivalent to creating the hammer, then changing the position and axis, where the resulting center of the compound will be at vec(3,2,0)::

hammer = compound( [handle, head],
          pos=vec(3,2,0), axis=vec(1,1,0) )

Compound and world coordinates

There are two functions for translating between compound and world coordinates, which may differ if the compound object has been moved or rotated. Suppose the name of the compound is cc_pos is a position within that compound, and world_pos is the corresponding position in world coordinates:

world_pos = c.compound_to_world(c_pos)

c_pos = c.world_to_compound(world_pos)

Current restrictions

Currently objects in a compound can have their own values of color, opacity, shininess, and emissive, but they cannot have individual textures or bumpmaps, which can only be specified for the combined object, and which affect all of the compounded objects.

Currently label objects, lights, and objects based on curve objects (curve, helix) cannot be compounded. However, triangles, quads, and even other compounds can be compounded. Also, a compound object can be cloned to make additional copies.

Top of page