Laden...

[Monogame/XNA] DrawLine im 3D-Raum mit SpriteBatch Objekt

Erstellt von 3r0rXx vor 8 Jahren Letzter Beitrag vor 8 Jahren 4.265 Views
3r0rXx Themenstarter:in
55 Beiträge seit 2014
vor 8 Jahren
[Monogame/XNA] DrawLine im 3D-Raum mit SpriteBatch Objekt

Guten Tag liebe Community,
ich programmiere gegenwärtig eine Space-Simulation in XNA(Ich verwende XNA weil es Komplikationen mit dem Content Importer des Monogames gibt).

Um die Distanz zur Sonne von Planet P zu bestimmen, nutze ich den Satz des Pythagoras..
Soweit so gut..
Mein Vorhaben ist es, die Distanz von Planet P zur Sonne B zu plotten(in Form einer Linie).

Es funktioniert... jedoch gibt es ein schwerwiegenden Fehler...

Ich konvertiere die Weltkoordinaten in Bildschirmkoordinaten mit dieser Methode um:


        public static Vector2 Vec3ToVec2(GraphicsDevice device, Matrix projection, Matrix view, Matrix world, Vector3 current_pos)
        {
            var coord = device.Viewport.Project(current_pos, projection, view, world);
            return new Vector2(coord.X, coord.Y);
        }

Das funktioniert alles soweit.. Die Sonne B liegt bei P(0, 0, 0).. also


Game1.Vec3ToVec2(Device, Camera.ProjectionsMatrix, Camera.ViewMatrix, Matrix.Identity, new Vector3(GLOBALX, GLOBALY, GLOBALZ));

Das Ergebnis aus der "konvenablen" Perspektive:(ANHANG Screenshot 151)

Das Ergebnis aus der "inkonvenablen" Perspektive:(ANHANG Screenshot 152)

'Tis not too late to seek a newer world.

3r0rXx Themenstarter:in
55 Beiträge seit 2014
vor 8 Jahren

Konnte Anhang 152 nicht in den ersten Post integrieren... ) =

'Tis not too late to seek a newer world.

3.003 Beiträge seit 2006
vor 8 Jahren

Es funktioniert... jedoch gibt es ein schwerwiegenden Fehler...

Welchen? Wie ist überhaupt die Frage?

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

3r0rXx Themenstarter:in
55 Beiträge seit 2014
vor 8 Jahren

Guten Tag,
der Fehler liegt darin, dass wenn ich von der selben Position nach oben schaue, die Linien und die String gezeigt werden...
Anhang 152 ist von der selben Position nur nach oben geschaut... und Anhang 151 ist die selbe Position von unten geschaut.
Das bedeutet, es zeichnet da, wo ich es will, aber es zeichnet auch da, wo ich es nicht will.

Anders kann man das nicht formulieren... Ich mach kurz ein Video..

Gruß.

Hinweis von MrSparkle vor 8 Jahren

Link auf Video entfernt, bitte beachte [Hinweis] Wie poste ich richtig?, Punkt 6.1. Was für Bilder gilt, gilt auch für Videos: Keine externen Filehoster verwenden.

'Tis not too late to seek a newer world.

5.657 Beiträge seit 2006
vor 8 Jahren

Hi 3r0rXx,

Das bedeutet, es zeichnet da, wo ich es will, aber es zeichnet auch da, wo ich es nicht will.

Anders kann man das nicht formulieren...

Doch kann man. Da braucht es auch kein Erklär-Video. Also: Wo sollen die Linien gezeichnet werden, und wo werden sie stattdessen gezeichnet? Was hast du bereits probiert, und woran bist du gescheitert? Bitte beachte unseren [Hinweis] Wie poste ich richtig?, besonders Punkt 4, 4.2 und 5.

Christian

Weeks of programming can save you hours of planning

3r0rXx Themenstarter:in
55 Beiträge seit 2014
vor 8 Jahren

Es tut mir leid,
es ist so:
Ich habe einen Planeten P1.. von dem ziehe ich eine Linie zu B1(0,0,0).
Das klappt auch gut.
Guckt man aber von der selben Position nach oben, wird plötzlich ebenso eine Linie gezeichnet..(Anhang 152)
Anders kann man es nicht formulieren.

Wie würdet ihr denn Strings und Linie im 3d Raum zeichnen?

Viele Grüße,
3r0rXx

'Tis not too late to seek a newer world.

742 Beiträge seit 2005
vor 8 Jahren

Wie sehen denn die Z-Werte des Rückgabetypes von ViewPort.Project aus?

