             @_text = []
 
             up = new THREE.Vector3()
-            @changeHooks.push =>
+            @renderHooks.push =>
                 up.set(0, 1, 0).applyQuaternion @camera.quaternion
                 for text in @_text
                     text.up.copy up

                addLabel [avg.x, max.y, min.z], "x = #{format avg.x}"
                addLabel [min.x, max.y, min.z], format(min.x)

    setCamera: ->
        view_angle = 45
        aspect     = @opts.width/@opts.height

            if error
                return @opts.callback? error

            if @_init
                return @opts.callback? undefined, @
            @_init = true

            # IMPORTANT: There is a major bug in three.js -- if you make the width below more than .5 of the window
            # width, then after 8 3d renders, things get foobared in WebGL mode.  This happens even with the simplest
            # demo using the basic cube example from their site with R68.  It even sometimes happens with this workaround, but
            # at least retrying a few times can fix it.
            @opts.width ?= document.documentElement.clientWidth/2
            @opts.height ?= @opts.width*2/3

            @attachToDom @opts.parent

            # setup aspect ratio stuff
            aspectRatio = @aspectRatio = new THREE.Vector3 @opts.aspect_ratio...
