Here is a Mac OSX like Genie effect made with AS3.
It’s basically made with Flash 10’s drawTriangles API & Yoshihiro Shindo’s betweenAS3 tween library.
It’s just a initial sketch, but seems there is plenty of possibilities around the new bitmap drawing API.
BeInteractive! (blog written by Yoshihiro Shindo) reported a bug of “private” classes (defined outside of the package block). Two or more “private” classes might cause a compile error, which tells that a local variable declared in a main class (inside the package) is undefined in Flash CS4 Professional.
1120: Access of undefined property s.

Compile error #1120
I found another condition of the error. If a “private” class inherits a class other than Object the compile error will be prevented.
package {
import flash.display.Sprite;
public class PrivateClassIssue extends Sprite {
public function PrivateClassIssue() {
var s:String = 'hello';
trace(s);
}
}
}
class Foo {}
class Bar extends Array {} // inherits Array class
[Help] of PerspectiveProjection.focalLength property says:
During the perspective transformation, the focalLength is calculated dynamically using the angle of the field of view and the stage’s aspect ratio (stage width divided by stage height).
However as far as I tested it, the stage height does not affect the result of focalLength property’s value. It is calculated from only the stage width by the following formula:
tan(fieldOfView/2) = (stageWidth/2)/focalLength
focalLength = stageWidth/2 tan(fieldOfView/2)
![From [Help] of PerspectiveProjection](http://help.adobe.com/en_US/AS3LCR/Flash_10.0/images/frustum.jpg)
*From [Help] of PerspectiveProjection

focal length and field of view
Therefore the function below returns focal length by passing field of view.
// Frame action
function getFocalLength(nFieldOfView:Number):Number {
var falf_tan:Number = Math.tan(nFieldOfView / 2 * Math.PI / 180);
return stage.stageWidth/2/falf_tan;
}
[Note]: With Stage.scaleMode property set to StageScaleMode.NO_SCALE, the value of Stage.stageWidth property can be changed when the browser window is resized. However the PerspectiveProjection.focalLength would be calculated by the original width of the stage set with the [Property] inspector.
The revised function below can return the right result in the case:
// Frame action
var originalMode:String = stage.scaleMode;
stage.scaleMode = StageScaleMode.EXACT_FIT;
var myStageWidth:int = stage.stageWidth;
stage.scaleMode = originalMode;
function getFocalLength(nFieldOfView:Number):Number {
var falf_tan:Number = Math.tan(nFieldOfView / 2 * Math.PI / 180);
// return stage.stageWidth/2/falf_tan;
return myStageWidth/2/falf_tan;
}