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

20.11.2006, 21:07

Indizierter Würfel mit Textur

Hallo,

ich hab grade mal versucht meinen Würfel mit einer Texture zu überziehn und diese auf allen seiten darzustellen. Hat leider nicht so funktioniert wie ich mir das dachte.

Da der Würfel indiziert ist, nutze ich 8 vertizes, ich kann jetzt 2 flächen die texture sauber verpassen, aber die restlichen 4 flächen des würfels bleiben leer.

wie krieg ich den die texture auch auf die andere 4 flächen des würfels? wenn der texture die koordinaten für eine andere texture geben, "zerschieße" ich mir die koordinaten ja für eine andere seite.

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
71
72
73
74
75
76
77
78
79
80
81
82
83
g_pD3DDevice->CreateVertexBuffer(8 * sizeof(Vertex), 0, D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX2,
                                    D3DPOOL_DEFAULT, &g_pVertBuff, NULL);

    g_pD3DDevice->CreateIndexBuffer(36 * sizeof(int), 0, D3DFMT_INDEX16, D3DPOOL_MANAGED, &g_pIndexBuff, NULL);

    Vertex* pVertices;
    WORD*    pIndices;

    g_pVertBuff->Lock(0, 0, (void**) (&pVertices), D3DLOCK_NOSYSLOCK);
    g_pIndexBuff->Lock(0, 0, (void**) (&pIndices), D3DLOCK_NOSYSLOCK);

    D3DVECTOR vTemp;
    vTemp.x = -1.0f;
    vTemp.y = 1.0f;
    vTemp.z = -1.0f;
    pVertices[0].vPosition = vTemp;
    pVertices[0].vNormal = NormalizeVector(vTemp);
    pVertices[0].u = 0.0f;
    pVertices[0].v = 0.0f;
    vTemp.x = -1.0f;
    vTemp.y = 1.0f;
    vTemp.z = 1.0f;
    pVertices[1].vPosition = vTemp;
    pVertices[1].vNormal = NormalizeVector(vTemp);
    pVertices[1].u = 1.0f;
    pVertices[1].v = 0.0f;
    vTemp.x = 1.0f;
    vTemp.y = 1.0f;
    vTemp.z = 1.0f;
    pVertices[2].vPosition = vTemp;
    pVertices[2].vNormal = NormalizeVector(vTemp);
    pVertices[2].u = 0.0f;
    pVertices[2].v = 0.0f;
    vTemp.x = 1.0f;
    vTemp.y = 1.0f;
    vTemp.z = -1.0f;
    pVertices[3].vPosition = vTemp;
    pVertices[3].vNormal = NormalizeVector(vTemp);
    pVertices[3].u = 1.0f;
    pVertices[3].v = 0.0f;
    vTemp.x = -1.0f;
    vTemp.y = -1.0f;
    vTemp.z = -1.0f;
    pVertices[4].vPosition = vTemp;
    pVertices[4].vNormal = NormalizeVector(vTemp);
    pVertices[4].u = 0.0f;
    pVertices[4].v = 1.0f;
    vTemp.x = -1.0f;
    vTemp.y = -1.0f;
    vTemp.z = 1.0f;
    pVertices[5].vPosition = vTemp;
    pVertices[5].vNormal = NormalizeVector(vTemp);
    pVertices[5].u = 1.0f;
    pVertices[5].v = 1.0f;
    vTemp.x = 1.0f;
    vTemp.y = -1.0f;
    vTemp.z = 1.0f;
    pVertices[6].vPosition = vTemp;
    pVertices[6].vNormal = NormalizeVector(vTemp);
    pVertices[6].u = 0.0f;
    pVertices[6].v = 1.0f;
    vTemp.x = 1.0f;
    vTemp.y = -1.0f;
    vTemp.z = -1.0f;
    pVertices[7].vPosition = vTemp;
    pVertices[7].vNormal = NormalizeVector(vTemp);
    pVertices[7].u = 1.0f;
    pVertices[7].v = 1.0f;

    int aiIndex[36] = {0, 3, 7,   0, 7, 4,    // Vorderseite

                       2, 1, 5,   2, 5, 6,    // Hinterseite

                       1, 0, 4,   1, 4, 5,    // Linke Seite

                       3, 2, 6,   3, 6, 7,    // Rechte Seite

                       0, 1, 2,   0, 2, 3,    // Oberseite

                       6, 5, 4,   6, 4, 7};    // Unterseite


    for(int i = 0; i < 36; i++)
    {
        pIndices[i] = (WORD) aiIndex[i];
    }

    g_pVertBuff->Unlock();
    g_pIndexBuff->Unlock();

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

20.11.2006, 21:33

Das geht nicht (es sei denn du verwendest eine Cube-Map).
Ansonsten musst du halt mehrere Vertizes mit selber Position, aber verschiedenen Texturkoordinaten (und wohl auch Normalenvektoren) nehmen, das wären dann pro Fläche 4 Stück, also 24.