![]() |
2D-Bild (array of byte's) mit Direct3D darstellen
Hallo Community,
ich suche jetzt schon seit Stunden überall im Netz ein Tutorial für das einfache Darstellen eines 2D-Bildes in Form eines array of array of Byte mithilfe von Direct3D. Dabei soll ein Byte eine Farbe/einen Pixel darstellen. DirectDraw soll veraltet sein, sodass ich mich für Direct3D entschieden habe. Ich weiß aber absolut nicht, wie ich folgendes erreichen kann (PseudoCode):
Delphi-Quellcode:
Kann mir da jmd helfen?
1.) renderObj.Parent := PaintBox1.Handle;
2.) renderObj.CopyMem(@myPic, sizeof(myPic)); 3.) renderObj.render; Vielen Dank, Nogge |
Re: 2D-Bild (array of byte's) mit Direct3D darstellen
ich habe es jetzt geschafft, ein 2D-Bild zu zeichnen, aber maxPrimitiveCount ist zu wenig, d.h. ich kann nur 65000 Points zeichnen.
Delphi-Quellcode:
Wie ist es möglich, mit einer älteren GraKa z.B. eine 400x250 Zeichenoberfläche pixelgenau zu zeichnen?
// Lock the Vertex Buffer to get the pointer
hRes := D3DVertexBuffer.Lock(0, dataSize, pBuffer, D3DLOCK_DISCARD or D3DLOCK_NOSYSLOCK); if (FAILED(hRes)) then begin result := E_FAIL; exit; end; // fill the buffer with the vertices copyMemory(pBuffer, @pixelList[0], dataSize); // Unlock the buffer if (FAILED(D3DVertexBuffer.Unlock())) then begin result := E_FAIL; exit; end; for i := 0 to high(pixelList) do begin pixelList[i].x := i mod SCREEN_WIDTH; pixelList[i].y := i div SCREEN_WIDTH; pixelList[i].z := 0.5; pixelList[i].rhw := 1.0; pixelList[i].color := data[i]; end; //[...] D3DDevice.SetStreamSource(0, D3DVertexBuffer, sizeof(TPixel)); D3DDevice.SetVertexShader( POINT_FLAGS ); D3DDevice.DrawPrimitive(D3DPT_POINTLIST, 0, len); // wenn len>65000, dann zeichnet er nur noch schwarz ab der Stelle |
Re: 2D-Bild (array of byte's) mit Direct3D darstellen
Hallo,
Vielleicht solltest du daraus eine Textur machen. Erscheint mir der leichtere Weg. Gruß, Finn |
Re: 2D-Bild (array of byte's) mit Direct3D darstellen
Mh, ich brauche es allerdings für eine Echtzeitanwendung, d.h. es soll das Bild einer Kamera dargestellt werden. Daher wollte ich über die GraKa gehen und nicht eine einfache Textur per CPU rendern lassen. Desweiteren ändern sich das Bild ja ständig und ich weiß nicht, ob dazu eine Textur die beste Wahl ist. Oder kann man dies auch über Direct3D realisieren?
|
Re: 2D-Bild (array of byte's) mit Direct3D darstellen
Tut mir leid, aber da bin ich leider in wenig überfragt. Ich weis nicht, ob man den Weg über die CPU ganz aussparen kann. Allerdings gibt es ja Videoplayer, die das Bild über Direct3D rendern (Stichwort: Hardwarebeschleunigung), vielleicht hilft dir das ja irgendwie weiter. Das müsste deinem Szenario ja recht ähnlich sein.
Gruß, Finn |
Re: 2D-Bild (array of byte's) mit Direct3D darstellen
So, ich habe es jetzt selbst herausgefunden. Man benötigt folgende Funktionen, die ich hier mal als Stichworte für andere Bedürftige hinterlasse:
Gruß Nogge |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz