Here's a simple example of using Manipulate
to interactively change the viewer's point-of-view for a 3D graphics object:
Manipulate[
Framed[
Graphics3D[{PolyhedronData["Dodecahedron", "Faces"]},
ViewPoint ->
3.0 {Cos[\[Theta]] Cos[\[Phi]], Sin[\[Theta]] Cos[\[Phi]],
Sin[\[Phi]]},
ViewAngle -> 0.5,
ImageSize -> 200
],
FrameStyle -> LightGray],
{{\[Theta], 1.0}, 0, 2 \[Pi], Appearance -> "Labeled"},
{{\[Phi], 0.5}, 0, \[Pi], Appearance -> "Labeled"}
]
The resulting widget looks like this:
Moving the widget's sliders does rotate the point-of-view, but a similar effect can be achieved by "directly" rotating the 3D image (i.e. "dragging" over the object's image with the cursor), like one can do with any other 3D graphics object in Mathematica. If one does this to the 3D object displayed within the widget, then the slider controls stop working.
How can I modify this widget so that such direct manipulations, instead of disabling the sliders, actually update their values?
(The net effect would be to have two complementary ways to modify the point-of-view: just as the sliders give control over the image's point-of-view, any modification of this point-of-view by some other channel should be instantaneously reflected in the values of the sliders.)