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