Gaaaanz einfache Frage
-
Hallo zusammen
Ich bin noch nicht sooo vertraut mit C#, kenne jedoch C++ sehr gut. Nun frage ich mich, wie ich folgendes in C# realisieren kann:// determine the current vertex and assign its position and normal WaterVertex vtx = arrVtx[(this.numSeg+1)*y+x]; vtx.Position = new Vector3(posStr+szeWtr*x,0,posStr+szeWtr*y); vtx.Normal = new Vector3(0,1,0);
Offenbar werden diese Daten nicht wirklich in das Array geschrieben, weil es sich bei Watervertex um ein struct und somit um einen Valuetype handelt. Wie mache ich es denn, damit ich nicht ständig alles herumkopieren muss?
In C++ würde ich es folgendermassen machen:
WaterVertex *pVtx = arrVtx[(this.numSeg+1)*y+x]; vtx->Position = new Vector3(posStr+szeWtr*x,0,posStr+szeWtr*y); vtx->Normal = new Vector3(0,1,0);
Mfg Samuel
-
Mach aus WaterVertex ne Klasse.
-
David_pb schrieb:
Mach aus WaterVertex ne Klasse.
Das ist keine Alternative, wenn Performance wichtig ist. Er benutzt scheinbar Managed DirectX oder XNA oder irgend so etwas
Du könntest jeweils den gesamten Vertex neu schreiben. Oder unsafe-Code benutzen, Array pinnen und dann wie in C++ drauf zugreifen (aber dann hast du nicht mehr viel von C#^^)
MfG
-
das keyword ref verwenden -> pointer wird übergeben, nicht kopiert
SomeMethod(ref SomeStruct);
edit: möglicherweise hab ich auch falsch verstanden, was du meinst. arrays sind allgemein aber referenztypen wo meines wissens nur ein zeiger übergeben wird. ansonsten schreibt man halt ref, wenn man nicht will das value types kopiert werden.
und warum schreibst du nicht:
arrVtx[(this.numSeg+1)*y+x].Position = new Vector3(posStr+szeWtr*x,0,posStr+szeWtr*y); arrVtx[(this.numSeg+1)*y+x].Normal = new Vector3(0,1,0);
ist doch semantisch äquivalent. den sinn der zuweisung verstehe ich an der stelle nicht. vllt ist der codeausschnitt einfach zu klein