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

Anonymous

unregistriert

1

12.07.2003, 13:28

Problem mit RHW

Hallo,
ich versuche z.Zt verzweifelt ein rhw Dreieck auf den Bildschirm zu bekommen. Ich bin mir ziemlich sicher, dass ich alles richtig gemacht hab, trotzdem bekomme ich einfach nichts zu sehen :crying:

Hier wird der Vertex- bzw. Indexbuffer erstellt:

Quellcode

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
    void* pVertices = NULL;
    WORD* pIndices  = NULL;
    WORD i[6] = { 0, 1, 2, 2, 3, 0 };

    VERTEX v[] =
    {
        { 50.0f,  50.0f, 0.0f, 1.0f, 0xffff0000 }, // x, y, z, rhw, farbe
        { 250.0f, 250.0f, 0.0f, 1.0f, 0xff00ff00 },
        {  50.0f, 250.0f, 0.0f, 1.0f, 0xff00ffff }
    };


    
    if( FAILED (g_pDevice->CreateVertexBuffer(
        3 * sizeof(VERTEX), 0, 0,
        D3DPOOL_DEFAULT,
        &m_VBGrid, NULL)))
    {
        g_Basics->leLog2File("Create Vertex Buffer() failed", 1);
        return FALSE;
    }


    if( FAILED (m_VBGrid->Lock(0, sizeof(v), (void**)&pVertices, 0)))
    {
        g_Basics->leLog2File("Lock VertexBuffer failed", 1);
        return FALSE;
    }

    memcpy(pVertices, v, sizeof(v));
    m_VBGrid->Unlock();

////////////INDEX BUFFER/////////////////////////

    if( FAILED (g_pDevice->CreateIndexBuffer(
        sizeof(i), 0,
        D3DFMT_INDEX16,
        D3DPOOL_DEFAULT,
        &m_IBGrid, NULL)))
    {
        g_Basics->leLog2File("CreateIndexBuffer() failed", 1);
        return FALSE;
    }

    if( FAILED (m_IBGrid->Lock(0, sizeof(i), (void**)&pIndices, 0)))
    {
        g_Basics->leLog2File("Lock IndexBuffer failed", 1);
        return FALSE;
    }


    memcpy(pIndices, i, sizeof(i));
    m_IBGrid->Unlock();


    return TRUE;



Die Struktur:

Quellcode

1
2
3
4
5
6
7
struct VERTEX
{
    float   x, y, z, rhw;
    DWORD   color;
};

#define D3DFVF_VERTEX ( D3DFVF_XYZRHW | D3DFVF_DIFFUSE )




ok, und jetzt die Renderfunktion:

Quellcode

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
    g_pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
    g_pDevice->Clear(0, NULL,
        D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
        D3DCOLOR_XRGB(0, 0, 0),
        1.0f, 0);

    g_pDevice->SetFVF (D3DFVF_VERTEX );

    g_pDevice->BeginScene();
        g_pDevice->SetIndices (m_IBGrid);
        g_pDevice->SetStreamSource (0, m_VBGrid,0, sizeof(D3DFVF_VERTEX));
        
        if( FAILED (g_pDevice->DrawIndexedPrimitive(
                        D3DPT_TRIANGLELIST,
                        0,
                        0,
                        2,
                        0,
                        1) ))
        {
            g_Basics->leLog2File("DrawPrimitive() failed", 1);
        }
        
    g_pDevice->EndScene();


    if( FAILED (g_pDevice->Present(NULL, NULL, NULL, NULL)))
    {
        g_Basics->leLog2File("Present() failed", 1);
        return FALSE;
    }

    return TRUE;



ich suche jetzt schon seit Tagen und vergleiche meinen Code immer mit anderen, doch ich finde keinen Fehler


Wäre echt nett, wenn jemand mir sagen könnte, woran das liegt, das nichts gerendert wird.

Bye

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

12.07.2003, 13:42

Hi!

Du gibst beim Erstellen des Vertex-Buffers das Vertexformat nicht an (Du gibst 0 an!). Das könnte der Fehler sein. Vertex-Buffer ohne spezielles Vertexformat werden nämlich anders behandelt.

Anonymous

unregistriert

3

12.07.2003, 13:44

Hi,
jetzt hab ich es so gemacht :

Quellcode

1
2
3
4
    if( FAILED (g_pDevice->CreateVertexBuffer(
        3 * sizeof(VERTEX), 0, D3DFVF_VERTEX,
        D3DPOOL_DEFAULT,
        &m_VBGrid, NULL)))


und es geht trotzdem nichts :(

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

12.07.2003, 14:05

Und alle Funktionsaufrufe funktionieren? Wird also nichts ins Logbuch geschrieben?
Mir fällt außerdem auf, dass Du im Index-Array vier verschiedene Vertizes ansprichst (0, 1, 2 und 3), aber es sind nur drei definiert.
Ich würde Dir raten, bei so einem kleinen Objekt wie einem Rechteck keinen Vertex- und Index-Buffer zu verwenden, sondern das Ding direkt mit DrawPrimitiveUP zu rendern. Verwende Triangle-Strips, dann reichen auch vier Vertizes, anstatt 6.

Anonymous

unregistriert

5

12.07.2003, 14:17

klar lohnt sich das nicht für ein einfaches Dreieck. Das war ja auch nur ne kleine übung für was größeres.

Aber mich ärgert das einfach, dass es nciht geht.
Die Indizes sind jetzt so: WORD i[3] = { 0, 1, 2};
ich hab auch zum Testen mal D3DRS_CULLMODE auf D3DCULL_NONE gestzellt, doch es ist trotzdem immer noch nichts zu sehen

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

12.07.2003, 14:19

Und keine Ausgabe in der Logbuchdatei?

Anonymous

unregistriert

7

12.07.2003, 14:23

nein - nichts :help:

Anonymous

unregistriert

8

12.07.2003, 19:09

weiß echt niemand mehr was ??? :crying:

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

12.07.2003, 20:53

Du gibst einmal für den Parameter "NumVertices" (von DrawIndexedPrimitive) 2 an. Es sind aber 3 Vertizes. Also 3 angeben. Außerdem willst Du ja wahrscheinlich 2 Dreiecke zeichnen. Als Parameter "PrimitiveCount" gibst Du aber nur 1 an.

Anonymous

unregistriert

10

12.07.2003, 21:03

wie soll er denn mit drei vertices und 3 indices 2 dreiecke zeichnen?
das muss schon auf 1 bleiben.

Werbeanzeige