Nun gut hier ist der Effect-Code:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
VECTOR vPosition;
VECTOR vDirection;
technique TECHNIQUE1
{
pass PASS1
{
// Einen Richtungslicht erstellen
LightType[0] = DIRECTIONAL;
LightDiffuse[0] = {1.0, 1.0, 1.0};
LightSpecular[0] = {1.0, 1.0, 1.0};
LightAmbient[0] = {0.1, 0.1, 0.1};
LightDirection[0] = {0.0, -1, 1.0};
// Einen Spotlicht erstellen
LightType[1] = SPOT;
LightDiffuse[1] = {1.0, 1.0, 1.0};
LightSpecular[1] = {1.0, 1.0, 1.0};
LightAmbient[1] = {0.1, 0.1, 0.1};
LightPosition[1] = <vPosition>;
LightDirection[1] = <vDirection>;
LightRange[1] = 1000;
LightTheta[1] = 0.523;
LightPhi[1] = 1.57;
LightAttenuation0[1] = 0.0;
LightAttenuation1[1] = 0.025;
LightAttenuation2[1] = 0.0;
LightFalloff[1] = 1.0;
// Licht einschalten
LightEnable[0] = True;
LightEnable[1] = True;
Lighting = True;
}
}
|
Und hier der C++-Code: (verkürzt, Render-Methode)
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
// Die Richtung und die Position des Spotlichts setzen
D3DXVECTOR4 vSpotPosition;
D3DXVECTOR4 vSpotDirection;
vSpotPosition.x = g_vCameraPosition.x;
vSpotPosition.y = g_vCameraPosition.y;
vSpotPosition.z = g_vCameraPosition.z;
vSpotPosition.w = 0.0f;
vSpotDirection.x = vCameraDirection.x;
vSpotDirection.y = vCameraDirection.y;
vSpotDirection.z = vCameraDirection.z;
vSpotDirection.w = 0.0f;
// Die Werte in den Effekt übertragen
if(FAILED(hResult = g_pEffect->GetEffect()->SetVector("vPosition", &vSpotPosition)))
{
// Fehler!
TB_ERROR_DIRECTX("g_pEffect->GetEffect", hResult, TB_ERROR);
}
if(FAILED(hResult = g_pEffect->GetEffect()->SetVector("vDirection", &vSpotDirection)))
{
// Fehler!
TB_ERROR_DIRECTX("g_pEffect->GetEffect()->SetVector", hResult, TB_ERROR);
}
// Den Effekt (Licht, Render-States..) setzen und speichern
int iNumPasses = g_pEffect->Begin(FALSE, TRUE);
for(int iPass = 0; iPass < iNumPasses; iPass++)
{
g_pEffect->Pass(iPass);
}
g_pEffect->End();
|
Ich glaube ich habe alles berücksichtigt oder etwa nicht?