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
|
tbResult Floor::Draw()
{
HRESULT hResult;
tbMatrix mWorld;
D3DMATERIAL9 Material;
D3DLIGHT9 Light;
if (m_pD3DDevice == NULL)
return TB_ERROR;
// Nun werden die Würfel gezeichnet.Zuerst wird ein Material erstellt, danach
// noch ein Richtungslicht, das die Richtung der Kamera hat.
Material.Diffuse = tbColor(0.75f, 0.75f, 0.75f);
Material.Ambient = tbColor(0.25f, 0.25f, 0.25f);
Material.Emissive = tbColor(0.0f, 0.0f, 0.0f);
m_pD3DDevice->SetMaterial(&Material);
ZeroMemory(&Light, sizeof(D3DLIGHT9));
Light.Type = D3DLIGHT_DIRECTIONAL;
Light.Diffuse = tbColor(1.0f, 1.0f, 1.0f);
Light.Ambient = tbColor(1.0f, 1.0f, 1.0f);
Light.Direction = tbVector3(1.0f, 1.0f, 1.0f);
m_pD3DDevice->SetLight(0, &Light);
m_pD3DDevice->LightEnable(0, TRUE);
// In die erste Texturschicht setzen wir die Umgebungstextur.
m_pD3DDevice->SetTexture(0, m_pTexture);
m_pD3DDevice->SetTexture(1, NULL);
m_pD3DDevice->SetTexture(2, NULL);
m_pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
m_pD3DDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDevice->SetTextureStageState(2, D3DTSS_COLOROP, D3DTOP_DISABLE);
m_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
m_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
m_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
m_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
m_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
m_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSW, D3DTADDRESS_WRAP);
m_FloorSquare.aVerticies[0].vPosition = tbVector3(-100.0f, -1.0f, -100.0f);
m_FloorSquare.aVerticies[1].vPosition = tbVector3(-100.0f, -1.0f, 100.0f);
m_FloorSquare.aVerticies[2].vPosition = tbVector3(100.0f, -1.0f, -100.0f);
m_FloorSquare.aVerticies[3].vPosition = tbVector3(100.0f, -1.0f, 100.0f);
m_FloorSquare.aVerticies[0].vTexture = tbVector2(0.0f, 100.0f);
m_FloorSquare.aVerticies[1].vTexture = tbVector2(0.0f, 0.0f);
m_FloorSquare.aVerticies[2].vTexture = tbVector2(100.0f, 100.0f);
m_FloorSquare.aVerticies[3].vTexture = tbVector2(100.0f, 0.0f);
// Nun erstellen wir eine Translationsmatrix, die dafür sorgt, dass sich die Kamera immer
// genau in der Mitte des Bodens befindet.
//mWorld = tbMatrixTranslation(g_vCameraPosition);
//g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
m_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)&tbMatrixIdentity());
// Nun die Dreiecke zeichnen
if (FAILED(hResult = m_pD3DDevice->DrawPrimitiveUP(
D3DPT_TRIANGLESTRIP, // Dreiecksliste
2, // 2 Dreieck
m_FloorSquare.aVerticies, // Vertexdaten
sizeof(SVertex)))) // Vertexgröße
{
// Fehler beim Zeichnen!
TB_ERROR_DIRECTX("D3D->DrawPrimitiveUP", hResult, TB_STOP);
}
return TB_OK;
}
|