Вот код

Код AS3:
for( ... ) {
_materials.push( materials[i] );
var curWidthY:Number = materials[i].sourceRect.height / 2;
var curHeightX:Number = materials[i].sourceRect.width / 2;
var tmpSize:Number = int(( materials[i].sourceRect.width * materials[i].sourceRect.height ) / ( materials[i].sourceRect.width + materials[i].sourceRect.height ));
var vertices:Vector.<Number>;
vertices = Vector.<Number>([ -curHeightX, -curWidthY, -curHeightX, curWidthY, curHeightX, curWidthY, curHeightX, -curWidthY]);
var rot:Vector3D = FACES_ORIENTATION[i].clone( );
rot.negate( );
var pos:Vector3D = FACES_POSITION[i].clone( );
pos.scaleBy( tmpSize );
var mtrx:Matrix3D = new Matrix3D( );
mtrx.prependRotation( rot.x, Vector3D.X_AXIS);
mtrx.prependRotation( rot.y, Vector3D.Y_AXIS);
mtrx.prependRotation( rot.z, Vector3D.Z_AXIS);
mtrx.appendTranslation( pos.x, pos.y, pos.z );
createPolygonFace( vertices, mtrx, materials[i] );
}

Код AS3:
public function createPolygonFace( vertices:Vector.<Number>, faceMatrix:Matrix3D, material2Use:Material ):void {
var face:Face = new Face( material2Use, vertices, Vector.<int>([0, 1, 2, 0, 2, 3]), Vector.<Number>([ 0, 0, 0, 1, 1, 1, 1, 0 ]) );
var dir:Number = (vertices[2] - vertices[0]) * (vertices[5] - vertices[3]) - (vertices[3] - vertices[1]) * (vertices[4] - vertices[2]);
face.inside = dir > 0 ? !_inside : _inside;
face.transform.matrix3D = faceMatrix;
addFace( face );
}

Код AS3:
private function SetFacePostion( materials:Vector.<Material> ) : Boolean {
if ( materials.length != 6 ) return false;
var w0:Number = materials[0].sourceRect.width
var w1:Number = materials[1].sourceRect.width
var w2:Number = materials[2].sourceRect.width
var w3:Number = materials[3].sourceRect.width
var w4:Number = materials[4].sourceRect.width
var w5:Number = materials[5].sourceRect.width
var h0:Number = materials[0].sourceRect.height
var h1:Number = materials[1].sourceRect.height
var h2:Number = materials[2].sourceRect.height
var h3:Number = materials[3].sourceRect.height
var h4:Number = materials[4].sourceRect.height
var h5:Number = materials[5].sourceRect.height
//if ( w0 != w2 || w1 != h2 || h0 != h1 ) return false;
// вот здесь я задаю кооэфициенты но мне нужно их точно определить я не знаю как
var dz:Number = 1.65; //*/ h4 / 100
var dy:Number = 0.6; //*/ h0 / 100;
var dx:Number = 1.1; //*/ w0 / 100;
FACES_POSITION[0].z = -dz;
FACES_POSITION[2].z = dz;
FACES_POSITION[1].x = dx;
FACES_POSITION[3].x = -dx;
FACES_POSITION[4].y = dy;
FACES_POSITION[5].y = -dy;
return true;
}
Добавлено через 16 часов 15 минут
Я так понял что надо копать где-то в Эйлеровых графах?