Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Metaballs (opengl) !? (https://www.delphipraxis.net/150673-metaballs-opengl.html)

Dracoon 23. Apr 2010 10:41


Metaballs (opengl) !?
 
hallo,
ich möchte gerne in mein programm ein nettes about einbauen.
habe da bislang immer die jedi vorlagen für genommen, aber ich hab neulich ein kleines programm gefunden das ein richtig schönes about hatte.

hier mal ein screenshot davon.

http://img145.imageshack.us/img145/272/metaballs.png

meine frage ist nun ob mir jemand sagen könnte wie ich das ganze realisiere.
ich hab bereits ein wenig gegoogelt und bin dabei auf das hier gestossen

http://www.sulaco.co.za/opengl_project_metaballs.htm

jeddoch kann ich damit nicht wirklich viel anfangen =(
da das was ich haben möchte ganz anders aussieht, und ich drch den code in den src nicht ganz durchsteige.
wäre nett wenn da jemand helfen könnte.

Blup 23. Apr 2010 11:01

Re: Metaballs (opengl) !?
 
http://de.wikipedia.org/wiki/Metaball

Die Formel ist bekannt, in 2D ist der Rechenaufwand für aktuelle Prozessoren auch nicht zu groß, so daß zum Test erst einmal auf Optimierung verzichtet werden kann.

himitsu 23. Apr 2010 11:01

Re: Metaballs (opengl) !?
 
Nimm ein TImage, leg es in deinen About-Dialog, papp da dieses Bild rein und fertig.

Tut mir leid, aber ich glaub viele verstehen nicht, was hier überhaupt gemeint ist ... für mich ist dieser Screeshot jedenfalls nur starres und unveränderliches Bild und ich kann bei bestem Willen nicht erkennen, was da jetzt sooo schön sein soll.

Dracoon 23. Apr 2010 11:09

Re: Metaballs (opengl) !?
 
@ blup
thx aber da war ich schon, kann ich nich viel mit anfangen :P
hab von opengl nich so den plan =(

@ himitsu
solche comments kannst dir schenken..
wenn du den titel gelesen hättest dann solltest dur dir eigentlich denken können worum es mir geht.


ich hab dafür über google nur ne vorlage in ASm gefunden, und damit kann ich noch weniger anfangen :P

Blup 23. Apr 2010 15:37

Re: Metaballs (opengl) !?
 
Warum so unfreundlich, ich hab auch nicht ganz verstanden was du eigentlich erreichen willst.
Es gilt doch erst mal nur simpel die Formel umzusetzen.

Also hier ein extrem einfache Variante ohne Optimierung:
Delphi-Quellcode:
type
  TMetaball = record
    x: Double;
    y: Double;
    vx: Double;
    vy: Double;
  end;

var
  FMetaball: array of TMetaball;

procedure TForm1.BtnMetaballClick(Sender: TObject);
var
  xMax, yMax, i, n: Integer;
begin
  xMax := ImgMetaball.Width - 1;
  yMax := ImgMetaball.Height - 1;
  n := 5;
  SetLength(FMetaball, n);
  for i := 0 to n - 1 do
  begin
    FMetaball[i].x := Random(xMax + 1);
    FMetaball[i].y := Random(yMax + 1);
    {Richtung * Geschwindigkeit}
    FMetaball[i].vx := (Random(2) * 2 - 1) + (Random * 0.5 + 0.5);
    FMetaball[i].vy := (Random(2) * 2 - 1) + (Random * 0.5 + 0.5);
  end;
  {Rendern}
  RenderMetaball;
  TimerMetaball.Enabled := True;
end;

procedure TForm1.RenderMetaball;
var
  xMax, yMax,
  i, x, y: Integer;
  m, d: Double;
begin
  xMax := ImgMetaball.Width - 1;
  yMax := ImgMetaball.Height - 1;
  ImgMetaball.Picture := nil;
  ImgMetaball.Picture.Bitmap.SetSize(xMax + 1, yMax + 1);
  for y := 0 to yMax do
  begin
    for x := 0 to xMax do
    begin
      m := 0;
      for i := 0 to High(FMetaball) do
      begin
        d := sqr(x - FMetaball[i].x) + sqr(y - FMetaball[i].y);
        if d = 0 then
          m := m + 1
        else
          m := m + (1 / d);
      end;
      if m > 0.001 then
        ImgMetaball.Picture.Bitmap.Canvas.Pixels[x, y] := clBlack;
    end;
  end;
end;

procedure TForm1.TimerMetaballTimer(Sender: TObject);
var
  xMax, yMax,
  i: Integer;
begin
  {Metaball bewegen}
  xMax := ImgMetaball.Width - 1;
  yMax := ImgMetaball.Height - 1;
  for i := 0 to High(FMetaball) do
  begin
    with FMetaball[i] do
    begin
      x := x + vx;
      if x < 0 then
      begin
        x := 0;
        vx := Abs(vx);
      end
      else if x > xMax then
      begin
        x := xMax;
        vx := -Abs(vx);
      end;
      y := y + vy;
      if y < 0 then
      begin
        y := 0;
        vy := Abs(vy);
      end
      else if y > yMax then
      begin
        y := yMax;
        vy := -Abs(vy);
      end;
    end;
  end;
  {Rendern}
  RenderMetaball;
end;

blackfin 23. Apr 2010 15:48

Re: Metaballs (opengl) !?
 
Nur so als kleiner Tipp:

Versuche lieber nicht, OpenGL dafür zu verwenden, wenn deine Anwendung ansonsten kein OpenGL nutzt.
Nur für einen About-Screen wäre die Initialisierung eines OpenGL-Rendercontext etwas, sagen wir mal, "übertrieben" :)
Ausserdem handelst du dir damit mehr Ärger als Nutzen ein, falls du dein Programm an andere verteilst, da du dann dein Programm von einer OpenGL-fähigen Grafikkarte abhängig machst (und es gibt leider noch viele PC's, die das nicht haben)

Das soll keine Kritik an deinem Vorhaben sein, sondern nur ein kleiner Hinweis, wenn das Ding wirklich nur für den About benutzt werden soll :)
Hat deine Anwendung eh schon OpenGL drin, ists egal :)

grüssle,

Fin

Dracoon 23. Apr 2010 16:43

Re: Metaballs (opengl) !?
 
thx blackfin
nein sie hat sonst kein opengl.
ich dachte das ich das dafür brauche, weil ich halt beim googeln immer wieder auf opengl foren oder webseiten hängen geblieben bin in denen es um opengl geht.

Dracoon 23. Apr 2010 17:17

Re: Metaballs (opengl) !?
 
Liste der Anhänge anzeigen (Anzahl: 1)
hab mal das asm beispiel in den anhang gepackt.
habs auf virustotal überprüfen lassen, hier der link.
http://www.virustotal.com/de/analisi...450-1272039166

das möchte ich erreichen.

turboPASCAL 23. Apr 2010 17:25

Re: Metaballs (opengl) !?
 
Ja, und woher ist das ASM-Beispiel ?

Dracoon 23. Apr 2010 17:29

Re: Metaballs (opengl) !?
 
Zitat:

Zitat von Dracoon
ich hab dafür über google nur ne vorlage in ASm gefunden, und damit kann ich noch weniger anfangen :P

weiss leider nicht mehr aus welchem forum -.-"
aber in dem thread gings halt um so sachen und da hatt jemand n bild und den src gepostet davon.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 Uhr.
Seite 1 von 2  1 2      

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