Code covered by the BSD License  

Highlights from
Arcball like 3D figure rotation

5.0

5.0 | 2 ratings Rate this file 13 Downloads (last 30 days) File Size: 2.24 KB File ID: #19760
image thumbnail

Arcball like 3D figure rotation

by

 

29 Apr 2008 (Updated )

Example that shows how to add arcball control to a 3D window

| Watch this File

File Information
Description

One of the major drawbacks of matlab is the lack of a way of changing the viewpoint of a 3D mesh using a natural (arcball) interaction.

In this simple function I demonstrate the arcball interaction allowing a 3D sphere to be moved naturally. Run the function and drag and drop with your mouse on the sphere surface.

A very important aspect that you should note is that I am rotating the ACTUAL 3D object instead of the viewpoint.

There is a specific reason for this choice. The OpenGL lighting is linked to the axis in matlab, thus, if you rotate the veiwpoint, the lighting on the mesh surface wouldn't change. On the other hand, if you rotate your object using hgttransoforms you achieve this result.

It is now apparently bug-free :)

MATLAB release MATLAB 7.6 (R2008a)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (14)
19 Sep 2011 Sandor Toth

Thanks, this is a really great code!

02 Jun 2010 Andrea Tagliasacchi

I never tried to do something like this but I am slightly curious to see it... I might end up doing it for fun sooner or later... If I do, I will let you know

01 Jun 2010 p

i need help with something.

i need to create a kind of arcball using images in matlab.
i have images of an object. and i should create a 3D object that the user can spin and see the images like a 3D model. i tried to use the regular arcball, and show my images, but it did'nt work out.

do you have an idea, please?

23 May 2010 Andrea Tagliasacchi

standard "view" command. But I never liked it, it's very un-natural way of interaction.

23 May 2010 p

how can i rotate according the viewpoint, and move the camera, and not the object?

17 May 2010 p

this way i can show more than one image, because you can see few sidelocks at the same view. and i want to create a kind of movie between the views on a object, and create an arcball for object with my images...

13 May 2010 Andrea Tagliasacchi

See the script. You will have the call to patch() with the sphere with a rectangle and then texture map it.

13 May 2010 p

but How can I add features that that the arcball have, like move according to a mouse input

12 May 2010 Andrea Tagliasacchi

With images? you mean rotate an image in 3D? I guess you can just use a simple rectangular mesh (as a Patch object) and texture map it....

12 May 2010 p

nice work.
do you know how to create an arcball in matlab with images?
i mean that i wan't to create kind of mesh that have the images as vertexs.
tnx :)

13 Sep 2008 P G

The sphere example proposed in the code does not work with Matlab 7.0.0.19920 (R14) and 7.0.4.352 (R14). There may be a problem between surf objects and hgtransform. It works properly with mesh and surface objects. Great work, thanks.

12 May 2008 Andrea Tagliasacchi

Thanks for the observation anyway. I took a look at the code again and even though Noh2 observation was correct, there was a similar bug. The "rotation direction" was embedded in model space using the inverse of the current rotation matrix (taken from graphic context) and not the one of the original model.

I will upload the final version.
There was also a vector normalization missing that might have caused other issues.

12 May 2008 Noone U. Noh2

Actually that is not true. If you check, the rotation is applied to the model which is "saved" in M_previous in the moment the first mouse click take place. That doesn't change anymore during dragging.

30 Apr 2008 Noone U. Noh

The cause of your "bug" is likely that at each step you rotate the object that was rotated in the last step. Each rotation introduces a little bit of round-off errors that are being magnified by doing it a zillion times. Instead, you should always make the rotations with respect to the original (unrotated) object.

Contact us