Einzelnen Beitrag anzeigen

Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#336

Re: Andorra 2D [Ver. 0.20 ALPHA 2, 05.10.07]

  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
"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
  Mit Zitat antworten Zitat