There's no way to ghost a limb by itself. Both of your methodswould work. Gluing the object would probably be best. But you'll have a bad time with collision for the glued object. When you glue an object, it's internal position is never updated (unless you rotate it and position it yourself). It is only rendered (drawn) where ever it is glued.
Instead of gluing the object, you can position it at the limbs. This example places two "+"(pluses) at two limb positions. The pluses are not glued and they are not limbs so therefore behave as independent objects. I haven't cleaned this example up since I posted it a month ago, but it should give you an idea of how to proceed. The objects aren't ghosted, they are just wireframe. The pluses are referred to as axis objects in the example.
rem object to limb orientation 2
rem by latch
rem 09/26/2008
set display mode 800,600,32
sync on
sync rate 60
autocam off
make object sphere 1,25
make object box 2,25,5,5
offset limb 2,0,12.5,0,0
make mesh from object 2,2
delete object 2
add limb 1,1,2
add limb 1,2,2
add limb 1,3,2
delete mesh 2
link limb 1,2,1
link limb 1,3,2
color limb 1,2,rgb(255,0,0)
color limb 1,3,rgb(0,255,0)
offset limb 1,1,12.5,0,0
offset limb 1,2,25,0,0
offset limb 1,3,25,0,0
rem crisscross planes as axis
make object plain 3,5,20
make mesh from object 3,3
add limb 3,1,3
rotate limb 3,1,0,0,90
rotate limb 3,0,0,90,0
delete mesh 3
make mesh from object 3,3
delete object 3
make object 3,3,0
make object 4,3,0
set object 3,0,1,0
set object 4,0,1,0
delete mesh 3
`set object rotation zyx 3
position camera 0,0,-100
rem get the number of limbs
perform checklist for object limbs 1
lmbcount=checklist quantity()
empty checklist
rem let's create an array to hold all of the limbs positions
rem and let's create an array to hold the axis object(s)' rotations
dim lmb#(lmbcount,2)
dim axis#(lmbcount,2)
axis#(3,0)=120
axis#(3,1)=0
axis#(3,2)=60
rotate limb 1,3,axis#(3,0),axis#(3,1),axis#(3,2)
do
rem the angles to rotate
xang#=wrapvalue(xang#+.5)
yang#=wrapvalue(yang#-2)
zang#=wrapvalue(zang#+1)
rem get the limbs' initial position(s) (except the one you are rotating)
cur=2
for lm=1 to lmbcount
if lm <> cur
lmb#(lm,0)=limb position x(1,lmb)
lmb#(lm,1)=limb position y(1,lmb)
lmb#(lm,2)=limb position z(1,lmb)
endif
next lm
rotate object 1,xang#,yang#,zang#
rotate limb 1,2,xang#,yang#,zang#
rem rotate the axis to the limb...
set object to object orientation 3,1
pitch object down 3,object angle x(1)
turn object right 3,object angle y(1)
roll object left 3,object angle z(1)
pitch object down 3,xang#
turn object right 3,yang#
roll object left 3,zang#
rem store the pointer's angles in the array
axis#(cur,0)=object angle x(3)
axis#(cur,1)=object angle y(3)
axis#(cur,2)=object angle z(3)
rem now check if any limbs have been displaced. If they have
rem then those are the pointers to rotate relative to the parent and the root.
for lm=1 to lmbcount
if lm <> cur
if (limb position x(1,lm) <> lmb#(lm,0)) or (limb position y(1,lm) <> lmb#(lm,1)) or (limb position z(1,lm) <> lmb#(lm,2))
rem you should include the identifyer of the axis pointer in the array
rem so it's easy to associate it with the limb, but I know I'm using object 4
rem so I'll just hard code it
set object to object orientation 4,3
pitch object down 4,axis#(lm,0)
turn object right 4,axis#(lm,1)
roll object left 4,axis#(lm,2)
endif
endif
next lm
rem position the pointers on the limbs
position object 3,limb position x(1,2),limb position y(1,2),limb position z(1,2)
position object 4,limb position x(1,3),limb position y(1,3),limb position z(1,3)
sync
loop
Enjoy your day.