SelfDXD ---
DirectXGraphic --- Programme / Quellcodes / Klassen
|
|
|
|
![]() |
Einleitung SetDirectionalLight( ) SetSpotLight( ) SetPointLight( )
|
Das Einstellen einer Lichtquelle erfordert das Ausfüllen eines speziellen Records, welches dem Device übergeben wird. Damit Sie sich das aufwendige Parameter-dem-Record-zuweisen sparen können, kopieren Sie einfach die folgenden Funktionen in Ihr Programm rein. Sie müssen dann lediglich nur eine dieser drei Funktionen auswählen, dieser alle nötigen Parameter übergeben, und sich ansonsten um nichts mehr kümmern.
Beachten Sie jedoch, dass Sie, wenn Sie die nachfolgenden Codes übernehmen, gegebenenfalls den Namen des Direct3DDevice8 ändern müssen.
Diese Funktion erzeugt ein gradliniges Licht:
procedure SetDirectionalLight( _dr, _dg, _db,
_ar, _ag, _ab,
_sr, _sg, _sb: Single;
_dir : TD3DXVector3;
_index: integer );
var
light : TD3DLIGHT8;
begin
ZeroMemory( @light, sizeof( TD3DLIGHT8 ) );
with light do
begin
_Type := D3DLIGHT_DIRECTIONAL;
Diffuse.r := _dr;
Diffuse.g := _dg;
Diffuse.b := _db;
Ambient.r := _ar;
Ambient.g := _ag;
Ambient.b := _ab;
Specular.r := _sr;
Specular.g := _sg;
Specular.b := _sb;
Direction := _dir;
end;
d3ddev8.SetLight( _index, light );
end;
|
Diese Funktion erzeugt ein Spotlight.
procedure SetSpotLight( _dr, _dg, _db,
_ar, _ag, _ab,
_sr, _sg, _sb,
_at0, _at1, _at2: Single;
_pos, _Dir: TD3DXVector3;
_theta, _phi,
_falloff, _range: single;
_index: cardinal);
var
light : TD3DLIGHT8;
begin
ZeroMemory( @light, Sizeof( TD3DLIGHT8 ) );
with light do begin
_Type := D3DLIGHT_SPOT;
Diffuse.r := _dr;
Diffuse.g := _dg;
Diffuse.b := _db;
Ambient.r := _ar;
Ambient.g := _ag;
Ambient.b := _ab;
Specular.r := _sr;
Specular.g := _sg;
Specular.b := _sb;
attenuation0 := _at0;
attenuation1 := _at1;
attenuation2 := _at2;
position := _pos;
direction := _dir;
theta := _theta;
phi := _phi;
falloff := _falloff;
range := _range;
end;
d3ddev8.SetLight( _index, light );
end;
|
Diese Funktion erzeugt ein Punktlicht.
procedure SetPointLight( _dr, _dg, _db,
_ar, _ag, _ab,
_sr, _sg, _sb,
_at0, _at1, _at2,
_range: single;
_pos: TD3DXVector3;
_index: integer );
var
light : TD3DLIGHT8;
begin
ZeroMemory( @light, Sizeof( TD3DLIGHT8 ) );
with light do
begin
_Type := D3DLIGHT_POINT;
Diffuse.r := _dr;
Diffuse.g := _dg;
Diffuse.b := _db;
Ambient.r := _ar;
Ambient.g := _ag;
Ambient.b := _ab;
Specular.r := _sr;
Specular.g := _sg;
Specular.b := _sb;
attenuation0 := _at0;
attenuation1 := _at1;
attenuation2 := _at2;
range := _range;
position := _pos;
end;
d3ddev8.SetLight( _index, light );
end;
|