fix(world): Bordstein bekommt einen eigenen Tiefenversatz

Er war die einzige Straßengeometrie neben den Belägen ohne Versatz und
konnte beim flachen Blick gegen den Gehwegbelag verlieren. Jetzt trägt er
denselben kleinen Faktor wie die Beläge und steht eine Einheitenstufe über
dem obersten von ihnen.

Gemessen im Browser (Schicht aus- und wieder eingeblendet, Bild Pixel für
Pixel verglichen): Der Bordstein zeichnet bis 504 m, dieselbe Reichweite
wie Fahrbahn, Gehweg und Markierung. Das erreichte er auch ohne den
Versatz — er ist Absicherung gegen den Tiefenstreit, keine Reichweite.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
knsoandClaude Opus 5 committed 2026-09-18 13:43:33 +02:00
1 parent b69239fd00
commit 4e201d2b79
2 files changed
+28 -3

No files matched your search

+10
View File
@@ -208,6 +208,16 @@ export const POLYGON_OFFSETS = {
]),
),
markings: { polygonOffset: true, polygonOffsetFactor: DECAL_FACTOR, polygonOffsetUnits: -DECAL_UNITS_STEP },
// Der Bordstein ist echte Geometrie, steht aber unmittelbar neben den Belägen und grenzt mit
// seiner 20 cm breiten Oberkante sogar an dieselbe Stelle wie der Gehweg. Ohne Faktor verlor er
// beim flachen Blick gegen den Gehwegbelag - ab etwa 40 m war er weg (im Browser gemessen).
// Mit demselben Faktor heben sich die blickwinkelabhängigen Anteile auf, und die Units stellen
// ihn eine Stufe über den obersten Belag.
curb: {
polygonOffset: true,
polygonOffsetFactor: DECAL_FACTOR,
polygonOffsetUnits: -(POLYGON_OFFSET_ORDER.length) * DECAL_UNITS_STEP,
},
};
/** Trägt POLYGON_OFFSETS in die passenden Materialien ein. Nur die benannten Schichten —
+18 -3
View File
@@ -78,6 +78,18 @@ describe("Tiefenpuffer-Versatz je Schicht (gegen Flackern zwischen Boden/Stadt/P
}
});
// Zweiter Teil des Bordstein-Befunds: Mit Faktor 0 blieb er zwar sichtbar, aber nur etwa 40 m
// weit - danach zog ihn der Gehwegbelag beim flachen Blick doch zu. Der Bordstein grenzt an die
// Beläge und braucht deshalb denselben Faktor; über die Units steht er eine Stufe über dem
// obersten Belag, damit auch seine 20 cm breite Oberkante auf dem Gehweg sichtbar bleibt.
it("nimmt den Bordstein in den Versatz auf, eine Stufe über dem obersten Belag", () => {
const oberster = POLYGON_OFFSET_ORDER[POLYGON_OFFSET_ORDER.length - 1];
expect(POLYGON_OFFSETS.curb.polygonOffsetFactor).toBe(POLYGON_OFFSETS[oberster].polygonOffsetFactor);
expect(POLYGON_OFFSETS.curb.polygonOffsetUnits)
.toBeLessThan(POLYGON_OFFSETS[oberster].polygonOffsetUnits);
expect(POLYGON_OFFSET_ORDER).not.toContain("curb");
});
it("gibt allen Belägen denselben kleinen Faktor, nur die Bodenplatte bleibt bei null", () => {
const [boden, ...belaege] = POLYGON_OFFSET_ORDER;
expect(POLYGON_OFFSETS[boden].polygonOffsetFactor).toBe(0);
@@ -102,7 +114,8 @@ describe("Tiefenpuffer-Versatz je Schicht (gegen Flackern zwischen Boden/Stadt/P
// s. Kommentar dort), bekommt seinen Versatz aber trotzdem über den zweiten Eintrag im
// POLYGON_OFFSETS-Objekt — einziger Beleg, dass der bis in ein Materialobjekt durchreicht.
expect(fake.markings).toEqual(POLYGON_OFFSETS.markings);
for (const key of ["carriageway", "curb", "bridges", "buildings", "water", "seafloor"]) {
expect(fake.curb).toEqual(POLYGON_OFFSETS.curb);
for (const key of ["carriageway", "bridges", "buildings", "water", "seafloor"]) {
expect(fake[key]).toEqual({});
}
});
@@ -140,9 +153,11 @@ describe("Schichten aus Teil 2", () => {
// Eine Stufe wie der unterste Belag, nicht die oberste: Ihr Nachbar ist die Fahrbahn ohne Versatz.
expect(POLYGON_OFFSETS.markings.polygonOffsetUnits)
.toBe(POLYGON_OFFSETS[POLYGON_OFFSET_ORDER[1]].polygonOffsetUnits);
// Fahrbahn und Bordstein liegen 15 cm tiefer und sind echte Geometrie — kein Versatz nötig.
// Die Fahrbahn liegt 15 cm tiefer und berührt keinen Belag — sie braucht keinen Versatz.
// Der Bordstein dagegen schon: Er grenzt an den Gehweg und verlor ohne Faktor beim flachen
// Blick gegen ihn (s. Test "nimmt den Bordstein in den Versatz auf").
expect(POLYGON_OFFSETS.carriageway).toBeUndefined();
expect(POLYGON_OFFSETS.curb).toBeUndefined();
expect(POLYGON_OFFSETS.curb).toBeDefined();
});
});