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

1

31.07.2008, 03:01

VertexBuffer und IndexBuffer

ich hab heute versucht n bissel mit dem VB und IB zu spielen und nun ist mein Bild wieder schwarz :>

hab ich da was vergessen?

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
tbResult InitScene()
{ // ... snip

// Beleuchtung und Culling ausschalten, Dithering aktivieren

    D3D.SetRS(D3DRS_LIGHTING, FALSE);
    D3D.SetRS(D3DRS_ZENABLE, TRUE);
    D3D.SetRS(D3DRS_CULLMODE, D3DCULL_NONE);
    D3D.SetRS(D3DRS_DITHERENABLE, TRUE);
    D3D.SetRS(D3DRS_FILLMODE, D3DFILL_SOLID);

        // Vertex- und IndexBuffer erstellen 1 Cube

    int iNumVertices = g_iNumCubes * 8;
    
    // 

    g_pCubesVB = new tbVertexBuffer;
    if(g_pCubesVB->Init(iNumVertices * sizeof(SVertex),
                        sizeof(SVertex),
                        SVertex::dwFVF,
                        D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY,
                        D3DPOOL_DEFAULT))
    {
        return TB_ERROR;
    }

    // IndexBuffer erstellen


    int iNumIndices = g_iNumCubes * 6 * 6;
    
    g_pCubesIB = new tbIndexBuffer;
    if(g_pCubesIB->Init(iNumIndices * sizeof(WORD), sizeof(WORD),D3DFMT_INDEX16))
    {
        return TB_ERROR;
    }

        
    aVertex[0].vPosition=tbVector3(-1.0f,-1.0f,-1.0f);
    aVertex[0].Color = tbColor(0.0f, 0.0f, 1.0f);

    aVertex[1].vPosition=tbVector3(-1.0f, 1.0f,-1.0f);
    aVertex[1].Color = tbColor(0.0f, 1.0f, 0.0f);

    aVertex[2].vPosition=tbVector3( 1.0f, 1.0f,-1.0f);
    aVertex[2].Color = tbColor(1.0f, 0.0f, 0.0f);

    aVertex[3].vPosition=tbVector3( 1.0f,-1.0f,-1.0f);
    aVertex[3].Color = tbColor(1.0f, 0.0f, 0.0f);

// später Farben nachtragen

    aVertex[4].vPosition=tbVector3(-1.0f,-1.0f,1.0f);
    aVertex[5].vPosition=tbVector3(-1.0f,1.0f,1.0f);
    aVertex[6].vPosition=tbVector3( 1.0f, 1.0f, 1.0f);
    aVertex[7].vPosition=tbVector3( 1.0f,-1.0f, 1.0f);

    int aiIndex[36] = {
        0,1,2,    0,2,3,    // fronts side

        4,6,5,    4,7,6,    // back side

        4,5,1,    4,1,0,    // left side

        4,5,1,    4,1,0,    // right side

        3,2,6,    3,6,7,
        4,0,3,    4,3,7
        
    };
    for(int i=0;i<36;i++)
    {
        WORD wIndex;
        wIndex = aiIndex[i];    g_pCubesIB->AddIndex(&wIndex);
    }


 // ... snip

}


nujo und die Renderfunktion

C-/C++-Quelltext

1
2
3
4
5
6
7
8
// ... snip


    D3D->SetStreamSource(0, g_pCubesVB->GetVB(), 0,sizeof(SVertex));
    D3D->SetIndices(g_pCubesIB->GetIB());
    D3D.SetFVF(SVertex::dwFVF);

    // Zeichnen

    D3D->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0,0, 8, 0, 12);



die Matritzen habe ich erstmal der Übersichtlichkeit weggelassen.
[/cpp]

2

31.07.2008, 07:41

Zitat von »"Keydo"«

hab ich da was vergessen?

nur unwesentlich ;)
und zwar: deinen Vertex- und Indexbuffer an der richtigen Stelle zu füllen.
Dies erledigst du für gewöhnlich innerhalb des Lock/Unlock-Paares.
Dort schreibst du die Daten z.B. direkt via Indezes oder via MemCopy

3

31.07.2008, 10:15

Hi,

du musst 1. die Vertices zum Vertexbuffer hinzufügen und 2. die Update Funktion für Vertex und Indexbuffer aufrufen.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

4

31.07.2008, 11:47

Axo das Sperren, richtig.


So wie ich es gesehen habe übernimmt die Update-Funktion das sperren des jeweiligen Buffers. *fein* :>

Wie füge ich die Vertices dem Vertexbuffer hinzu?

*grübel*

bin kurz mittag machen :>

5

31.07.2008, 12:42

Genau so wie du es bei den Indices gemacht hast nur mit SetVertex oder SetVertices. Wie du willst^^.
Ich gebe bei der Arbeit immer 100%

6% Montags
30% Dienstags
35% Mittwochs
25% Donnerstag
4% Freitag

Werbeanzeige