home page previous page next page   Flisp3d Engine

counter Accesses
seit 6-July-2004
last Update: 
12-Oct-2005


Diagramm1.gif
Flisp3d ist eine 3d-Engine mit der man mit einfachen Befehlen komplexe 3D-Scenerien erstellen kann. Flisp3d ist modular aufgebaut und ist deshalb beliebig erweiterbar. Der Befehlsumfang umfaßt allgemeine Befehle für die Fensterbearbeitung, die Wahl der Projektionsart, dem Setzen verschiedener Eigenschaften uvm.
Für die grundlegende Navigation im Raum wird ein 3d-Cursor verwendet. Damit kann ähnlich der 2d-Steuerung einer Schildkröte in der altbekannten Programmiersprache LOGO ein Objekt im 3 dimensionalen Raum gesteuert werden.
Die Eigenschaften des 3d-Cursors werden je nach Bedarf mit zusätzliche Befehle für abgeleitete Objekte erweitert. So kann z.B. der Öffnungswinkel nur für das Auge geändert werden. Vordefiniert sind außer dem Objekt "Eye" mit dem die komplette Projektion gesteuert wird das Objekt "Light" für die Basisbeleuchtung der Scenerie und die Objekte "Fly" und "Bee", mit dem die darzustellenden 3d-Objekte definiert bzw. dargestellt werden.
Das Objekt "Ghost" wírd verwendet, um Objekte mittels vordefinierter Bewegungsabläufe zu animieren.

Von welchen Klassen diese Objekt abgeleitet sind, ist in folgendem Diagramm ersichtlich.
Diagramm1.gif
Natürlich ist man nicht auf die vordefinierten Objekte beschränkt. Von den Basisklassen können weitere 3d-Cursor Klassen abgeleitet werden, die um die zusätzlich benötigten Eigenschaften erweitert werden können.
Als Beispiel wurde die Klasse "Dragon3d"  realisiert, deren Objekte nach einer Bewegung im Raum eine Polygonlinie hinter sich her ziehen. Ein weiteres Beispiel ist die Klasse "Bounce3d", deren Objekte sich nur in einem begrenzten Raum bewegen können.

Der prinzipielle Aufbau der Flisp3d-Engine sieht wie folgt aus:
Diagramm2.gif
weitere Informationen folgen....

Beispiele:
Als Beispiel ist hier die procedurale Definition eines einfachen Flugobjektes names WireJet1 angegeben.
NewObjekt erzeugt ein Kopie des Objektes Fly welches vom Typ Fly3d ist.
JumpBack
springt um 'len' Einheiten nach hinten.
Show schaltet das Zeichnen einer Linie während einer Bewegung ein.
Die Befehle MoveLeft, Drift , MoveForward und MoveDown zeichnen Linien während sich der 3d-Cursor Fly bewegt.
OldObjekt stellt zu Abschluß den ursprünglichen Zustand des 
3d-Cursors Fly wieder her. Dabei werden die Position, die Orientierung im Raum und alle Attribute wie Zeichenfarbe und Zeichentransparenz wiederhergestellt.
WireJet1.gif

procedure WireJet1 (len: float);
var    s1,s2: float;
begin
  s1 := len / 3;
  s2 := len / 6;
  with Fly do begin
    NewObject;
      JumpBack (len);
      Show;                 // Tragflügel
      MoveLeft (s1);
      Drift (s1, len,0);
      Drift (s1,-len,0);
      MoveLeft (s1);
      MoveForward (s1);     // Seitenruder
      Drift (0, -s1, s2);
      MoveDown (s2);
    OldObject;
  end;
end;

Natürlich gibt es auch Routinen die nicht nur Linien sondern Figuren mit färbigen Flächen unterschiedlicher Transparenz und sich ändernten Farben dargestellt werden. Die Verwendung der Routine DrawSolidSurface für die Darstellung Parametrischer Flächen zeichnet z.B. diesen Cinquefoil Knoten.

Cinquefoil.jpg

function CinquefoilKnotPoint (u,v: float): v3d;
var   r,s: float;
begin
  r := 2*u / (2*k1 + 1);
  s := rx * (2 - cos(r)) + ry * cos(v);
  result.x := cos(u) * s;
  result.y := sin(u) * s;
  result.z := rx * sin(r) + ry * sin(v);
end;
//---------------------------------------------------------
procedure CinquefoilKnot (seg,lay: word; a,b,c: float;
                          n1: word);
begin
  SetFigureDimension (a/2, b/2, c);
  k1 := n1;
  DrawSolidSurface (@CinquefoilKnotPoint, seg,lay
                   ,0, (4*k1+2)*Pi, 0, Pi84);
end;


Downloads:
Fly3dExe


Fly3dExe.zip
Example scenes, simulations and rotating objects with background texture or picture (use drag & drop). Include: a molecule viewer for XYZ-files, many examples of  3d surfaces (for example Supertoroid, Steiner Surface, KleinBottle and much more).
The application is coded in Delphi and uses Graphics32 library v1.8 from Alex A. Denisov, which makes basic drawing primitives such as pixels, antialaised lines and
polygon and sprites with variable transparency available. Some new simulation examples are added e.g. Lorenz and Rössler attractor where the parameters can be changed interactively.
Currently no Direct3d or OpenGL library is being used. It is planned to speed up drawings by using 3d hardware interface OpenGL.

page created by [email protected]








Hosted by www.Geocities.ws

1