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
|
tbResult CGame::Render(float fTime)
{
tbMatrix mCamera;
tbMatrix mProjection;
tbVector3 vCameraPos;
tbVector3 vCameraLookAt;
DWORD dwNumVectors;
D3DLIGHT9 CamLight;
PDIRECT3DVERTEXBUFFER9 pVertexBuffer = NULL;
PDIRECT3DINDEXBUFFER9 pIndexBuffer = NULL;
SVertex* pVertices;
unsigned short* pusIndices;
PDIRECT3DTEXTURE9 pTexture = NULL;
// Puffer leeren und Szene beginnen
tbDirect3D& D3D = tbDirect3D::Instance();
D3D->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, tbColor(0.0f, 0.0f, 0.0f), 1.0f, 0);
D3D->BeginScene();
//Kamera
vCameraPos = tbVector3(0.0f, 2.0f, -1.0f);
vCameraLookAt = tbVector3(0.0f, 0.0f, 0.0f);
mCamera = tbMatrixCamera(vCameraPos, vCameraLookAt);
D3D.SetTransform(D3DTS_VIEW, mCamera);
// Projektionsmatrix erstellen und aktivieren
mProjection = tbMatrixProjection(TB_DEG_TO_RAD(70.0f), D3D.GetAspect(), 0.1f, 50.0f);
D3D.SetTransform(D3DTS_PROJECTION, mProjection);
// Richtungslicht mit der Richtung der Kamera erstellen und aktivieren
ZeroMemory(&CamLight, sizeof(D3DLIGHT9));
CamLight.Type = D3DLIGHT_DIRECTIONAL;
CamLight.Diffuse = tbColor(1.0f, 1.0f, 1.0f);
CamLight.Specular = tbColor(1.0f, 1.0f, 1.0f);
CamLight.Direction = vCameraLookAt - vCameraPos;
D3D->SetLight(0, &CamLight);
D3D->LightEnable(0, TRUE);
D3D.SetTransform(D3DTS_WORLD, tbMatrixIdentity());
//Vertexbuffer
D3D->CreateVertexBuffer(4 * sizeof(SVertex),
0,
SVertex::dwFVF,
D3DPOOL_MANAGED,
&pVertexBuffer,
NULL);
//Indexbuffer
D3D->CreateIndexBuffer(6,
0,
D3DFMT_INDEX16,
D3DPOOL_MANAGED,
&pIndexBuffer,
NULL);
pVertexBuffer->Lock(0, 0, (void**)(&pVertices), D3DLOCK_NOSYSLOCK);
pIndexBuffer->Lock(0, 0, (void**)(&pusIndices), D3DLOCK_NOSYSLOCK);
pVertices[0].vPosition = tbVector3(1.0f, 0.0f, 1.0f);
pVertices[1].vPosition = tbVector3(3.0f, 0.0f, 1.0f);
pVertices[2].vPosition = tbVector3(3.0f, 0.0f, 3.0f);
pVertices[3].vPosition = tbVector3(1.0f, 0.0f, 3.0f);
pVertices[0].vTexture = tbVector2(0.0f, 1.0f);
pVertices[1].vTexture = tbVector2(1.0f, 0.0f);
pVertices[2].vTexture = tbVector2(1.0f, 1.0f);
pVertices[3].vTexture = tbVector2(0.0f, 1.0f);
for(int iVertex = 0; iVertex < 4; iVertex++)
{
pVertices[iVertex].dwColor = tbColor(1.0f, 0.5f ,1.0f ,1.0f);
}
int aiIndex[6] = {0, 2, 3, 0, 1, 2};
for(int iIndex = 0; iIndex < 6; iIndex++)
{
// Index eintragen
pusIndices[iIndex] = aiIndex[iIndex];
}
pVertexBuffer->Unlock();
pIndexBuffer->Unlock();
D3D->SetRenderState(D3DRS_LIGHTING, TRUE);
D3D->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
D3D->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
D3D->SetRenderState(D3DRS_ZENABLE, TRUE);
D3DMATERIAL9 Material;
Material.Diffuse = tbColor(1.0f, 0.5f, 0.7f);
Material.Ambient = tbColor(0.5f, 0.7f, 1.0f);
Material.Specular = tbColor(0.7f, 0.7f, 0.7f);
Material.Emissive = tbColor(1.0f, 0.7f, 1.0f);
Material.Power = 10.0f;
D3D->SetMaterial(&Material);
// Die Textur laden
pTexture = tbTextureManager::Instance().GetTexture("Texture.bmp");
// Und nun die Textur einsetzen
D3D->SetTexture(0, pTexture);
D3D->SetStreamSource(0, pVertexBuffer, 0, sizeof(SVertex));
D3D->SetIndices(pIndexBuffer);
D3D->SetFVF(SVertex::dwFVF);
if (FAILED(D3D->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,
0,
0,
4,
0,
2)))
MessageBox(NULL, "Fehler!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
D3D->EndScene();
return TB_OK;
}
|