AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Andorra 2D [Ver. 0.4.5.1, 31.12.08]
Thema durchsuchen
Ansicht
Themen-Optionen

Andorra 2D [Ver. 0.4.5.1, 31.12.08]

Ein Thema von igel457 · begonnen am 24. Nov 2006 · letzter Beitrag vom 14. Sep 2011
Antwort Antwort
Seite 34 von 103   « Erste     24323334 35364484     Letzte »    
Benutzerbild von igel457
igel457
Registriert seit: 31. Aug 2005
Andorra 2D

Was ist Andorra 2D?
Nein, Andorra 2D hat nichts mit dem kleinen europäischen Staat "Andorra" zu tun. Wie das "2D" im Namen auch schon erraten lässt, handelt es sich um eine 2D Engine. Diese wird für Delphi und Lazarus (Freepascal) entwickelt und zwar um das bekannte und oft verwendete DelphiX abzulösen (was an DelphiX nicht so toll ist lest ihr am besten hier). Andorra 2D hat einen ähnlichen Aufbau wie DelphiX - das Spriteengineinterface ist sogar zu 99% das Gleiche.

Features
Was ist nun das Besondere an Andorra 2D?
- Hardwarebeschleunigung
- Verwendung von Plugins zur Grafikdarstellung wodurch OpenGL, DirectX oder sogar die GDI mit Andorra 2D verwendet werden können
- Integrierte und beschleunigte Spriteengine
- Integrierte Zoomfunktion in der Spriteengine
- Modularer aufbau von den Loadern für Texturformate, es können einfach eigene Hinzugefügt werden
- orthogonale und perspektivische Projektionsmatrix
- Integration von 3D-Modellen (die Loader sind noch nicht geschrieben)
- Schnelle Partikelsysteme
- Ausnutzung von Multi-Core CPUs
- Lichter
- Shadersupport (Cg und HLSL)
- Einfaches Surface-System
- Einfaches Scenenmanagement
- Videowiedergabe mit MPEG2 Support
- Verwendung von mehreren "Windowframeworks", wodurch Unabhängikeit von der VCL/LCL erreicht wird.
- Clipping/Splitscreens
- 2D Physikengine mit Newton
- Integriertes "Hardware Canvas"
- Mächtiges, voll Skinbares GUI-System
- Nicht überladen - man wird nicht zum benutzen bestimmter Features gezwungen (wie zum Beispiel Datenpackages, wie dies in anderen Engines der Fall ist)
- Opensource, entweder unter der CPL oder der GPL verwendbar
- Mächtiges Bundle von Editoren und Tools
- Deutsche Tutorials
- Viele Demos
- Und natürlich die Banalitäten, die man sich von einer 2D-Engine so wünscht: Rotation, Additives Zeichnen, Skalierung, BitBlt, Texturzugriffe et cetera

Da die Plugins nur um die Basisfunktionalitäten der Grafikschnittstellen Wrapen, könnte man die Plugins theoretisch für eine Hybrid 3D-Engine verwenden

Mehr Infos...
...sowie Tutorials und weitere Links...
gibt es auf der Website: http://andorra.sourceforge.net/
Dort findet ihr auch Demos, Tutorials und Screenshots...

Wenn ihr Fragen, Kritik oder Anregungen habt, dann könnt ihr diese entweder hier oder bei SourceForge posten.

Downloads:
Momentan gibt es die Version 0.4.5. Einen Überblick über alle Downloads gibt es hier.

Das Package mit allen Demos, Prerequisiten und Binaries gibt es in der neusten Version hier:
Andorra 2D All-In-One-Package 23MB

Tutorials:
Die Tutorials gibt es nicht nur auf der Website, sondern auch in der DP. Allerding möchte ich betonen, dass die Tutorials auf meiner Website aktueller sind. Ich kann meine eigenen Tutorials hier nämlich nicht mehr bearbeiten (@Daniel: dringend umändern!). Hier ist eine kleine Liste, wobei die Sterne die Schwierigkeit darstellen:
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngTutorial 1 - Installieren und Initialisieren
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngAndorra 2D über CVS aktualisieren
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngTutorial 2 - Das erste Bild
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngTutorial 3 - Die Spriteengine
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngPartikelsysteme
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngDer Canvas
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngDas GUI-System
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pnghttp://andorra.sourceforge.net/img/star2.pngAndorra 2D und Lazarus
http://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star.pnghttp://andorra.sourceforge.net/img/star2.pngÜber Windowframeworks

