![]() |
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 |
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 |
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. |
Re: DirectX Textur "zerlegen"
BUG's Vorschlag in ausführlicher Form
Delphi-Quellcode:
MfG
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; |
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:
Wobei hier m_IRect ein Array of TRect ist.
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; 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 11:23 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