Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

12.07.2008, 18:20

3D-Dreieck "von Vorne" in 2D zeichnen.

hallo! ich bräuchte eine formel (wenn man das so nennen kann), auf die ich nicht ganz komme. und zwar möchte ich mit der die eckpunkte eines gegebenen dreiecks in 3D so in 2D zeichnen, dass das resultierende 2D-dreieck aussieht, als ob ich in der 3D-welt mit der kamera "von Vorne" (also von da, wo das dreieck hinschielt) auf das dreieck schauen würde (sprich: so, als ob man dieses dreieck flach auf den tisch legen und dann von oben drauf schauen würde).

mir schwant, dass ich das mit hilfe des normalenvektors der ebene dieses dreiecks mache. nur, wie?

ich möchte dieses "verfahren" wenn möglich auch auf andere 3D-punkte anwenden.

hoffentlich isses nich' wieder so kindergarten, auf den ich nich' komm', weil ich mal wieder viel zu kompliziert denk'. :cry:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

12.07.2008, 18:40

sry, aber ich hab 0 ahnung was du willst^^

3

12.07.2008, 18:58

Das ist einfach: DU hast die 3 Eckpunkte, und kannst jeweils deren Entfernungen zueinander bestimmen. Und da ein Dreiecke definiert ist, wenn man die 3 Seitenlängen hat, kannst du es zeichnen.
Den ersten Punkt kannst du beliebig wählen, der zweite ist z.B. einfach der Entfernung entsprechend nach links verschoben und die Position des dritten Punkte kannst du, wenn du die ersten 2 berechnet hast, mit dem Satz des Pythagoras bestimmen.

Allerdings wäre es hilfreicher zu wissen, was du machen willst, und nicht, was du denkst, wie du es machen solltest.
Lieber dumm fragen, als dumm bleiben!

Phili

unregistriert

4

12.07.2008, 19:06

Du willst die Position und Richtung einer Kamera ermitteln, die senkrecht auf ein Dreieck guckt?

1) Die Blickrichtung der Kamera ist der umgedrehte Normalenvektor des Dreiecks, also -N
2) Die Position der Kamera ist die Position des Dreiecks minus den Normalenvektor mal irgendwas, abhängig von der Größe des Dreiecks.

5

12.07.2008, 19:26

okay, also erstmal danke für die bemühungen, aber anscheinend hat mich hier keiner so ganz verstanden. drum will ich's mal in einem beispiel formulieren.

also, stellt euch vor, ihr seid ein vogel, und fliegt grad über die stadt. ihr schaut bei der suche nach würmern runter, und seht ein kind, das gerade von der schule heimkommt, und ein geo-dreieck in der hand hält. das kind hält das dreieck natürlich nicht genau so, dass ihr es von oben seht, sondern es hält es ein wenig schräg, so, dass ihr das dreieck nur noch "verzerrt" seht. doch als das kind das dreieck fallen lässt, liegt es ganz flach auf dem boden, und so könnt ihr es genau von oben sehen.

und genau so will ich dieses "geo-dreieck" zeichnen. und wie gesagt, sinn ist es, das alles nicht nur auf die eckpunkte des dreiecks anzuwenden.

man könnte auch sagen, ich will jeden vorhandenen punkt so drehen, bis das dreieck nach oben schaut - oder der normalenvektor eben (0,1,0) ist.

6

12.07.2008, 19:37

Es gibt dafür aber nicht eine sondern unenldiche viele Lösungen.

Du hast immer noch nicht gesagt, was du machen willst. Was hat es für einen Sinn, ein Dreieck von oben zu zeichnen??
Lieber dumm fragen, als dumm bleiben!

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

12.07.2008, 19:52

Du willst also einfach 2D simulieren, nicht?
Also ganz einfach ein Quad zeichnen, dort die Vertices überall auf einer Ebene haben (gleicher Z-Wert) und dann vermeiden es um die X/Y Achse zu drehen. Fertig.
Am besten probierst du einfach mal aus, wenn du ja ein Dreieck hast und dort ein wenig rumspielst, wirst du merken, dass 2D mit DirectX eigentlich recht banal ist.

8

12.07.2008, 20:16

naja, da hast du schon recht, aber wenn ich dich richtig verstanden habe, soll ich die z-ebene einfach schlicht und ganz ignorieren, richtig? das würde das dreieck aber "verfälschen", also die seitenlängen nicht so darstellen, wie sie eigentlich sind. es geht mir auch nicht um die visuelle darstellung, sondern eher um die resultierenden, veränderten koordinaten von punkten - die eckpunkte mit eingeschloßen.

leute, nehmt bitte mal alle ein geo-dreieck zur hand, dreht es in eine richtung, in die ihr wollt, jetzt schaut euch das dreieck mal an, hätte es wirklich die seitenlängen, die es hat, wenn man die tiefe (sprich: die z-ebene) einfach vergißt? nein - wäre schon ein echt seltsames dreieck, wenn dem so wäre!

ich hab' doch schon gesagt, was ich will: ich will das dreieck, das von mir aus die normalen (0.3,0.5,0.2) hat, so drehen, dass die normalen gleich (0,1,0) ist. denn dann könnte ich die z-ebene wirklich einfach ignorieren.

wenn ich mir den vorschlag mit dem der entfernung entsprechendem verschieben nochmal durch den kopf schießen lasse, könnte das allerdings schon die lösung sein.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

12.07.2008, 22:51

Zitat von »"mensk"«

ich hab' doch schon gesagt, was ich will: ich will das dreieck, das von mir aus die normalen (0.3,0.5,0.2) hat, so drehen, dass die normalen gleich (0,1,0) ist. denn dann könnte ich die z-ebene wirklich einfach ignorieren.


ja, das ist uns auch klar. das problem ist nur, dass es unendlich viele möglichkeiten gibt das dreieck so herzudrehen (es kann um die y achse beliebig verdreht sein):

klick mich

erklär uns vielleicht mal warum genau du das dreieck so "herdrehen" willst.

10

13.07.2008, 03:09

aha, nun gut, jetzt weiss ich auch, was mit "unendlich viele lösungen" gemeint war. nur, muss die y-achse dazu verdreht sein? ich denke nicht, also wäre die erste (obere) abbildung bei deinem bild wohl die richtige lösung, zumindest sieht es so aus. ich will ja gerade jede art von drehung raus haben, es sollen alle koordinaten quasi wieder zurückberechnet werden. da muss es doch eine bestimmte lösung geben!

Werbeanzeige