FAQ:
Eine Sammlung oft gefragter Fragen findet sich hier:
http://andorra.sourceforge.net/index.php?section=FAQ

Wichtig:
Falls ihr ein Programm mit Andorra 2D geschrieben habt/daran schreibt, dann wäre es schön wenn ihr mir Bescheid sagen könnt. Dann bekomme ich nämlich mal einen Überblick, wer die Bibliothek nun überhaupt verwendet und außerdem kann ich auf meiner Website Screenshots von eurem Projekt einfügen und auch auf eine eventuelle Website eures Projektes verlinken.

Über diesen Thread:
Bitte schreibt hier nur Wünsche oder Anregungen herein, die direkt mit der Engine zu tun haben. Wenn ihr eine Frage über die Anwendung in eurer Anwendung habt, dann macht am besten einen eigenen Thread im Multimedia-Teil auf, bei dem ihr "[Andorra 2D]" vor den Titel schreibt.

Danke für euer Interesse,
Andreas
Miniaturansicht angehängter Grafiken
imagelisteditor_692.png   physics2_202.png   extended_spriteengine_868.png   wormhunter_412.png  
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
 
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#331
  Alt 20. Okt 2007, 18:03
Gerade schreibe ich den Andorra 2D Canvas um/neu. Neue Features darin werden sein:
- Doppelt so schnell wie vorher
- Keine Darstellungsfehler wie vorher
- Einstellen der Stiftbreite
- Einstellen von Texturen als Pen oder Brush
- Zeichnen von Polygonen
- Zusammenfassen von Objekten in "Display Listen"
- Vielleicht zeichnen von "Dashed"-Linien

Als Vorgeschmack im Anhang ein Screenshot meiner neuen Demo "Spiral"
Miniaturansicht angehängter Grafiken
spiral_122.png  
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#332
  Alt 21. Okt 2007, 12:33
Nochmal ein Screenshot von genau der gleichen Demo, dieses mal wurde die Linie jedoch texturiert. Alles was dazu nötig ist, sind folgende Zeilen:
Delphi-Quellcode:
Pen.Texture := AdImageList[0].Texture.Texture;
Pen.TextureMode := tmTile; //Alternativ auch "Stretch"
Wichtig ist jedoch, das die Textur eine "Power of Two"-Größe hat, sonst entstehen schwarze Lücken.

Übrigens: Mein Canvas-Code ist mittlerweile rund 1000 Zeilen lang - kann aber nur Linien zeichnen. Er wurde in die Unit "AdCanvas" ausgelagert, die jetzt bei der Benutzung extra eingebunden werden muss.

Man kann das mit den Texturen besonders gut für "Strahlenkanonen" verwenden.
Miniaturansicht angehängter Grafiken
spiral2_125.png  
Andreas
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#333
  Alt 21. Okt 2007, 14:00
Sieht nicht schlecht aus.... sind das jetzt OpenGL Funktionen die du vereinfachst mit deinem TCanvas ?
Michael Springwald
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#334
  Alt 21. Okt 2007, 14:43
Nach wie vor ist das natürlich von OpenGl oder Direct3d unabhängig und läuft mit beidem.
Spezielle OpenGl/DirectX Funktionen kommen nicht zum Einsatz - an der Plugin-DLL wurde nichts verändert.
Vielmehr generiere ich aus dickeren Linien ein Polygon:
Delphi-Quellcode:

function OrthogonalPoints(x1, y1, x2, y2, d: integer): TAdCanvasQuad;
var
  alpha:double;
  l:double;
