Hallo,
ich habe einen Vector3 und möchten diesen in Bildschirmkoordinaten umrechnen, damit ich dort einen 2D Text hinschreiben kann.
Nun hab ich mich schlau gemacht, und gelesen das die Umrechnung wie folgt funktioniert.
2D-Punkt = 3D-Punkt * WorldMatrix * ViewMatrix * ProjectionMatrix;
dann X und Y durch W teilen und auf den Bildshirmskalieren.
Mein Code
_Device.Transform.World = Matrix.Translation(0, 0, 0);
_Device.Transform.View = Matrix.LookAtLH(new Vector3(2, 2, 2), new Vector3(0, 0, 0), new Vector3(0, 1, 0));
_Device.Transform.Projection = Matrix.OrthoLH(5, 5, 1, 10);
Vector3 p = new Vector3(0, 0, 0); //Koordinaten Ursprung
p.TransformCoordinate(_Device.Transform.World);
p.TransformCoordinate(_Device.Transform.View);
Vector4 zwichen = new Vector4(p.X, p.Y, p.Z, 1); //aus der verrechnung mit der Projectionmatrize kommt ein Vector4 heraus
zwichen.Transform(_Device.Transform.Projection);
Vector2 v = new Vector2(zwichen.X / zwichen.W, zwichen.Y / zwichen.W);
Bei der Berechnung ist "v" leider immer 0. Was mache ich falsch?
Schöne Grüße,
Stu
Ist jetzt nur geraten, aber aus dem Vektor (0|0|0) sollte doch auch (0|0) herauskommen.
Perfekt.
Vielen dank, der Beitrag hat mir sehr gehohlfen.
Ist jetzt nur geraten, aber aus dem Vektor (0|0|0) sollte doch auch (0|0) herauskommen.
der Vector(0|0|0) ist der Ursprung des Koordinatensystems, standardmäßig in der Mitte des DirectX Fensters liegt.