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

  1. Modus und gegebenenfalls Projektion festlegen.
  2. Punkte definieren, danach Flächen, Kanten, Vektoren und Texte ergänzen.
  3. Syntaxstatus und Warnungen zu Punkten außerhalb des Zeichenbereichs prüfen.
  4. Mit Zeichnung erstellen oder Objekte zeichnen rendern.
  5. Das Ergebnis visuell prüfen und mit Bild herunterladen als PNG exportieren.
# 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)
FormBedeutung
A(x|y|z)Sichtbares Punktkreuz mit Namen.
!Ergänzt die Koordinaten in der Punktbeschriftung.
$Macht den Punkt unsichtbar; er bleibt referenzierbar.
#RRGGBBFärbt das Punktkreuz. Der Name verwendet weiterhin die allgemeine Punktfarbe der Oberfläche.
labelVerschiebt 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
BefehlBedeutung
_sDurchgezogene Strecke; typischerweise eine sichtbare Kante.
.sGestrichelte Strecke; typischerweise eine verdeckte Kante.
_gDurchgezogene Gerade durch zwei Punkte, über beide Punkte hinaus verlängert.
_vDurchgezogener Vektor von P1 nach P2 mit Pfeilspitze.
.vGestrichelter 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)
ParameterBedeutung
P1,P2,...Mindestens drei definierte Punkte in der Reihenfolge des Polygonrands.
FarbenFüll- und Randfarbe als Hexwert oder englischer CSS-Farbname.
Mustersolid, diagonal, diagonal2, rombus oder empty.
DeckkraftOptionaler 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]

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

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.

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)