begin
  FillChar(result, SizeOf(result), 0);

  l := sqrt(sqr(x2-x1)+sqr(y2-y1));

  if l > 0 then
  begin
    alpha := arccos((x2-x1)/l);

    if (y2 > y1) then
    begin
      alpha := 2 * pi - alpha;
    end;
    alpha := - alpha;

    result.p1.X := x1 + cos(alpha + 0.5*pi) * d / 2;
    result.p1.Y := y1 + sin(alpha + 0.5*pi) * d / 2;
    result.p2.X := x1 + cos(alpha - 0.5*pi) * d / 2;
    result.p2.Y := y1 + sin(alpha - 0.5*pi) * d / 2;

    result.p3.X := x2 + cos(alpha + 0.5*pi) * d / 2;
    result.p3.Y := y2 + sin(alpha + 0.5*pi) * d / 2;
    result.p4.X := x2 + cos(alpha - 0.5*pi) * d / 2;
    result.p4.Y := y2 + sin(alpha - 0.5*pi) * d / 2;
  end;
end;

[...]

    //Calculate Vertices
    FPoints.StartIteration;
    i := 0;
    lp := nil;
    while not FPoints.ReachedEnd do
    begin
      cp := PAdLinePoint(FPoints.GetCurrent);

      [...]

      if lp <> nil then
      begin
        FLastQuad := quad;
        quad := OrthogonalPoints(lp^.x, lp^.y, cp^.x, cp^.y, FPen.Width);

        Vertices[i*2].Position := AdVector3(quad.p3.x, quad.p3.y, 0);
        Vertices[i*2].Color := cp^.Color;
        Vertices[i*2+1].Position := AdVector3(quad.p4.x, quad.p4.y, 0);
        Vertices[i*2+1].Color := cp^.Color;

        if i = 1 then
        begin
          Vertices[0].Position := AdVector3(quad.p1.x, quad.p1.y, 0);
          Vertices[0].Color := lp^.Color;
          Vertices[1].Position := AdVector3(quad.p2.x, quad.p2.y, 0);
          Vertices[1].Color := lp^.Color;
        end;
      end;

      lp := cp;
      i := i + 1;
    end;

[...]

    //Calculate Indices
    for i := 0 to FPoints.Count - 2 do
    begin
      Indices[i * 6] := (i * 2) + 1;
      Indices[i * 6 + 1] := (i * 2);
      Indices[i * 6 + 2] := (i * 2) + 2;
      Indices[i * 6 + 3] := (i * 2) + 1;
      Indices[i * 6 + 4] := (i * 2) + 2;
      Indices[i * 6 + 5] := (i * 2) + 3;
    end;
DirectX (über IDXLine oder sö ähnlich) oder OpenGl (über SetLineWidth oder so) machen das vermutlich intern genauso.

Zur Veranschaulichung habe ich nochmal ein Bild angehängt:
Miniaturansicht angehängter Grafiken
canvasline_117.png  
Andreas
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#335
  Alt 21. Okt 2007, 15:31
und wie bekommst du die Textur da rein ?
Michael Springwald
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#336
  Alt 21. Okt 2007, 16:50
Ganz Einfach: Indem ich die Texturkoordinaten der Vertices entsprechend setze:
Delphi-Quellcode:
procedure TAdCanvasLine.GenerateTextureCoords(maxlen: double;
  var Vertices: TAdVertexArray);
var
  i:integer;
  lp,cp:PAdLinePoint;
  ax,ay1,ay2,len:double;
