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

David Mehre

unregistriert

1

04.08.2009, 11:55

Farbige Linien

Hallo,
ich habe eine Funktion geschrieben, die mir die Linien des Umgebungsqaders eines Modells zeichnen soll. Das funktioniert auch soweit, nur werden die Linien immer Schwarz dargestellt, obwohl ich eine diffuse Farbe eingetragen habe.

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
84
85
86
87
88
89
90
91
// ------------------------------------------------------------------------
// Struktur für einen Box-Vertex
struct SBoxVertex
{
    tbVector3   vPosition;  // Position des Vertex
    DWORD       dwColor;    // Farbe des Vertex
};
#define SBoxVertexFVF   D3DFVF_XYZ | D3DFVF_DIFFUSE

// ------------------------------------------------------------------------
// RenderBox
// Zeichnet den Umgebungsquader eines Modells
tbResult    CGame::RenderBox            (tbModel* pModel,
                                         tbMatrix mWorld,
                                         DWORD    dwColor)
{
    tbDirect3D& D3D = tbDirect3D::Instance();
    HRESULT     hResult;
    // Koordinaten des Würfels
    tbVector3   vA, vB, vC, vD, vE, vF, vG, vH;
    // Vertices
    SBoxVertex  aVertex[8];

    // Die Koordinaten A und F sind gegeben
    vA = pModel->GetBoundingBoxMin();
    vF = pModel->GetBoundingBoxMax();

    // Alle weiteren Koordinaten berechnen
    vB.x = vF.x;    vB.y = vA.y;    vB.z = vA.z;
    vC.x = vF.x;    vC.y = vF.y;    vC.z = vA.z;
    vD.x = vA.x;    vD.y = vF.y;    vD.z = vA.z;
    vE.x = vA.x;    vE.y = vF.y;    vE.z = vF.z;
    vG.x = vF.x;    vG.y = vA.y;    vG.z = vF.z;
    vH.x = vA.x;    vH.y = vA.y;    vH.z = vF.z;

    // Positionen in die Vertices eintragen.
    aVertex[0].vPosition = vA;
    aVertex[1].vPosition = vB;
    aVertex[2].vPosition = vC;
    aVertex[3].vPosition = vD;
    aVertex[4].vPosition = vE;
    aVertex[5].vPosition = vF;
    aVertex[6].vPosition = vG;
    aVertex[7].vPosition = vH;
    // Farben eintragen
    for (int iVertex = 0; iVertex < 8; iVertex++) aVertex[iVertex].dwColor = dwColor;

    // Indizes eintragen
    unsigned short ausIndex[24] =   { 0, 1,     1, 2,
                                      2, 3,     3, 0,
                                      0, 7,     1, 6,
                                      2, 5,     3, 4,
                                      4, 5,     5, 6,
                                      6, 7,     7, 4 };

    // Matrix einsetzen
    D3D.SetTransform(D3DTS_WORLD, mWorld);
    // Vertex-Format setzen
    D3D.SetFVF(SBoxVertexFVF);
    // Vertex- und Indexbuffer resetten.
    D3D->SetStreamSource(0, NULL, 0, 0);
    D3D->SetIndices(NULL);
    // Nun die Linien zeichnen!
    if(FAILED(hResult = D3D->DrawIndexedPrimitiveUP(D3DPT_LINELIST,         // Linien
                                                    0,                      // Beginn bei 0
                                                    8,                      // Größter Index
                                                    12,                     // Anz. Linien
                                                    ausIndex,               // Indizes
                                                    D3DFMT_INDEX16,         // 16 Bits
                                                    aVertex,                // Vertizes
                                                    sizeof(SBoxVertex))))   // Vertexgröße
    {
        // Fehler beim Zeichnen!
        TB_ERROR_DIRECTX("D3D->DrawIndexedPrimitiveUP", hResult, TB_ERROR);
    }

    return TB_OK;
}

// ------------------------------------------------------------------------
// Render
tbResult    CGame::Render                       (float fTime)
{
    // ...
    
    RenderBox(m_pCubeModel, mWorld, tbColor(0.0f, 1.0f, 0.0f));

    // ...

    return TB_OK;
}


Es kann doch nicht sein, dass Linien immer schwarz gezeichnet werden...
Weiß jemand, wo mein Fehler liegt?

Mfg.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »David Mehre« (17.10.2011, 18:03)


drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

04.08.2009, 12:04

Bist du sicher, dass du eine "richtige" Farbe übergibst?
Und bist du sicher, dass die sonstigen Einstellungen korrekt sind? - Ala Licht usw. ?

3

04.08.2009, 12:06

wird dwColor auch noch irgendwo definiert?

C-/C++-Quelltext

1
for (int iVertex = 0; iVertex < 8; iVertex++) aVertex[iVertex].dwColor = dwColor;


ich vermute mal das dwColor einfach nicht definiert ist und daher 0 (= schwarz).



edit: warum kann man seine beiträge nicht löschen? habs auch gesehen...

David Mehre

unregistriert

4

04.08.2009, 12:43

Zitat von »"drakon"«

Bist du sicher, dass du eine "richtige" Farbe übergibst?
Und bist du sicher, dass die sonstigen Einstellungen korrekt sind? - Ala Licht usw. ?


Ja, es lag am Licht.
D3DRS_LIGHTING war aktiviert, ich habe jetzt ein Material eingetragen und die Linien werden schön bunt angezeigt :)

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

Werbeanzeige