         @children = []
         @static = false
         @world_matrix = mat4.create()
-        @rotation_matrix = mat3.create() # not used elsewhere
+        @rotation_matrix = mat3.create()
         @normal_matrix = mat3.create()
         @_m3 = mat3.create()
         @custom_uniform_values = []

        vec3.add(@bounding_box_high, @position, dim_half)


    # TODO: make property
    get_world_position: (out) ->
        p = @parent
        pos = vec3.copy @_world_position, @position
        while p
            vec3.mul pos, pos, p.scale
            vec3.transformQuat pos, pos, p.rotation
            vec3.add pos, pos, p.position
            p = p.parent
        return pos

    # TODO: make property
    get_world_rotation: (out)  ->
        p = @parent
        rot = quat.copy(out or quat.create(), @rotation)
        while p
            quat.mul rot, p.rotation, rot
            p = p.parent
        return rot

    get_world_pos_rot: ->
        p = @parent
        pos = vec3.clone @position
        rot = quat.clone @rotation
        while p
            vec3.mul pos, pos, p.scale
            vec3.transformQuat pos, pos, p.rotation
            vec3.add pos, pos, p.position
            quat.mul rot, p.rotation, rot

            p = p.parent
        return [pos, rot]

    clone: (scene=this.scene, recursive=false) ->
        n = Object.create @

                mat4.mul(@world_matrix, bone.ol_matrix, @world_matrix)

            ## TODO: make this more efficient, etc
            ## TODO TODO: Rotation and normal matrices are incorrect, esp after scaling parents and having matrix_parent_inverse
            mat3.mul rm, @parent.rotation_matrix, rm
            mat3.mul nm, @parent.normal_matrix, nm
            mat4.mul wm, @matrix_parent_inverse, wm
