Paratrooper Digital

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.

About Nate Frank

Nate is currently a Senior Presentation Layer Architect at Razorfish Chicago. As an SPLA Nate: participates in technology leadership team and resource allocations, manage fulltime and contractor resources, represents technology for groups of brands across multiple clients, furthers development of standards within the office, architects project implementations and fosters community and mentoring.

View all posts by Nate Frank

Most recent posts