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

23.10.2017, 13:09

2D-Ansicht aus 3D-Modell erstellen

Hi,

ich habe hier ein 3D-Modell, welches sich klassich aus Dreiecken zusammensetzt, welche die Faces definieren.

Von diesem 3D-Modell gibt es jetzt eine 2D-Ansicht senkrecht von oben, in der die Z-Koordinate naturgemäß nicht interessiert. Für diese Draufsicht würde ich aus dem (komplexen) 3D-Modell jetzt gerne ein deutlich einfacheres 2D-Modell erzeugen, welche nur aus dem Umriss des 3D-Modells in dieser Ansicht besteht (wenn das Modell Löcher hat, durch die man durchsehen kann, wäre es super, wenn diese ebenfalls als "Löcher" im 2D-Modell auftauchen, das muss aber nicht sein).

Um das noch mal klar zu sagen: ich will nicht einfach die Z-Koordinate auf 0 setzen, um das Modell platt zu klopfen, ich will ein komplett neues Polygon erzeugen, welches nur den Umriss in der Draufsicht darstellt.

Leider felht mir da noch völlig ein Ansatzpunkt, wie ich das am cleversten anstellen könnte. Deswegen meine Frage: wie könnte man sowas realisieren? Oder gibt's eventuell schon eine _schlanke_ Bibliothek, die das kann?

Danke!

2

23.10.2017, 13:44

Ich verstehe nicht so ganz was du machen willst.
Willst du nur die eußeren Umrisslinien haben oder die Flächen die zur Kamera zeigen?

3

23.10.2017, 14:06

Am einfachsten würde es gehen, das Objekt mit z.B. Blender aus der Sicht rendern, dann hasst du es als Bilddatei und die kann man relativ einfach in ein Polygon umwandeln.
Wenn du es zur Laufzeit eines Programmes machen möchtest, brauchst du nur eine Bibliothek, die die Koordinaten transformiert und dann musst du das noch in ein Polygon umwandeln. Wenn man sich etwas auskennt, kann man das ganze auch selber schreiben, ist halt etwas aufwändiger aber ganz sicher spannend.

Die Routine zum Umwandeln in ein Polygon könnte in etwa so ausschauen:
1) Einen Pixel auswählen
2) überprüfen ob der Pixel an irgendeiner Stelle von einem Hintergrund Pixel (oder Hintergrundfarbe) oder Rand umgeben ist. Wenn ja -> Es ist ein Pixel des Umrisses und mit 3 fortfahren. Wenn nein -> nächsten Pixel überprüfen.
3) Alle anliegenden Pixel überprüfen ob sie UmrissPixel sind mit diesen Pixeln fortfahren und alle zu einer Liste hinzufügen. Und alle Pixel, die keine sind auch zu einer anderen Liste hinzufügen.

So fortfahren, bis alle Pixel in einer der beiden Listen zu finden sind.

4) Alle aus der ersten Liste anschauen und diese, wo der Winkel der anliegenden “Linien“ die aus mehreren Pixeln besteht (zum Beispiel die nächsten 50 Pixel (je nach Auflösung) nehmen und den Mittelwert nehmen um die Richtung zu bestimmen) kleiner als zum Beispiel 160° ist, heraussuchen.

Diese Punkte sind die Eckpunkte des Polygons.

Mit den Werten musst du etwas herumexperimentieren.

Ich hoffe du verstehst es.
Albert Einstein sagte: "2 Stunden mit einem netten Mädchen fühlen sich an wie 20 Minuten, 20 Minuten auf einem heißen Ofen fühlen sich an wie 2 Stunden. - Das ist Relativität"

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Patrick Z.« (23.10.2017, 15:06)


4

24.10.2017, 07:18

OK, ich glaube, meine Erklärung war etwas unklar.

Angenommen, ich habe eine Kugel als 3D-Objekt vorliegen. Wenn ich da jetzt von oben drauf sehe (OK, bei der Kugel ist die Richtung egal), dann sehe ich eine kreisrunde Scheibe. Sprich das zugehörige 2D-Polygon, das ich rechnerisch ermitteln möchte, wäre ein Kreis.

Wenn ich einen auf der Spitze stehenden Würfel habe, dann wäre das Polygon aus der Draufsicht ein Sechseck.

Das Ganze soll mit beliebigen 3D-Modellen funktionieren, bei denen sich dann (fast) beliebig komplizierte Polygone ergeben.

Blender etc. fällt leider weg, ich muss dieses Kreis rein programmatisch aus dem 3D-Modell der Kugel berechnen.

Die Variante mit den Pixelfarbwerten wäre möglich, erscheint mir aber ziemlich rechenzeitaufwändig - und die Genauigkeit des Ergebnisses ist dann ja auch von der Auflösung des Bildes abhängig, welches ich abtaste.

Das ganze wird für ein Programm benötigt, in der es neben einer reinen 3D-Ansicht, die sich beliebig drehen lässt, eben auch eine nicht-perspektivische 2D-Ansicht von vorne, von oben und von der Seite gibt. Da sollen nicht jedes mal sämtliche Faces des 3D-Modells gezeichnet werden, sondern nur die zugehörigen 2D-Polygone, welche dann den Umriss des 3D-Modells aus dieser Richtung darstellen.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

24.10.2017, 07:57

Was du brauchst, ist eine Methode, um zwei beliebige Polygone zu verschmelzen (Vereinigung). Das kann z. B. die kostenlose und für viele Sprachen verfügbare Bibliothek Clipper oder boost::geometry. Du nimmst also jedes Polygon, "klopfst es platt" und verschmelzt es mit den bereits verarbeiteten Polygonen.

6

24.10.2017, 23:07

Was spricht denn gegen eine orthogonale Projektion und reduktion des Meshes?
Mesh reduction algorithm

In der Zeit von Stencilshadows brauchte man auch die außenkannten des Meshes,
hilft dir dieser Teil des Algorithmus?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Hannes« (24.10.2017, 23:13)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

24.10.2017, 23:09

Was spricht denn gegen eine orthgonale Projektion und reduktion des Meshes?

Soweit ich das verstehe, ist das ja genau das, was ihm Probleme bereitet.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

25.10.2017, 08:13

Ich würde mal die Frage in den Raum werfen, wofür er das eigentlich meint zu brauchen, sprich was das eigentliche Ziel von dem ganzen Spaß ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

9

25.10.2017, 14:32

Ich würde mal die Frage in den Raum werfen, wofür er das eigentlich meint zu brauchen, sprich was das eigentliche Ziel von dem ganzen Spaß ist.


Siehe mein Posting oben, es geht mir um eine vereinfachte Darstellung, die dann entsprechend schneller gezeichnet/dargestellt wird:

Zitat

Das ganze wird für ein Programm benötigt, in der es neben einer reinen 3D-Ansicht, die sich beliebig drehen lässt, eben auch eine nicht-perspektivische 2D-Ansicht von vorne, von oben und von der Seite gibt. Da sollen nicht jedes mal sämtliche Faces des 3D-Modells gezeichnet werden, sondern nur die zugehörigen 2D-Polygone, welche dann den Umriss des 3D-Modells aus dieser Richtung darstellen.

10

25.10.2017, 14:33



Das klingt doch mal gut - Danke!!!

Werbeanzeige