[Projekt] Polyblock-Editor
Verfasst: 18.05.2023, 19:13
Kleines Side-Projekt, das ich mal einigermaßen fertig gemacht habe.
Ursprungsgedanke war, Polygone per Maus in 2D bearbeiten zu können. Dann irgendwie tesselieren, und einfache World-Y-Extrusion per Parameter dazu (Bodenhöhe, Blockhöhe), und schon kann man einfache 3D-Umgebungen für Prototyping basteln. Ein bischen wie Doom1-Levelgeometrie, mehr oder weniger.
Beim "irgendwie tesselieren" kam ich zwischenzeitlich darauf, dass es ja sowieso sehr einfache Polys bleiben, und es wohl reichen dürfte, den Startpunkt für einen Fan manuell festlegen zu können. Dadurch kann man, wie im Bild zu sehen, einfache konkave Polygone ohne viel Tamtam dahinter tesselieren. Ich rendere die Polys transparent und mit Dreieckslinien bei selektiertem Polygon, d.h. man sieht sofort wo was nicht passt und kann andere Startpunkte ausprobieren.
Beispielszenen, im Download mit dabei: Bedienung:
In 3D kann man nur betrachten. Kein Dolly, sondern WASD2X + Maus.
Im 2D-Canvas:
- MMB + Mousewheel: Pan und Zoom.
- Linien/Punkte/Polygone anfassen, verschieben, löschen. Wenn man ein kleines Poly verschieben möchte, aber erwischt immer nur Punkte oder Linien: ranzoomen.
- STRG+Klick für neue Punkte. Wenn ein Poly markiert ist, wird dort ein neuer Punkt eingefügt. Ansonsten ein neues Poly begonnen. Polyorder wird automatisch korrigiert, da muss man nichts beachten.
- Wenn man mal an ein Poly nicht mehr ran kommt: das darüberliegende markieren und "send to back".
- Selektiertes Polygon: ALT+verschieben=Duplizieren; R=Rotate (90°), M=Mirror.
- Doppelklick auf einen Punkt: von diesem aus neu tesselieren.
Man kann nur im Raster und Ganzzahlen arbeiten.
Höhe wird vom letzten markierten Block beibehalten, Boden wird je nach Mausposition beim Erstellen ermittelt, aber nicht beim Verschieben geändert.
Was NICHT geht:
Undo, zerschneiden, frei drehen, Rampen bauen, gruppieren, Multiselektion, texturieren, einfärben, Warnungen wenn man nicht gespeichert hat bei clear/load/quit, usw.
Es ist halt wirklich nur für schnelle kleine Protoszenen gedacht, wenn man mal schnell was bauen, aber keinen ausgewachsenen 3D-Editor bedienen möchte. Daher habe ich manche Features, welche die Bedienung komplexer machen würden, erstmal weggelassen. Aber ein paar Sachen kommen sicher mit der Zeit dazu.
Exportformate:
- Das native Format ist binär. Doku lohnt sichjetzt nicht, weil:
- txt ist im Prinzip dasselbe, nur lesbar und selbsterklärend. Für eigene Anwendungen.
- tris ist nur Geometrie als rohe Dreiecksliste, unique Vertices, keine Indices.
- obj ist ebenfalls im Textformart, mit indizierten Vertices, zum Weiterarbeiten in 3D-Software. Ob konkave Polygone richtig tesseliert werden, hängt dann vom Programm ab. In Blender hatten erste Versuche geklappt, in Cura ebenfalls.
Ich möchte nicht ausschließen, dass ich bei dem ein oder anderen Export noch einen Fehler drin habe, ist alles nicht auf Herz und Nieren geprüft.
Es gibt ein paar experimentelle Features, z.B. wenn man bei type "trigger" oder "path" eintippt, werden diese anders dargstellt. Ist mal gedacht als kleiner Levelbuilder, wo man dann die Polyblöcke als einfache Collider weiterbenutzen, aber am Ende andere Geometrie hinterlegen kann.
Ich dachte ich werfs einfach mal im aktuellen Zustand in die Runde:
Ursprungsgedanke war, Polygone per Maus in 2D bearbeiten zu können. Dann irgendwie tesselieren, und einfache World-Y-Extrusion per Parameter dazu (Bodenhöhe, Blockhöhe), und schon kann man einfache 3D-Umgebungen für Prototyping basteln. Ein bischen wie Doom1-Levelgeometrie, mehr oder weniger.
Beim "irgendwie tesselieren" kam ich zwischenzeitlich darauf, dass es ja sowieso sehr einfache Polys bleiben, und es wohl reichen dürfte, den Startpunkt für einen Fan manuell festlegen zu können. Dadurch kann man, wie im Bild zu sehen, einfache konkave Polygone ohne viel Tamtam dahinter tesselieren. Ich rendere die Polys transparent und mit Dreieckslinien bei selektiertem Polygon, d.h. man sieht sofort wo was nicht passt und kann andere Startpunkte ausprobieren.
Beispielszenen, im Download mit dabei: Bedienung:
In 3D kann man nur betrachten. Kein Dolly, sondern WASD2X + Maus.
Im 2D-Canvas:
- MMB + Mousewheel: Pan und Zoom.
- Linien/Punkte/Polygone anfassen, verschieben, löschen. Wenn man ein kleines Poly verschieben möchte, aber erwischt immer nur Punkte oder Linien: ranzoomen.
- STRG+Klick für neue Punkte. Wenn ein Poly markiert ist, wird dort ein neuer Punkt eingefügt. Ansonsten ein neues Poly begonnen. Polyorder wird automatisch korrigiert, da muss man nichts beachten.
- Wenn man mal an ein Poly nicht mehr ran kommt: das darüberliegende markieren und "send to back".
- Selektiertes Polygon: ALT+verschieben=Duplizieren; R=Rotate (90°), M=Mirror.
- Doppelklick auf einen Punkt: von diesem aus neu tesselieren.
Man kann nur im Raster und Ganzzahlen arbeiten.
Höhe wird vom letzten markierten Block beibehalten, Boden wird je nach Mausposition beim Erstellen ermittelt, aber nicht beim Verschieben geändert.
Was NICHT geht:
Undo, zerschneiden, frei drehen, Rampen bauen, gruppieren, Multiselektion, texturieren, einfärben, Warnungen wenn man nicht gespeichert hat bei clear/load/quit, usw.
Es ist halt wirklich nur für schnelle kleine Protoszenen gedacht, wenn man mal schnell was bauen, aber keinen ausgewachsenen 3D-Editor bedienen möchte. Daher habe ich manche Features, welche die Bedienung komplexer machen würden, erstmal weggelassen. Aber ein paar Sachen kommen sicher mit der Zeit dazu.
Exportformate:
- Das native Format ist binär. Doku lohnt sichjetzt nicht, weil:
- txt ist im Prinzip dasselbe, nur lesbar und selbsterklärend. Für eigene Anwendungen.
- tris ist nur Geometrie als rohe Dreiecksliste, unique Vertices, keine Indices.
- obj ist ebenfalls im Textformart, mit indizierten Vertices, zum Weiterarbeiten in 3D-Software. Ob konkave Polygone richtig tesseliert werden, hängt dann vom Programm ab. In Blender hatten erste Versuche geklappt, in Cura ebenfalls.
Ich möchte nicht ausschließen, dass ich bei dem ein oder anderen Export noch einen Fehler drin habe, ist alles nicht auf Herz und Nieren geprüft.
Es gibt ein paar experimentelle Features, z.B. wenn man bei type "trigger" oder "path" eintippt, werden diese anders dargstellt. Ist mal gedacht als kleiner Levelbuilder, wo man dann die Polyblöcke als einfache Collider weiterbenutzen, aber am Ende andere Geometrie hinterlegen kann.
Ich dachte ich werfs einfach mal im aktuellen Zustand in die Runde: