Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

1

07.02.2005, 15:28

Textur wird nicht angezeigt

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)