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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
// __________________________________________________________________
// Rendert den Spielzustand
tbResult CGame::Render(float fTime)
{
D3DLIGHT9 SunLight;
char acText[256];
CPlayer* pCurPlayer;
PDIRECT3DDEVICE9 pD3DDevice;
pD3DDevice = tbDirect3D::GetDevice();
for (int iPlayer = 0; iPlayer < 2; iPlayer++)
{
if(iPlayer == 0)
{
pD3DDevice->SetViewport(&m_pPlayer1->m_PlayerView);
pCurPlayer = m_pPlayer1;
}
if(iPlayer == 1)
{
pD3DDevice->SetViewport(&m_pPlayer2->m_PlayerView);
pCurPlayer = m_pPlayer2;
}
// Puffer leeren und Szene beginnen
tbDirect3D::Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
tbColor(0.0f), 1.0f, 0);
tbDirect3D::BeginScene();
// ------------------------------------------------------------------
// Kamera setzen
SetupCamera(pCurPlayer);
// ------------------------------------------------------------------
if(g_pbButtons[TB_KEY_SPACE])
{
m_pPSystem->AddParticle(tbFloatRandom(1.0f, 4.0f),
8.0f, 23.0f,
tbVector3(0.0f, 0.0f, 2500.0f),
tbVector3Random() * tbFloatRandom(0.5f, 2.0f),
1.0f,
50.0f, 1500.0f,
tbColor(1.0f, 0.25f, 0.25f, 0.25f),
tbColor(0.25f, 1.0f, 0.25f, 0.0f),
tbFloatRandom(0.0f, 2.0f), tbFloatRandom(0.0f, 2.0f));
}
// Sonnenrichtungslicht (von links) erstellen
ZeroMemory(&SunLight, sizeof(D3DLIGHT9));
SunLight.Type = D3DLIGHT_DIRECTIONAL;
SunLight.Diffuse = tbColor(1.0f, 0.75f, 0.5f);
SunLight.Ambient = tbColor(0.25f, 0.25f, 0.25f);
SunLight.Specular = tbColor(0.5f, 0.5f, 0.5f);
SunLight.Direction = tbVector3(1.0f, 0.0f, 0.0f);
tbDirect3D::SetLight(0, &SunLight);
tbDirect3D::LightEnable(0, TRUE);
// ------------------------------------------------------------------
if(m_pSkyBox != NULL)
{
// Sky-Box rendern
m_pSkyBox->Render(pCurPlayer->m_vCameraPos);
}
// Nebel einstellen (damit weit entfernte Objekte dunkler werden, bevor sie aus
// dem Sichtbereich geraten)
tbDirect3D::SetRS(D3DRS_FOGENABLE, TRUE);
tbDirect3D::SetRS(D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR);
tbDirect3D::SetRS(D3DRS_FOGCOLOR, tbColor(0.0f, 0.0f, 0.0f));
tbDirect3D::SetRSF(D3DRS_FOGSTART, 4000.0f);
tbDirect3D::SetRSF(D3DRS_FOGEND, 5000.0f);
// Fahrzeuge und Projektile rendern
RenderCars(fTime, pCurPlayer);
RenderProjectiles(fTime);
// Partikel und Sprites rendern
if(!m_bPaused)
{
m_pPSystem->AddToSpriteEngine(m_pSprites);
m_pSprites->End();
}
m_pSpritesEffect->Begin();
m_pSpritesEffect->Pass(0);
tbDirect3D::SetTransform(D3DTS_WORLD, tbMatrixIdentity());
m_pSprites->Render();
m_pSpritesEffect->End();
// Nebel wieder ausschalten
tbDirect3D::SetRS(D3DRS_FOGENABLE, FALSE);
// ------------------------------------------------------------------
if(m_pSkyBox != NULL)
{
// Blenden der Sonne rendern
RenderSunFlares(fTime, pCurPlayer);
}
// ------------------------------------------------------------------
g_pDepriKart->m_pFont1->Begin();
// Name des Kameramodus anzeigen
g_pDepriKart->m_pFont1->DrawText(tbVector2(10.0f, 10.0f), m_apcCameraMode[pCurPlayer->m_CameraMode]);
if(m_bPaused)
{
// "Pause"-Text anzeigen
g_pDepriKart->m_pFont1->DrawText(tbVector2(0.5f, 0.5f), "[ P A U S E ]",
TB_FF_ALIGN_HCENTER | TB_FF_ALIGN_VCENTER |
TB_FF_RELATIVE | TB_FF_RELATIVESCALING);
}
if(g_pbButtons[TB_KEY_F])
{
// Framerate anzeigen
sprintf(acText, "FPS: %.2f", 1.0f / fTime);
g_pDepriKart->m_pFont1->DrawText(tbVector2(10.0f, 30.0f), acText);
}
g_pDepriKart->m_pFont1->End();
// Szene beenden
tbDirect3D::EndScene();
}
return TB_OK;
}
|