Skip to content

Grafikspielerei – isometrische Darstellung

2007 March 10
by Sven Busse

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.

Du hast leider kein Flash. Das ist mir unverständlich. Lad es doch fix hier runter.



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;
}
Share this:
  • email
  • Twitter
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Posterous
  • Digg
  • Technorati
  • Slashdot
  • Suggest to Techmeme via Twitter
  • StumbleUpon
  • Reddit
  • Netvibes
  • LinkedIn
  • Mixx
No comments yet

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS