Mit dieser Methode will ich transformierte Vertizes mit einer Standardtextur rendern:
|
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
vHudBoost[0].vPosition.x = 0.5f * tbDirect3D::GetScreenSize().x;
vHudBoost[0].vPosition.y = 0.5f * tbDirect3D::GetScreenSize().y;
vHudBoost[0].vPosition.z = 0.0f;
vHudBoost[0].fRHW = 1.0f;
vHudBoost[0].Diffuse = tbColor(1.0f, 0.0f, 1.0f);
vHudBoost[0].vTexture.x = 0;
vHudBoost[0].vTexture.y = 0;
vHudBoost[1].vPosition.x = 0.6f * tbDirect3D::GetScreenSize().x;
vHudBoost[1].vPosition.y = 0.5f * tbDirect3D::GetScreenSize().y;
vHudBoost[1].vPosition.z = 0.0f;
vHudBoost[1].fRHW = 1.0f;
vHudBoost[1].Diffuse = tbColor(1.0f, 0.0f, 1.0f);
vHudBoost[1].vTexture.x = 1;
vHudBoost[1].vTexture.y = 0;
vHudBoost[2].vPosition.x = 0.5f * tbDirect3D::GetScreenSize().x;
vHudBoost[2].vPosition.y = 0.9f * tbDirect3D::GetScreenSize().y;
vHudBoost[2].vPosition.z = 0.0f;
vHudBoost[2].fRHW = 1.0f;
vHudBoost[2].Diffuse = tbColor(1.0f, 1.0f, 1.0f);
vHudBoost[2].vTexture.x = 0;
vHudBoost[2].vTexture.y = 1;
vHudBoost[3].vPosition.x = 0.6f * tbDirect3D::GetScreenSize().x;
vHudBoost[3].vPosition.y = 0.9f * tbDirect3D::GetScreenSize().y;
vHudBoost[3].vPosition.z = 0.0f;
vHudBoost[3].fRHW = 1.0f;
vHudBoost[3].Diffuse = tbColor(0.2f, 0.0f, 0.3f);
vHudBoost[3].vTexture.x = 1;
vHudBoost[3].vTexture.y = 1;
pHudVB->SetVertices(0, 4, vHudBoost);
if(pHudVB->Update()) return TB_ERROR;
tbDirect3D::GetDevice()->SetTexture(0, HudTexture);
// Vertex- und Index-Buffer aktivieren und das Vertexformat setzen
tbDirect3D::GetDevice()->SetStreamSource(0, pHudVB->GetVB(), 0, sizeof(BotHudVertex));
tbDirect3D::GetDevice()->SetIndices(pHudIB->GetIB());
tbDirect3D::SetFVF(BOT_HUD_FVF);
// Zeichnen!
int iNumPasses = pBotHudEffect->Begin();
for(int iPass = 0; iPass < iNumPasses; iPass++)
{
pBotHudEffect->Pass(iPass);
tbDirect3D::GetDevice()->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4, 0, 2);
}
pBotHudEffect->End();
tbDirect3D::Capture();
|
aber es wird an der stelle nur ein schwarzes rechteck angezeigt, also ohne Textur.
Meine Vertizes sind so definiert:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
#define BOT_HUD_FVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
struct BotHudVertex
{
tbVector3 vPosition; // Positionsangabe
float fRHW; // 1/w
D3DCOLOR Diffuse; // Streufarbe
tbVector2 vTexture; // Texturkoordinaten
};
|
Weiß einer worans liegt? Wenn ich das tbDirect3D::Capture() nach dem Rendern weglasse, dann wird die Textur auf meine SkyBox gelegt, die in einer anderen Funktion gerendert wird. Das finde ich ziemlich merkwüdig, weil es den Anschein hat, als würde meine Renderfunktion gar nicht registriert werden (sie wird aber ausgeführt, schließlich wird die Textur ja auch gesetzt)