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

07.12.2003, 14:23

Verschiedene Vertexbuffer und Texturen

So ich habe mir jetzt eine "Map" gebastelt.. aus Tiles.. ein Tile besteht immer aus 2 Dreiecken... darüber hab ich ne Grastextur gelegt... klappt auch alles wunderbar.. nur will ich jetzt sozusagen eine Spielfigur dazu.

also dachte ich mir nur so zum test mach ich nen zweiten Vertexbuffer wo ich auch nur 2 Dreiecke drinn speicher was dann die Spielfigur sein soll, jetzt hab ich es aber nicht hinbekommen, das alles zu rendern

habe erst meinen ersten VertexBuffer als Stream angegeben.. dazu natürlich auch den passenden Indexbuffer dann gerendert und dahinter wollte ich nochmal rendern nur eben mit meinem zweiten Vertexbuffer und Indexbuffer.. und natürlich anderer Textur.. aber das ganze läuft gar nicht stürzt sofort ab.. keine ahnung wie man das machen muss ???

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

07.12.2003, 14:27

Ohne Quellcode kann man sicher nicht helfen.
Außerdem halte ich persönlich es für Unsinn, für zwei Dreiecke einen Vertex-Buffer zu erzeugen. Da geht auch genausogut DrawPrimitiveUP...

3

07.12.2003, 15:00

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
void CMap::render (HWND p_hwnd)
{
    D3D_lpDevice->BeginScene();
    D3D_lpDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,255),1.0f,0l);
    
    D3DXMatrixTranslation(&m_matTrans, -80.0f,-5.0f,-40.0f);
    D3D_lpDevice->SetTransform(D3DTS_WORLD, &m_matTrans);

    D3DXMatrixLookAtLH( &m_matViewAt, &D3DXVECTOR3( 0.0f, 5.0f, -50.0f),
                              &D3DXVECTOR3( 0.0f, 0.0f, 0.0f ),
                       &D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );
    D3D_lpDevice->SetTransform(D3DTS_VIEW, &m_matViewAt );
    
    D3DXMatrixPerspectiveFovLH( &m_matProject, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
    D3D_lpDevice->SetTransform( D3DTS_PROJECTION, &m_matProject );

    D3D_lpDevice->SetStreamSource(0, m_VertexBuffer, 0, sizeof(SVertex));


    D3D_lpDevice->SetIndices(m_IndexBuffer);
    

    D3D_lpDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, m_iAnzVertices,0,m_iAnzTiles * 2);


    D3D_lpDevice->SetStreamSource(1 , m_vertexBuffer2, 0, sizeof(SVertex));
    D3D_lpDevice->SetIndices(m_indexBuffer2);
    
    D3D_lpDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 4,0, 2);
    D3D_lpDevice->EndScene();
    D3D_lpDevice->Present(NULL, &m_Rect, p_hwnd, NULL);
}



ja kla is das quatsch für 2 dreiecke nen vertexbuffer, aber später isses ja vielleicht ne richtige 3d figur .. dann würds ja vielleicht sinn machen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

07.12.2003, 15:20

Quellcode

1
D3D_lpDevice->SetStreamSource(1

Da liegt der Fehler. Warum übergibst Du auf einmal 1, und nicht mehr 0?

5

07.12.2003, 15:46

oops.. dachte man müsste irgendwie.. naja danke :)

6

07.12.2003, 17:20

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   SVertex  m_Figure[3];

   SVertex*     xVertices;
   unsigned short* xIndices;

   m_Figure[0] = SVertex( -1.0f, 3.0f, 0.0f);
    m_Figure[1] = SVertex( -1.0f, 4.0f, 0.0f);
    m_Figure[2] = SVertex(  0.0f, 3.0f, 0.0f);

   m_VertexBuffer2->Lock(0,0,(void**)(&xVertices),D3DLOCK_NOSYSLOCK);
        for(int tmp2 = 0; tmp2 < 3; tmp++)
        {
            xVertices[tmp2] = m_Figure[tmp2];
        }
    m_VertexBuffer2->Unlock();


wieso können diese par zeilen bewirken, dass mein programm gar nicht erst startet?... wenn ich sie auskommentiere dann läuft es... die variablen werden auch nur hier verwandt.. also eigentlich nur der Buffer gefüllt ohne íhn dann weiter zu verwenden.. aber dabei schmiert mein Programm ab.. ich hab keinen blassen schimmer wieso....

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

07.12.2003, 18:06

1. Wurde der Vertex-Buffer erfolgreich erstellt?
2. Schlägt das Sperren fehl? (Du solltest die Rückgabewerte niemals ignorieren!)
3. Ist der Vertex-Buffer groß genug?

8

07.12.2003, 19:50

Wie immer steckt der Teufel im Detail.. selbst schuld bei meiner dämlichen variablen benennung..

Zitat



for(int tmp2 = 0; tmp2 < 3; tmp++)


na wenn da nicht eine 2 beim tmp++ fehlt...

aber danke für deine Hilfe und ja stimmt schon sollte auch mal rückgabewerte prüfen! :wirbel:

Werbeanzeige