![]() |
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. ![]() 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 ![]() 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. |
Re: Metaballs (opengl) !?
![]() 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. |
Re: Metaballs (opengl) !?
Zitat:
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. |
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 |
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; |
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 |
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. |
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. ![]() das möchte ich erreichen. |
Re: Metaballs (opengl) !?
Ja, und woher ist das ASM-Beispiel ?
|
Re: Metaballs (opengl) !?
Zitat:
aber in dem thread gings halt um so sachen und da hatt jemand n bild und den src gepostet davon. |
Re: Metaballs (opengl) !?
Das wichtigste wurde ja schon hier von Blup geposted, der Sourcecode.
Zitat:
Hier gehibts eine Demo mit Sourcecode dazu: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz