Paratrooper Digital

Category: 3d

Working with multiple 3D objects with precise interaction.

The folks over at Blitz and at papervision2 have come up with some interesting ways to actually have real interaction with the MovieClips you are texturing your models with.

The quick is that you always use MovieMaterials(created with a reference to an existing MovieClip someplace on stage). Normally the MovieMaterial object can be offstage or even visible=false to not see the clip; thing is they use visible=true, alpha=0 and reposition the clip actually under the mouse. A bit of trickery has the user actually interacting with the 2D flat MovieMaterial.

One of the nice things about this is that you can also do some testing and creating of functionality of your MovieClips as flat 2D objects and then map them to another object.

In creating an app with multiple panels in a 3D space every panel needs to be attached to the stage and then used to map onto your objects. This is fine when it’s just one object. When there are multiple surfaces that need interactivity this can quickly get out of control.

If you are using pureMVC or carimgorn to build your app you are used to creating a view/ui class that represents the specific element as a whole, it needs to have two elements, the stage texture version and the display3d object.

Ok cool. Just take a step back so that your view consists of two ui elements. Your mediators/viewhelpers can then access both elements and update them appropriately.

Wait what if we have multiple panels with the same textures? Looks like there are two options:

  1. Use the same texture/ the same reference to the MovieClip on stage and use the target of the object to figure out what object you are on(requires dynamic naming of the display objects you are using so they can be keyed in later to access the specific class). You can take advantage of the InteractiveEvent3D event which includes the DisplayObject3D element that is interacted with.
  2. Use a separate instance of each texture on the stage so that it can be targeted separately for each individual item. This also needs to be dynamically named so that they do not overwrite any other textures. Destroy methods then need to make sure they clean up these 2D objects in addition to the 3D counterparts.

We also found that it’s a good idea to add some code that listens for the mouse to be off the given object and send the stage texture off stage and hidden. In the example from Blitz you can still click on an element even though the mouse wasn’t on the object.

Thanks to those guys for the hook ups of the advanced interactive elements.

Tip for searching pv3d help.

If you are interested in adding papervision3d to your project like us you’ll find that there is a little missing in the documentation. Why because they are so active in making improvements its hard to keep valid documentation up to date.

Ok, so the documentation is sometimes a little sketchy, or a little old, or nonexistent. How do you get help? Sign up for the papervision newsletter. I’d select the daily digest that compacts the emails into larger emails that have multiple responses. Make sure you have plenty of inbox space and a filter to folder it because man it gets a lot of traffic. I feel a bit silly asking a question I’m sure has been asked before and generating even more traffic through everyone’s inboxes. I find that this little tip very handy.

Thanks to google you can use the site specific search function to limit your search to just the papervision archive. You can also use this to same search syntax to perform sub searches of any domain. Those google guys are always thinking(of course this has been around for quite some time).

Bookmark this specific google query that will start you out searching the entire archive. Then add additional elements in the search box, space delimited of course, and you’re off and running. No more sifting though pages and pages of countless papervision digests of emails.

Most recent posts