On 17/04/2014 1:56 PM, Dominick Samperi wrote:> Is there a way to change the viewpoint using view3d (or rgl.viewpoint)
> with respect to
> the image that currently appears rather than the perspective that rgl
> thinks is the
> default? For example, if I create an image and then perform what
> should be a no-op:
>
> rgl.viewpoint(userMatrix=rotationMatrix(0,1,0,0))
>
> the image is rotated. Then I can perform rotations on the result
> without surprises.
> But I want to specify rotation with respect to the image as it
> originally appeared,
> or with respect to the viewpoint that is currently in effect.
>
> Experimentation has revealed that when using rotationMatrix the z-axis
> points out
> of the canvas instead of pointing up as it often is in mathematics,
> especially when
> using the spherical coordinates (theta,phi).
>
> I guess the question is: can we query rgl for the current viewpoint and
then
> apply changes to that? Another way of putting it is: can we do
programmatically
> what we can easily do using the mouse in interactive mode?
There are two matrices involved in rgl rendering, and they are computed
in a relatively complicated way that is described in ?par3d. I'm not
sure I understand all of what you want to do, but I think the following
achieves it; if not, take a look at that help page:
example(plot3d) # just get a sample plot on screen. Rotate it by mouse
if you like.
U <- par3d("userMatrix")
for (theta in seq(0, pi, len=100)) {
par3d(userMatrix = rotate3d(U, theta, 0,0,1)) # Rotate about model's
z axis
Sys.sleep(0.1)
}
for (theta in seq(0, pi, len=100)) {
par3d(userMatrix = rotationMatrix(theta, 0,0,1) %*%U ) # Rotate about
viewer's z axis
Sys.sleep(0.1)
}
In this case, the "viewer's z-axis" is perpendicular to the
screen; the
"model's z-axis" is parallel to the z axis in the box around the
plot.
Duncan Murdoch