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