Ich erwecke den Thread nochmal zum Leben. Ich habe jetzt soweit alles Optimiert, und in die Map eingebaut. Folgenden Code:
|
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
|
if(m_iTotalPhongSpotLights > 0)
{
D3D.SetRS(D3DRS_ALPHABLENDENABLE,TRUE);
//standard blend factors
D3D.SetRS(D3DRS_SRCBLEND,D3DBLEND_ONE);
D3D.SetRS(D3DRS_DESTBLEND,D3DBLEND_ZERO);
for( int i = 0; i <= m_iTotalPhongSpotLights - 1; i++)
{
//m_PhongSpotLight[i].Pos =/* Vector3(-7, 15, -5);*/camera->GetCameraPos();
//m_PhongSpotLight[i].Dir = Vector3(0,-1,0);
m_PhongSpotLight[i].CameraPos = camera->GetCameraPos();
m_PhongSpotLight[i].World = mWorld;
m_PhongSpotLight[i].WorldInvTrans = MatrixInverseTranspose(mWorld);
m_PhongSpotLight[i].WorldViewProj = WorldViewProjectionMatrix( mWorld, camera->GetViewMatrix(), camera->GetProjectionMatrix() );
D3DMATERIAL9 mat = m_pWorld->GetMaterial();
m_PhongSpotLight[i].MaterialAmbient = mat.Ambient;
m_PhongSpotLight[i].MaterialDiffuse = mat.Diffuse;
m_PhongSpotLight[i].MaterialEmissive = mat.Emissive;
m_PhongSpotLight[i].MaterialSchiness = mat.Power;
m_PhongSpotLight[i].MaterialSpecular = mat.Specular;
SetEffectParamters(eff,m_PhongSpotLight[i]);
m_pWorld->Render(eff);
D3D.SetRS(D3DRS_SRCBLEND,D3DBLEND_ONE);
D3D.SetRS(D3DRS_DESTBLEND,D3DBLEND_ONE);
}
}
|
SetEffectParamters setzte einfach nur die Daten im Shader. So sollten ja eigentlich mehrere Lichter möglich sein. Banane! Wenn ich ein Licht angebe, leuchtet das 1. Wenn ich 2 angebe leuchtet nur das 2. und so weiter. Also immer nur das letzte. Irgendwas mus smal wieder mit de Blendeinstellungen falsch sein. Aber was? Oder mache ich es komplett falsch mehrere Lichter zu benutzen?
Danke