Einzelnen Beitrag anzeigen

DualCoreCpu
(Gast)

n/a Beiträge
 
#1

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

  Alt 28. Okt 2015, 12:51
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.
  Mit Zitat antworten Zitat