Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DirectX Textur "zerlegen" (https://www.delphipraxis.net/145242-directx-textur-zerlegen.html)

GOOFY009 27. Dez 2009 16:07


DirectX Textur "zerlegen"
 
Hallo !

Ich habe ein Image (1024x1024) welches aus 22 x 22 kleineren Bildern besteht.
Diese möchte ich nun einzeln aus dem Image als Textur laden.

Nur, wie stelle ich das unter Delphi in DirectX an ?

Ich habe schon einiges im Netz gesucht, bin aber bisher nicht fündig geworden.

Vieleicht weis hier ja jemand wie man das hinbekommt ?

Gruß und Danke

GOOFY

XoRiC 23. Jan 2010 18:48

Re: DirectX Textur "zerlegen"
 
Hi GOOFY009,

damit kann ich dir helfen wenn die Frage noch offen ist.
Melde dich kurz, dann helf ich dir gerne.

Gruß Xoric

BUG 23. Jan 2010 19:10

Re: DirectX Textur "zerlegen"
 
@XoRiC: Schreib die Lösung doch hier, dann haben alle was davon.

In Kurzform und aus der Hüfte geschossen:
Du könntest versuchen, mithilfe der Texturkoordinaten (u, v) nur das interessante Teilbild zu zeigen.

Aphton 23. Jan 2010 19:20

Re: DirectX Textur "zerlegen"
 
BUG's Vorschlag in ausführlicher Form
Delphi-Quellcode:
var
  w, h,
  u, v,
  x, y  : Single;
  iX, iY : Integer;
const
  xParts = 22;
  yParts = 22;
begin
  w := 1.0; // full width in OpenGL
  h := 1.0; // full height in OpenGL
  u := w/xParts;
  v := h/yParts;
  for iX := 0 to xParts-1 do
  begin
    x := iX*u;
    for iY := 0 to yParts-1 do
    begin
      y := iY*v;
      {
        Linke obere Ecke  : x,  y
        Rechte untere Ecke : x+u, y+v
        ... hier müsstest du nur noch mehr nach einer "CopyRect" DX-Funktion suchen.
      }
    end;
  end;
end;
MfG

GOOFY009 23. Jan 2010 20:49

Re: DirectX Textur "zerlegen"
 
Hi !

Danke für die (späte) Hilfe.
Ich habe für mich aber inzwischen die Lösung schon gefunden und an diesen Post gar nicht mehr gedacht :-D

Also hier meine Lösung und wie ich es mache :
Delphi-Quellcode:
procedure LoadIcons;
var
  i,a      : Integer;
  x,y,_x,_y : Integer;
begin
  D3DXCreateTextureFromResourceExA(myD3Device,hInstance,'GUI',1024,1024,0,0,D3DFMT_UNKNOWN,D3DPOOL_MANAGED,
    D3DX_FILTER_NONE,D3DX_FILTER_NONE,D3DCOLOR_ARGB(255,255,0,255),nil,nil, m_Icons[0]);
  x := 0 ; y := 0; a:= 0;
  _x := 46; _y := 46;
  for i:= 0 to 483 do begin
    m_IRect[i].Left := x;
    m_IRect[i].Right := _x;
    m_IRect[i].Top := y;
    m_IRect[i].Bottom := _y;
    inc(x,46); inc(_x,46);
    if (x = 1012) then begin
      x := 0; inc(a,1);
      inc(y,46); inc(_y,46);
      _x := _y - (46*a);
    end;
  end;
end;
Wobei hier m_IRect ein Array of TRect ist.
Eventuell gibt es noch eine bessere Variante aber es funktioniert soweit und wenn ich mal durch bin,
werde ich es eventuell mal "verfeinern".

Nochmals Danke !

GOOFY


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