Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Anti Grain Geometry ---> Span Algorithmus??? (https://www.delphipraxis.net/187113-anti-grain-geometry-span-algorithmus.html)

DualCoreCpu 28. Okt 2015 12:51

Anti Grain Geometry ---> Span Algorithmus???
 
Hallo,

ich teste gerade die Demoprogramme der Pascal-Portierung des Anti-Grain-Geometry Projektes, das es hier auch in c/C++ geschrieben gibt: http://www.antigrain.com.

In der Unit agg_renderer_base.pas habe ich diese Zeilen hier gefunden:

Delphi-Quellcode:
{ SPAN - not_implemented}
{$NOTE renderer_base.span not implemented yet}
function renderer_base.span(x, y: int; len: unsigned): pointer;
begin
end;
UNd weiter unten das hier:
Delphi-Quellcode:
{ BLEND_SOLID_VSPAN }
procedure renderer_base.blend_solid_vspan(x, y, len: int; c: aggclr_ptr;
covers: int8u_ptr);
begin
 if x > _xmax then
  exit;

 if x < _xmin then
  exit;

 if y < _ymin then
  begin
   dec(len ,_ymin - y );

   if len <= 0 then
    exit;

   inc(ptrcomp(covers ) ,(_ymin - y ) * sizeof(int8u ) );

   y:=_ymin;

  end;

 if y + len > _ymax then
  begin
   len:=_ymax - y + 1;

   if len <= 0 then
    exit;

  end;

 m_ren.blend_solid_vspan(m_ren ,x ,y ,len ,c ,covers );

end;

{ COPY_COLOR_HSPAN }
procedure renderer_base.copy_color_hspan(x, y, len: int; colors: aggclr_ptr);
var
 d : int;

begin
 if y > _ymax then
  exit;

 if y < _ymin then
  exit;

 if x < _xmin then
  begin
   d:=_xmin - x;

   dec(len ,d );

   if len <= 0 then
    exit;

   inc(ptrcomp(colors ) ,d * sizeof(aggclr ) );

   x:=_xmin;

  end;

 if x + len > _xmax then
  begin
   len:=_xmax - x + 1;

   if len <= 0 then
    exit;

  end;

 m_ren.copy_color_hspan(m_ren ,x ,y ,len ,colors );

end;
Nach meinem bisherigen Verständnis wird der Parameter len hier auf die Breite des sichtbaren Bilschirmbereiches oder des sichtbaren Fensters berechnet.

Die übergebenen Parameter sind aber Wertparameter, die keine Auswirkung außerhalb der Prozedurren haben.

Wozu also die Berechnung?

Die nächste und eigentliche Frage ist, Was muss in renderer_base.span() erledigt werden und warum.

Ich könnte mir genauso gut die Quelltexte aus dem C/C++ Original her nehmen, und hoffen, das der gesuchte Algorithmus dort implementiert ist. Dann aber habe ich nach der Übersetzung dieser Funktion den Algorithmus immer noch nicht verstanden.

Deshalb frage ich hier.

Wer kann weiter helfen. Gerne auch mit einem Link zu einer verständlichen Beschreibung des Alogorithmus.

DualCoreCpu 29. Okt 2015 16:45

Anti Grain Geometry
 
Da gab ich mal so langsam ein ***PUSH***

Habe aber die Demos übersetzen können, manche funktionieren, andere stürzen ab. Ich glaub aber nicht, das das an der fehlenden Funktion liegt.

Obwohl das Demo mit dem Namen particle_demo fehlerhaft darstellt.

Das Original der Bibliothek gibt es in c/C++ geschrieben hier: http://www.antigrain.com

Die Pascalportierung ist Bestandteil des fpGUI Projektes von Graeme Geldenhuys.

http://fpgui.sourceforge.net/

Wenn function renderer_base.span() nur Initialisierungen vornähme sollte ein Workaround darin bestehen, den anderen bereits implementierten span Funktionen initialisierte Werte zu übergeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:35 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