SelfDXD ---
DirectXGraphic --- Programme / Quellcodes / Klassen
|
|
|
|
![]() |
DXPaint_Texture( ) |
Mit der folgenden Funktion lassen sich zur Laufzeit Texturen erstellen, die ein Gittermuster (zaunähnlich) haben. Durch mehrmaliges Ausführen der Prozedur mit unterschiedlichen Parametern, lassen sich diverse Effekte erzielen. Am einfachsten lässt sich die Prozedur verwenden, wenn Sie damit 16-Bit-Texturen bearbeiten wollen, wobei jeweils 4 Bits jedem Farbkanal (einschliesslich Alpha-Kanal) zugeordnet sind.

procedure DXPaint_Texture(_textur: IDirect3DTexture8;
_breite, _abstand, _sx, _sy: integer;
_color: word; _overwrt: boolean);
var
d3dlr: TD3DLocked_Rect;
cursor: pWord;
x, y: integer;
YInc: longint;
summe: integer;
hr: HRESULT;
begin
summe := _breite + _abstand;
hr := _textur.LockRect(0, d3dlr, nil, 0);
if hr = D3D_OK then
begin
YInc := (d3dlr.Pitch shr 1);
cursor := d3dlr.pBits;
for x := 1 to YInc do
begin
for y := 1 to YInc do
begin
if ((y + x - _sx) mod summe) <= _breite then
begin
cursor^ := _color;
end
else
begin
if _overwrt then
begin
cursor^ := $f000;
end;
end;
if ((y + Yinc - x - _sy) mod summe) <= _breite then
begin
cursor^ := _color;
end;
inc(cursor);
end;
end;
end
else
begin
hHalt(PChar(errtostr(hr)), Application);
end;
_textur.UnlockRect(0);
end;
|
_textur: die Textur, die bearbeitet werden soll. Beachten Sie, dass man nur Texturen locken kann, die mit D3DPOOL_MANAGED erstellt worden sind.
_breite, _abstand: Die Breite der Linien und der Abstand zwischen zwei Linien.
_sx, _sy: Werte, um das Gitter zu verschieben.
_color: Farbe der Linien. Die freien Stellen werden, sofern _overwrt auf TRUE gesetzt wurde, mit einem transparenten Schwarz gefüllt.
_overwrt: Gibt an, ob die freien Stellen mit einem transparenten Schwarz übermal werden sollen, oder nicht. Diese Auswahl erlaubt es Ihnen, die Prozedur mehrmals aufzurufen, und so mehrere Gitter "übereinander" zu malen (zum Beispiel für Schatteneffekte).