3r0rXx Themenstarter:in
55 Beiträge seit 2014
vor 8 Jahren

Die Werte liegen zwischen 0.9993f und 1.

EDIT: Ray Intersection klappt nun.. ich hatte das Ray nicht geupdated ^^+.
SpriteBatch Problems steht .

'Tis not too late to seek a newer world.

5.657 Beiträge seit 2006
vor 8 Jahren

Ich habe einen Planeten P1.. von dem ziehe ich eine Linie zu B1(0,0,0).
Das klappt auch gut.
Guckt man aber von der selben Position nach oben, wird plötzlich ebenso eine Linie gezeichnet..(Anhang 152)

Ich hab das Problem immer noch nicht verstanden. Auf den beiden angehängten Bildern sind jede Menge Linien zu sehen. Ob die korrekt gezeichnet sind oder nicht, kann man nicht erkennen.

Nach dem Beitrag zu urteilen, den du gestern wegeditiert hast, scheint das Problem auch weniger beim Zeichnen der Linien zu liegen, als an der Projektion der Koordinaten von 3D in 2D. Vielleicht solltest du mal die wichtigsten Codestellen posten, also z.B. die Erstellung der Projektions-Matrizen. Ansonsten kannst du den Fehler auch selbst weiter eingrenzen, indem du deinen Code debuggst und testest:
[Artikel] Debugger: Wie verwende ich den von Visual Studio? und [Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio

Christian

Weeks of programming can save you hours of planning

3r0rXx Themenstarter:in
55 Beiträge seit 2014
vor 8 Jahren

Guten Abend,

[...}indem du deinen Code debuggst und testest:[...]

So hab ich das Ray-Problem gelöst, nichtsdestotrotz, danke Dir ( =.

Also:
Wir nehmen an Planet Pluto liegt auf V3(200000,0,200000)..
Um Pluto nicht zu vernachlässigen, wird eine Linie gezeichnet, die den aktuellen Standort des Planeten Pluto markiert.(Denn Pluto ist weit entfernt lokalisiert)

Gucken wir nun von V3(0,0,0) zu V3(200000,0,200000) wird die Linie auch gezeichnet.(Yaw: 1, Pitch 1.5)

Rotiert man die Kamera aber nun um 180° also (Yaw: 1, Pitch MINUS 1.5) wird ebenso die Linie gezeichnet..

Ein Beispiel als Anhang(statt Linie, String)(Perspektive 1 und Perspektive 2, selbe Position, nur veränderte Yaw und Pitch Werte)

'Tis not too late to seek a newer world.

3r0rXx Themenstarter:in
55 Beiträge seit 2014
vor 8 Jahren

'Tis not too late to seek a newer world.

5.657 Beiträge seit 2006
vor 8 Jahren

Ich habe wirklich keine Ahnung, was auf den Screenshots zu sehen sein soll. Oder auf was sich deine Beschreibung bezieht.

Ich frag jetzt nochmal: Unter welchen Umständen werden Linien korrekt gezeichnet, und unter welchen Umständen nicht? Wenn du das nicht beschreiben kannst, kann dir auch niemand bei der Problemlösung helfen. Wir sind keine Wahrsager.

Versuch dich bei der Problembeschreibung in einen Außenstehenden hineinzuversetzen, der keine Ahnung von deiner Vorgehensweise hat. Du kannst dir auch hier im Forum durchlesen, wie ähnliche Fragen formuliert wurden, die schneller eine Antwort bekommen haben. Wir haben auch in [Hinweis] Wie poste ich richtig? einige Tips zur Fragestellung zusammengefaßt. Aber das Beschreiben des Problems ist deine Aufgabe, die dir auch niemand abnehmen kann.

Christian

Weeks of programming can save you hours of planning

3r0rXx Themenstarter:in
55 Beiträge seit 2014
vor 8 Jahren

Anders kann man das nicht formulieren... Ich mach kurz ein Video..

Das ist der Grund, wieso es ohne ein Video nicht geht.
Man wird es erst verstehen, wenn man die Problemstellung auch sieht.

Auf den Screenshots sind die Namen Earth, Mercury, Venus et cetera zu sehen.
Einmal dann, wenn es auch sein soll.. also wenn man den Planeten sieht, sieht man auch seinen Namen; und ein anderes Mal, wenn man den Planeten NICHT sieht, aber trotz dessen seinen Namen.

Es tut mir leid, anders ist es einfach nicht zu beschreiben; und wenn dies der Moderation oder den Nutzer dieses Forums einfach zu nervig wird, bitte ich um die Schließung des Threads.

'Tis not too late to seek a newer world.