![]() ![]() ![]() |
|
![]() |
|
![]() |
![]() |
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).