Grafikspielerei – isometrische Darstellung
Juten Tach,
ich habe mal jüngst angefangen, mich wieder ein wenig mit isometrischer Darstellung zu beschäftigen. Vielleicht kriege ich eine kleine isometrische 3D Engine hin, mal sehen. Der Unterschied zu anderen Engines ist, dass ich meine Objekte nicht programmatisch zeichne,
sondern nur bestehende Objekte mithilfe der Transformationsmatrix von Flash verzerre.
Bei folgendem kleinen Beispiel ist es denn auch so, dass die drei Flächen schon existieren und nur noch durch mein Skript transformiert werden.
Wie man sehen kann, stimmt die Z-Sortierung noch nicht. Darum kümmere ich mich als nächstes. Auch sind sicher die Formeln noch nicht so rank und schlank, wie sie sein könnten. Der Code ist momentan noch recht übersichtlich:
import flash.geom.Matrix;
var i:Number = 0;
var radius:Number = -75;
var cosI:Number;
var sinI:Number;
this.onEnterFrame = function() {
wall.transform.matrix = transformSurface(0,300,50);
floor.transform.matrix = transformSurface(1,300,300);
ramp.transform.matrix = transformSurface(0.5,300,150);
i += 0.01;
}
function transformSurface(angle:Number, i_x:Number, i_y:Number):Matrix {
var trMatrix:Matrix = new Matrix();
cosI = Math.cos(i);
sinI = Math.sin(i);
trMatrix.a = cosI;
trMatrix.b = sinI*0.5;
trMatrix.c = -sinI*angle*(1+Math.sin(angle*Math.PI)*0.25);
trMatrix.d = ((cosI*0.5*angle)+(1-angle))*(1+Math.sin(angle*Math.PI)*0.25);
trMatrix.tx = (cosI*radius)+i_x;
trMatrix.ty = (sinI*(radius/2))+i_y;
return trMatrix;
}

