Anleitung – 3D-Objektgenerator
Der Generator übersetzt eine zeilenbasierte Befehlssprache in eine 2D-Darstellung dreidimensionaler Objekte. Ein KI-Assistent kann natürliche Beschreibungen in solche Befehlszeilen übertragen.
Stand: 6. Juli 2026, abgeglichen mit 3d.js und 3d.test.js mit AI.
1. Schnellstart und Grundregeln
- Modus und gegebenenfalls Projektion festlegen.
- Punkte definieren, danach Flächen, Kanten, Vektoren und Texte ergänzen.
- Syntaxstatus und Warnungen zu Punkten außerhalb des Zeichenbereichs prüfen.
- Mit Zeichnung erstellen oder Objekte zeichnen rendern.
- Das Ergebnis visuell prüfen und mit Bild herunterladen als PNG exportieren.
- Jeder Befehl steht in einer eigenen Zeile.
- Dezimalpunkt verwenden:
2.5, nicht2,5; für robuste Skripte fertige Zahlen statt Rechenausdrücken ausgeben. - Farben als
#RRGGBBoder englischen CSS-Farbnamen angeben, z. B.#ff0000oderdarkgreen. - Kommentare beginnen in einer eigenen Zeile mit
#oder//. Kommentare am Ende einer Befehlszeile sind ungültig. - Zeilen, deren erstes Zeichen nach optionalem Leerraum ein Backtick ist, werden vollständig ignoriert. Dadurch können Markdown-Zäune wie
```textund```mitkopiert werden.
# Kommentar
// Kommentar
Fehlerhafte Zeilen werden im Syntaxstatus gemeldet, während gültige Teile trotzdem gezeichnet werden können. Eine Teilzeichnung ist daher noch kein Nachweis für ein vollständig korrektes Skript.
Skript-Link
https://box4bot.de/3d/?script=... übernimmt ein Skript ins Editorfeld und rendert es sofort. Zeilen werden bevorzugt mit ~n~ getrennt; %0A wird ebenfalls akzeptiert.
https://box4bot.de/3d/?script=BW_system%3Dfalse~n~A(1%7C2%7C3)~n~B(3%7C2%7C1)~n~_s(A%2CB)%20%23FF0012
Der Parameter muss URL-kodiert sein, insbesondere # als %23, | als %7C, + als %2B, Leerzeichen als %20 und & als %26.
Der Button URL erstellen erzeugt den Link aus dem aktuellen Editorinhalt und kopiert ihn in die Zwischenablage.
2. Punkte und Punktbeschriftungen
A(x|y|z)
A(x|y|z)!
A(x|y|z)$
A(x|y|z) #RRGGBB
label(A,dx,dy;Schriftgröße)
| Form | Bedeutung |
|---|---|
A(x|y|z) | Sichtbares Punktkreuz mit Namen. |
! | Ergänzt die Koordinaten in der Punktbeschriftung. |
$ | Macht den Punkt unsichtbar; er bleibt referenzierbar. |
#RRGGBB | Färbt das Punktkreuz. Der Name verwendet weiterhin die allgemeine Punktfarbe der Oberfläche. |
label | Verschiebt den Namen relativ zum projizierten Punkt. Positives dx wirkt nach rechts, positives dy nach unten; alle Werte sind Pixel. |
Punkt- und Objektnamen können Tiefstellungen enthalten, etwa P_1, P_{12} oder g_{AB}. Verwenden Sie eindeutige Namen.
A(1|2|3)
B(0|-1|4)!
H(1|1|0)$
K(2.5|3.2|1.0) #ff0000
label(A,-12,-8;15)
3. Strecken, Geraden und Vektoren
_s(P1,P2)
_s(P1,P2) #204060
_s:Name(P1,P2) #204060
.s(P1,P2)
.s(P1,P2) blue
.s:Name(P1,P2) darkgreen
_g(P1,P2)
_g:Name(P1,P2) purple
_v(P1,P2)
_v:Name(P1,P2) blue
.v(P1,P2)
.v:Name(P1,P2) #cc0000
| Befehl | Bedeutung |
|---|---|
_s | Durchgezogene Strecke; typischerweise eine sichtbare Kante. |
.s | Gestrichelte Strecke; typischerweise eine verdeckte Kante. |
_g | Durchgezogene Gerade durch zwei Punkte, über beide Punkte hinaus verlängert. |
_v | Durchgezogener Vektor von P1 nach P2 mit Pfeilspitze. |
.v | Gestrichelter Vektorschaft mit ausgefüllter Pfeilspitze. |
Ein Name nach dem Doppelpunkt ist optional. Hinter der Klammer kann bei benannten und unbenannten Strecken, Geraden und Vektoren eine Farbe folgen. Es gibt kein gestricheltes Geraden-Primitive.
Liniendicke
lines=1.5
.s(A,B)
lines=3
_s(A,C)
lines=n akzeptiert positive Werte bis 20 und wirkt ab seiner Position auf danach definierte Strecken, Geraden, Vektoren und Flächenränder. Punkte und Texte sind nicht betroffen. Der Parser erkennt Befehlsnamen case-insensitiv; die Hilfe verwendet einheitlich die Kleinschreibung.
Gemeinsame Linienfarbe
color=#FF0012
_s(A,B)
.s(A,C)
_v(B,C)
_g(A,D) blue
color=... gilt ab seiner Position für danach definierte Strecken, Geraden und Vektoren bis zum nächsten color=.... Zulässig sind #RRGGBB und englische CSS-Farbnamen. Eine direkt am Objekt angegebene Farbe – hier blue – hat Vorrang. Punkte, Texte und Flächenränder sind nicht betroffen.
4. Flächen und Polygone
_F(P1,P2,P3,...;Füllfarbe;Randfarbe;Muster)
_F(P1,P2,P3,...;Füllfarbe;Randfarbe;Muster;Deckkraft)
| Parameter | Bedeutung |
|---|---|
P1,P2,... | Mindestens drei definierte Punkte in der Reihenfolge des Polygonrands. |
| Farben | Füll- und Randfarbe als Hexwert oder englischer CSS-Farbname. |
| Muster | solid, diagonal, diagonal2, rombus oder empty. |
| Deckkraft | Optionaler Alphawert von 0 bis 1; 1 ist deckend. Der Wert wirkt derzeit auch auf den Rand. |
_F(A,B,C;orange;navy;solid)
_F(A,B,C,D;#cccccc;#000000;solid;0.35)
Die Deckkraft der Oberfläche multipliziert den Alphawert einzelner Flächen. Flächen besitzen keine Namen.
5. Freie Texte
_T(Text,x,y,Schriftgröße,Farbe)
x und y sind keine Pixelwerte. Der Renderer behandelt die Position wie den 3D-Punkt (0|x|y) und projiziert ihn mit dem gewählten System. Ein einzelnes Unicode-Zeichen wird zentriert, längerer Text beginnt an der Position linksbündig. Tiefstellungen sind mit _1 oder _{12} möglich.
_T(Ein Würfel,4,2,20,blue)
_T(●,0.5,1.0,35,#ff0000)
_T(P_{12},2,-1,18,#000000)
6. Betriebsmodi und Hintergrund
BW_system=true
background=true
BW_system=true ist der Default und verwendet eines der klassischen Bild-Koordinatensysteme. background=false blendet dort das Hintergrundbild aus und erzeugt eine weiße Fläche.
Die klassischen Hintergründe Standard, größer, retro, ohne Beschriftung und riesig werden unter der Zeichenfläche gewählt. Ein Wechsel passt Canvas und Kalibrierung an.
BW_system=false
Aktiviert das berechnete, frei konfigurierbare Parallelprojektionssystem. Es handelt sich nicht um eine Fluchtpunktperspektive.
7. Berechnete Achsen und Grid
Achsenprojektion
axis=[Winkel1,Faktor1,Ursprung1; Winkel2,Faktor2,Ursprung2; Winkel3,Faktor3,Ursprung3; x3Einheiten]
axisrange=[xMin,xMax; yMin,yMax; zMin,zMax]
showaxis=true
showtics=1
showunits=1
hiddenLines=false
axisnames=[x_1,x_2,x_3]
- Winkel werden von der positiven Bildschirm-u-Achse aus angegeben und erscheinen im Uhrzeigersinn.
- Der Faktor ist eine feste Achsenskalierung innerhalb der Parallelprojektion und muss positiv sein.
- Der erste Ursprungswert wird ignoriert; der zweite bestimmt die horizontale Lage in Prozent von links, der dritte die vertikale Lage in Prozent von unten.
x3Einheitenbestimmt den Maßstab über die Canvas-Höhe und muss positiv sein.- Bei
axisrangemuss jedes Minimum kleiner als das Maximum sein. showtics=0blendet Teilstriche aus;showtics=nzeichnet jeden n-ten ganzzahligen Teilstrich.showunits=0blendet Zahlen aus;showunits=nbeschriftet jedes n-te ganzzahlige Vielfache.hiddenLines=truezeichnet verdeckte Linien- und Flächenkanten gestrichelt; Default istfalse.- Kompatibilität:
showtics=trueentspricht1,showtics=falseentspricht0. Neue Skripte sollten die numerische Form verwenden. axisnames=[]blendet die Achsennamen aus.
Grid
grids=2,80%,1
grid2d=x,y,false
gridrange=[-4,3; -2,7]
gridrange=[-4,3; -2,7; -1,5]
gridlevel=0
showgrid=true
gridssetzt Linien pro Einheit, Grauwert in Prozent und Pixelstärke. Beim Grauwert ist0weiß und100schwarz.grid2dakzeptiertu,v,x,y,x,zodery,z. Der optionale dritte Wert isttruefür durchgezogen oderfalsefür gepunktet.- Zwei
gridrange-Bereiche gelten für das gewählte Achsenpaar; drei Bereiche stehen immer für x, y und z. gridlevelverschiebt räumliche Grids entlang der dritten Achse; beiu,vhat es keine Wirkung.
Defaults: showgrid=true, showaxis=true, showtics=1, showunits=1, hiddenLines=false, axisnames=[x_1,x_2,x_3], grid2d=u,v und gridlevel=0.
Bei BW_system=false verdecken deckende solid-Flächen andere Objekte per Z-Buffer. Mit hiddenLines=true wirken auch transparente solid-Flächen auf Linien und zeigen verdeckte Abschnitte gestrichelt.
8. Projektionsvorgaben
# Isometrisch
axis=[150,1,50; 30,1,50; -90,1,50; 10]
# Dimetrisch
axis=[150,0.5,50; 30,1,50; -90,1,50; 10]
# Kavalierprojektion
axis=[135,1,50; 0,1,50; -90,1,50; 10]
# Kabinettprojektion
axis=[135,0.5,50; 0,1,50; -90,1,50; 10]
# Baden-Württemberg-Stil
axis=[135,0.7,50; 0,1,50; -90,1,45.45; 11]
Diese Vorgabe verwendet den auf das Standardbild 3d.jpg abgestimmten vertikalen Ursprung von rund 45.45 % von unten. Sie nähert den klassischen Stil an, reproduziert das Hintergrundbild wegen der getrennten horizontalen und vertikalen Skalierung aber nicht vollständig pixelgenau.
9. Reihenfolge, Überdeckung und Grenzen
Empfohlene Quelltextreihenfolge: System/Projektion/Grid → Punkte → label → Flächen → Strecken/Geraden → Vektoren → freie Texte. lines=... und color=... stehen unmittelbar vor dem Abschnitt, für den sie gelten. Punkte sollten zur Lesbarkeit vor ihren Verwendungen stehen; der aktuelle Parser löst Referenzen nach dem vollständigen Einlesen auf.
Im klassischen Modus gilt die bisherige Zeichenreihenfolge. Im berechneten Modus bestimmt zusätzlich der Z-Buffer die Verdeckung; freie Texte werden zuletzt gezeichnet.
- Der Z-Buffer gilt nur bei
BW_system=falseund setzt planare Polygone voraus. - Gemusterte Flächen verdecken nicht automatisch; transparente Flächen beeinflussen nur bei
hiddenLines=truedie Linien. - Keine Kreis- oder Ellipsenprimitive; runde Symbole lassen sich beispielsweise mit
_T(●,...)annähern. - Keine perspektivische Kamera; alle Darstellungen sind Parallelprojektionen.
10. Vollständiges Beispiel
BW_system=false
axis=[150,1,50; 30,1,50; -90,1,50; 10]
axisrange=[-1,3; -1,3; -1,3]
showaxis=false
showgrid=false
axisnames=[]
A(0|0|0)$
B(2|0|0)$
C(2|2|0)$
D(0|2|0)$
E(0|0|2)$
F(2|0|2)$
G(2|2|2)$
H(0|2|2)$
.s(A,B)
_s(B,C)
_s(C,D)
.s(D,A)
_s(E,F)
_s(F,G)
_s(G,H)
_s(H,E)
.s(A,E)
_s(B,F)
_s(C,G)
_s(D,H)
_T(Ein Würfel,2.5,2.7,20,blue)