begin
  //Stretch coordinates
  if Pen.TextureMode = tmStretch then
  begin
    FPoints.StartIteration;
    i := 0;
    lp := nil;
    ax := 0;
    while not FPoints.ReachedEnd do
    begin
      cp := PAdLinePoint(FPoints.GetCurrent);

      Vertices[i*2].Texture.Y := 0;
      Vertices[i*2+1].Texture.Y := 1;
      if lp = nil then
      begin
        Vertices[0].Texture.X := 0;
        Vertices[1].Texture.X := 0;
      end
      else
      begin
        len := sqrt(sqr(lp^.X - cp^.X) + sqr(lp^.Y - cp^.Y));
        ax := ax + len/maxlen;
        Vertices[i*2].Texture.X := ax;
        Vertices[i*2+1].Texture.X := ax;
      end;
      lp := cp;
      i := i + 1;
    end;
  end;

  //Tile Coordinates
  if Pen.TextureMode = tmTile then
  begin
    FPoints.StartIteration;
    i := 0;
    lp := nil;
    ax := 0;
    ay1 := 0.5 - (FPen.Width / 2) / (Pen.Texture.Height);
    ay2 := 0.5 + (FPen.Width / 2) / (Pen.Texture.Height);
    while not FPoints.ReachedEnd do
    begin
      cp := PAdLinePoint(FPoints.GetCurrent);

      Vertices[i*2].Texture.Y := ay1;
      Vertices[i*2+1].Texture.Y := ay2;

      if lp = nil then
      begin
        Vertices[0].Texture.X := 0;
        Vertices[1].Texture.X := 0;
      end
      else
      begin
        len := sqrt(sqr(lp^.X - cp^.X) + sqr(lp^.Y - cp^.Y));
        ax := ax + len/Pen.Texture.Width;
        Vertices[i*2].Texture.X := ax;
        Vertices[i*2+1].Texture.X := ax;
      end;
      lp := cp;
      i := i + 1;
    end;
  end;
end;
Der Grafikkarte ist es schließlich egal, ob die Vertices die ich zeichne ein 3D-Model, ein 2D-Sprite, ein Stern oder eben eine Linie sein sollen.
Andreas
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#337
  Alt 21. Okt 2007, 18:05
Interessant.... würde das so auch bei einem Normalen Canvas gehen ? also ohne OpenGL Unterstützung oder DX ?

Weil ich mich immer gefragt habe, wie die das bei www.clonk.de z.b. immer machen, mit den Texturen.... das die in einen Polygone gezeichnet werden.
Michael Springwald
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#338
  Alt 21. Okt 2007, 18:47
Mit der Graphics32-Bibliothek ist das kein Problem. Sonst ist es vermutlich mit der GDI/GDI+ irgendwie möglich. Unter Linux (worauf du sicherlich hinaus willst) habe ich keine Ahnung. Mehr weiß ich leider auch nicht. Wenn es dich interessiert (mich interessiert es auch) kannst du ja einfach einen neuen Thread aufmachen und Fragen, vielleicht weiß ja jemand anderes bescheid.

EDIT: Die einfachste Methode ist es, die Textur gekachelt auf ein Bitmap zu zeichnen und dann ein anderes Bitmap mit dem Polygon als SW-Bild als Maske darüberzulegen.
Andreas
  Mit Zitat antworten Zitat
mimi

 
FreePascal / Lazarus
 
#339
  Alt 22. Okt 2007, 14:56
ich habe mal hier nachgefragt:
http://www.delphipraxis.net/internal...=795880#795880
Michael Springwald
  Mit Zitat antworten Zitat
knoby

 
Delphi 7 Enterprise
 
#340
  Alt 30. Okt 2007, 18:36
HI

ich benutze seit einer Woche Andorra und wühle mich im mom durch die ganzen Funktionen ...
Dabei bin ich auf zwei Probleme gestoßen:

1)
Wenn ich versuche ein Programm mit TAdSetup aus der AdSetupdlg zu compilieren also diesen Optionendialog spukt mir das Programm folgenden Fehler aus:

Fehler beim Lesen von Image1.ExpliciteLeft: Eigenschaft ExpliciteLeft existiert nicht.

Das spuckt er mir nicht als Compilerfehler aus sondern das compilierte Programm ... woran kann das liegen?

und

2)
Die GUI steuerung sieht so was ich bis jetzt gesehn habe gut aus nur ich komme mit der Ansteuerung der einzelnen Elemente nicht ganz klar wie ich zum beispiel Rausfinde Was jetzt im GUI in die Textbox geschrieben wurde usw ... wäre shcön wenn du dazu nen einfaches Beispiel Programm hättest oder gleich nen Tutorial

schonmla danke


mfg

knoby
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 34 von 103   « Erste     24323334 35364484     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz