DirectX9: 2 Dreiecke zeichnen



  • Hallo!

    ich bin gerade dabei, mich in DirectX einzuarbeiten.

    Ein Dreieck habe ich auch schon auf den Bildschirm zaubern können.

    Jetzt möchte ich ein Viereck zeichnen, was aus zwei Dreiecken besteht. Leider zeigt das Programm nix mehr an, wenn ich den folgenden Code poste:

    CUSTOMVERTEX OurTriangleVertices[] = 
     {
      {  0.0f, 0.0f,   1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {100.0f, 0.0f,   1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {  0.0f, 100.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)}
     };
    
     CUSTOMVERTEX OurTriangleVertices2[] = 
     {
      {100.0f, 100.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {100.0f, 0.0f,   1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {  0.0f, 100.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)}
     };
    
     // Create Vertex-Buffer that saves all data about our triangle
     LPDIRECT3DVERTEXBUFFER9 v_buffer;
      MDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),
    			      0,CUSTOMFVF,D3DPOOL_MANAGED,
    			      &v_buffer ,0);
    
    // lock our buffer
    VOID* pVoid;
    v_buffer->Lock(0, 0, (void**)&pVoid, 0);
    
    // copy vertices in vertex buffer
    memcpy(pVoid, OurTriangleVertices , sizeof(OurTriangleVertices));
    memcpy(pVoid, OurTriangleVertices2, sizeof(OurTriangleVertices2));		
    // beide dreiecke sind nun im vertex buffer
    
    // tell DirectX: we're done, don't do anything further ; unlock the buffer
    v_buffer->Unlock();
    
    MDevice->BeginScene();
    
    // tell DirectX that we're working with CUSTOMFVF-Format
    MDevice->SetFVF(CUSTOMFVF);
    
    // we're drawing from v_buffer
    MDevice->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));
    
    // copy vertex buffer to backbuffer
    MDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
    
    MDevice->EndScene();
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
    MDevice->Present(0, 0, 0, 0);
    ValidateRect(hwnd, NULL);
    

    Weiß jemand, woran es liegt ?

    Danke im Voraus und Freundliche Grüße



  • ..is lange her, aber versuchs mal so:

    CUSTOMVERTEX OurTriangleVertices[] =
     {
      {  0.0f, 0.0f,   1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {100.0f, 0.0f,   1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {  0.0f, 100.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {100.0f, 100.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {100.0f, 0.0f,   1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {  0.0f, 100.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)}
     }; 
     MDevice->CreateVertexBuffer(6*sizeof(CUSTOMVERTEX),
                      0,CUSTOMFVF,D3DPOOL_MANAGED,
                      &v_buffer ,0);
    // lock our buffer
    VOID* pVoid;
    v_buffer->Lock(0, 0, (void**)&pVoid, 0);
    
    // copy vertices in vertex buffer
    memcpy(pVoid, OurTriangleVertices , sizeof(OurTriangleVertices));   
    // beide dreiecke sind nun im vertex buffer
    

    ..ohne Garantie und so 😉



  • Hallo iop,

    Danke für deine Antwort. Darauf, dass man die 6 Punkte einfach in der gleichen Liste speichert, bin ich gar nicht gekommen.. 🙂

    Leider bringt das vorgeschlagene Programm noch nicht den gewünschten Erfolg, es wird nach wie vor nur 1 Dreieck angezeigt.

    Gibt es noch Alternativen ?

    Danke im Voraus und Freundliche Grüße

    Monadic512



  • CUSTOMVERTEX vertices[] =
        {
      {  0.0f, 0.0f,   1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {100.0f, 0.0f,   1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {  0.0f, 100.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0)},
      {100.0f, 100.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 0, 255)},
      {  0.0f, 100.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 0, 255)},
      {100.0f, 0.0f,   1.0f, 1.0f, D3DCOLOR_XRGB(0, 0, 255)},
        };
    

    ..die reihenfolge.

    spass haben 😉


Log in to reply