Professional Documents
Culture Documents
1 de 4
http://www.swissdelphicenter.ch/torry/printcode.php?id=2437
//////////////////////////////////////////////////////////////////////
///
/// Einfaches Bumpmapping.
/// Ist vom Algorithmus sehr einfach, erzeugt aber ansehnliche Efffekte
/// (c) 2005 Borg@Sven-of-Nine.de
///
/// Beispielprogramm auch unter http://www.Sven-of-Nine.de
///
/////////////////////////////////////////////////////////////////////}
9/4/2011 00:37
2 de 4
http://www.swissdelphicenter.ch/torry/printcode.php?id=2437
9/4/2011 00:37
3 de 4
http://www.swissdelphicenter.ch/torry/printcode.php?id=2437
//Schoener Blauverlauf
for iIndex := 0 to 127 do
begin
c := 63 - iIndex div 2;
//Hier kann die Farber eingestellt werden 0.0-4.0
ColorArray[iIndex].rgbRed
:= round(c * r);
ColorArray[iIndex].rgbGreen := round(c * g);
ColorArray[iIndex].rgbBlue := round(c * b);
end;
//Schwarz und Wei definieren
Black.rgbRed
:= 0;
Black.rgbBlue := 0;
Black.rgbGreen := 0;
White.rgbRed
:= 255;
White.rgbBlue := 255;
White.rgbGreen := 255;
end;
// ----- Eigentliches Bumpmapping ausfhren ----procedure Bump_Do(Target: TBitmap; XLight, YLight: Integer);
var
iX, iY: Integer;
sLine: PLine;
iR1, iT1: Integer;
iR, iT: Integer;
z: Integer;
begin
//Alle Zeile (bis auf oben und unten)
for iY := 1 to TargetBMP.Height - 2 do
begin
//Scanline holen
sLine := TargetBMP.ScanLine[iY];
//Startposition im Quell-Array
z := iY * TargetBMP.Width;
//Vorberechnung zur Beleuchtung
iT1 := (iY - YLight);
//Und alle Pixel durchwursten
for iX := 1 to TargetBMP.Width - 2 do
begin
//Position im Array aktualisieren
Inc(z);
//Steigung in unserem Punkt bestimmen
iT := iT1 - (SourceArray[z + TargetBMP.Width] SourceArray[z - TargetBMP.Width]);
iR := (iX - XLight) - (SourceArray[z + 1] - SourceArray[z - 1]);
//Absolut machen
if (iR < 0) then iR := -iR;
if (iT < 0) then iT := -iT;
//Wie sieht die Steigung aus ?
iR1 := iR + iT;
if (iR1 < 129) then
begin
//Hohe steigung, Farbe holen
sLine[iX] := ColorArray[iR1];
end
else
begin
//Ansonsten schwarz
sLine[iX] := Black;
end;
end;
end;
//Ergebnis bergeben
Target.Assign(TargetBMP);
end;
9/4/2011 00:37
4 de 4
http://www.swissdelphicenter.ch/torry/printcode.php?id=2437
printed from
www.swissdelphicenter.ch
developers knowledge base
9/4/2011 00:37