Autor Beitrag
DX
Hält's aus hier
Beiträge: 3

WinXP Pro

BeitragVerfasst: Mo 18.08.03 21:55 
Hallo,

Ich verzweifle hier gleich, dabei gibt es bestimmt eine ganz einfache Lösung für mein Prob. Also versuche mich gerade ein bisschen in DirectX 9 einzufinden und habe mir eine Klasse THUDObject erstellt. Diese soll einfache HUD-Elemente o.ä. (e.g. Fadenkreuz) auf den fertig gerenderten Screen legen. Für den Anfang soll die Klasse aber erstmal ein buntes Viereck zeichnen. Wenn ich nun die Vertices fest als
ausblenden Delphi-Quelltext
1:
Vertices = array[0..3of TCustomVertex;					

definiere und dann per CopyMemory in meinen vb kopiere, klappt alles wunderbar. Ich möchte aber die Möglichkeit offenhalten, HUD-Elemente mit unterschiedlicher Vertexanzahl zu benutzen. Also habe ich meine Vertices als
ausblenden Delphi-Quelltext
1:
Vertices = array of TCustomVertex;					

deklariert. In der Methode AddVertex passiert dann folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
VerticeCount := VerticeCount + 1;
 SetLength(Vertices, VerticeCount);
 Vertices[VerticeCount-1].x := blablabla

Eigentlich sollte das klappen, aber das Bild bleibt leider schwarz. Was mache ich da falsch? Hier mal noch der Code der VB-Erstellungs-Proc und der Render-Proc:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure THUDObject.CreateVB();
var PVertices: Pointer;
    i : Integer;
begin
 pD3DDevice.CreateVertexBuffer(sizeof(THUDVertex) * verticecount, 0,
  D3DFVF_HUDVERTEX, D3DPOOL_DEFAULT, VertexBuffer, nil);
 VertexBuffer.Lock(0, sizeof(Vertices), PVertices, 0);
  CopyMemory(pVertices, @vertices, SizeOf(vertices));
 VertexBuffer.Unlock;
end;

procedure THUDObject.Draw;
begin
 if VertexBuffer <> nil then begin
  pD3DDevice.SetStreamSource(0, VertexBuffer, 0, sizeof(THUDVertex));
  pD3DDevice.SetFVF(D3DFVF_HUDVERTEX);
  pD3DDevice.DrawPrimitive(D3DPT_TRIANGLESTRIP, 02);
 end;
end;

Bin für jede Hilfe dankbar!

MfG
Thomas

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
KarlKoch
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mo 18.08.03 23:11 
Deine CopyMemory stimmt nicht. Du darfst nicht @vertices kopieren, sondern du musst beim ersten Element anfangen und dann count Vertices kopieren, also
ausblenden Delphi-Quelltext
1:
CopyMemory(pVertices, @vertices[0], sizeof(THUDVertex) * verticecount);					

karlkoch

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
DX Threadstarter
Hält's aus hier
Beiträge: 3

WinXP Pro

BeitragVerfasst: Di 19.08.03 07:01 
Danke für die schnelle Antwort, ich probier's gleich heute nachmittag aus.

MfG
Thomas
DX Threadstarter
Hält's aus hier
Beiträge: 3

WinXP Pro

BeitragVerfasst: Di 19.08.03 16:37 
:D Das funzt! Vielen Dank!