
Grafikfehler mit Code und Screenshots systematisch debuggen
Ihr Objekt wird an der falschen Stelle angezeigt, aber der Shader wird kompiliert. Ein Screenshot zeigt das Symptom; Der Code zeigt mehrere plausible Ursachen. Die Aufforderung an die KI, „das Bild zu reparieren“, ohne Kamera, Matrizen oder erwartetes Ergebnis, fördert eine überzeugende Vermutung.
Bereiten Sie ein Rendering-Belegpaket vor
Beziehen Sie den Renderer/die API, relevante Shader-Stufen, Uniform-Werte, Geometrie, Ansichtsfenster, Kamera, erwartetes Ergebnis, tatsächlichen Frame und Reproduktionsaktion ein. Zeichnen Sie Grafikfehler und Kompilierungs-/Link-Diagnosen als Beobachtungen auf, nicht als Zusammenfassung mit der Aussage „Alles ist in Ordnung“.
| Beleg | Benötigter Inhalt | Was das Bild allein nicht belegt |
|---|---|---|
| Soll- und Ist-Bild | Gleiche Kamera und Auflösung, markierter Fehlerbereich | Welche Transformation oder welcher Zustand die Ursache ist |
| Shader und Uniforms | Exakter Stand, Matrixkonvention, Werte | Ob die Anwendung die vorgesehenen Werte übertragen hat |
| Draw-Konfiguration | Geometrie, Attributlayout, Tiefen-/Culling-/Blend-Zustand | Welche Objekte tatsächlich gezeichnet wurden |
| Reproduktion | Minimale Szene und Schritte | Ob der Patch auch eine andere Szene korrigiert |
Eine fehlende Textur und eine falsche Beleuchtung können in Miniaturbildgröße ähnlich aussehen. Stellen Sie, wo möglich, einen unkomprimierten Ausschnitt bereit und vermeiden Sie den Wechsel der Kamera zwischen den Vergleichsbildern.
Ein Beispiel für eine Transformationsreihenfolge mit einer überprüfbaren Erwartung
projection * view * model * position, wobei die Transformation ganz rechts zuerst angewendet wird.Angenommen, der Shader enthält:
gl_Position = uProjection * uModel * uView * vec4(position, 1.0);(1,0,0,1) ist das beabsichtigte Clip-Ergebnis (0,0.6,0,1):Model: (1,0) -> (3,0)
View: (3,0) -> (0,3)
Projection: (0,3) -> (0,0.6)
Wrong order: View (1,0)->(0,1), Model ->(2,1), Projection ->(0.4,0.2)Fordern Sie eine Hypothese, eine Reproduktion und einen minimalen Patch an
Untersuchen Sie die angegebene Rendering-Diskrepanz.
Verwenden Sie den Shader, den Hoststatus, das erwartete Verhalten, den tatsächlichen Frame und die Revision.
Behandeln Sie Bilder als Beobachtungen und nicht als Beleg einer bestimmten Grundursache.
Rückgabe:
1. beobachtetes Symptom und die Belege dafür;
2. Rangfolge der Hypothesen mit jeweils einem Unterscheidungstest;
3. der kleinste Test für die Leithypothese;
4. ein Patch nur, wenn der Test die Behauptung stützt;
5. fehlende Uniformen, Zustände oder Kontexte, die eine Schlussfolgerung verhindern.
Verwenden Sie die angegebene Matrix-/Vektorkonvention.
Schreiben Sie den Renderer nicht neu. Verändern Sie die Kamera nicht, um den Fehler zu verdecken.
Behaupten Sie nicht, Tests ausgeführt zu haben, wenn Sie diese lediglich vorgeschlagen haben.
Eingaben: Belegpaket und erforderlicher Transformationsvertrag.In diesem Beispiel lautet der Kandidaten-Patch:
gl_Position = uProjection * uView * uModel * vec4(position, 1.0);Geben Sie für den ersten Versuch Matrixkonvention und fehlerhaften Shader an. Fordern Sie eine Hypothese und einen minimalen Patch an; unterscheiden Sie mit dem Zahlentest (0,0.6) von (0.4,0.2), bevor Sie das reale Bild prüfen.
Führen Sie eine kleine numerische Prüfung durch, bevor Sie das Bild beurteilen
Das folgende JavaScript spiegelt den zweidimensionalen Teil der Transformationen dieses Beispiels wider:
const model = ([x, y]) => [x + 2, y];
const view = ([x, y]) => [-y, x];
const projection = ([x, y]) => [x * 0.2, y * 0.2];
const correct = projection(view(model([1, 0])));
const wrong = projection(model(view([1, 0])));
if (Math.abs(correct[0]) > 1e-9 || Math.abs(correct[1] - 0.6) > 1e-9) {
throw new Error("Unexpected reference transform");
}
if (Math.abs(wrong[0] - correct[0]) < 1e-9 &&
Math.abs(wrong[1] - correct[1]) < 1e-9) {
throw new Error("Fixture does not distinguish transform order");
}Wenn derselbe Screenshot einen weiteren Fehler bedeuten könnte
| Symptom | Unterscheidender Test |
|---|---|
| Position ändert sich mit Kamerabewegung | Transformationen und übertragene Werte an einem bekannten Punkt prüfen |
| Objekt verschwindet von einer Seite | Vertex-Reihenfolge, Culling und Blickrichtung prüfen |
| Position stimmt, Verdeckung nicht | Tiefenbuffer, Löschen und Vergleichszustand prüfen |
| Textur gedehnt oder gespiegelt | UV-Koordinaten, Bildausrichtung und Samplerdaten prüfen |
| Nur Displays mit hoher Pixeldichte betroffen | Drawing-Buffer-Größe, Viewport und CSS-Größe vergleichen |
Ändern Sie jeweils eine Bedingung. Durch das Deaktivieren des Cullings wird möglicherweise die Geometrie angezeigt, es stellt jedoch nicht sicher, dass das Deaktivieren die richtige endgültige Lösung ist. Speichern Sie das Experiment und seine Interpretation separat.
Behalten Sie eine Regressionsszene mit dem Fix bei
Behalten Sie einen Fall bei, in dem Translation und Rotation nicht kommutieren; Identitätsmatrizen würden den Fehler in diesem Beispiel verbergen. Fügen Sie normale Kamerabewegung und repräsentative Geometrie hinzu, nachdem der Minimalfall abgeschlossen ist. Vergleichen Sie dieselbe Szenenrevision und notieren Sie alle verbleibenden Artefakte als separates Problem.
FAQ
Kann ein Screenshot die genaue Ursache identifizieren?
Normalerweise liefert es ein Symptom und einen Ort. Der Code, der Zustand und die Reproduktion unterscheiden konkurrierende Ursachen.
Belegt ein kompilierter Shader, dass die Mathematik korrekt ist?
Nein. Gültige Ausdrücke können Transformationen in der falschen Reihenfolge anwenden.
Sollte ich jeden vorgeschlagenen Patch auf einmal ausprobieren?
Verwenden Sie jeweils eine Hypothese und testen Sie sie, damit das Ergebnis eine interpretierbare Ursache hat.
Verifiziert die JavaScript-Prüfung die GPU-Ausgabe?
Es überprüft die angegebene Arithmetik. Rendering und Host-Status-Validierung sind separate Schritte.
Soll das Modell das gesamte Repository erhalten?
Beginnen Sie mit der Szene und dem relevanten Zustand, die zur Reproduktion der Nichtübereinstimmung erforderlich sind. Fügen Sie Abhängigkeiten hinzu, wenn eine Hypothese sie erfordert.
Was gehört in den endgültigen Fehlerbericht?
Überarbeitung, Eingaben, erwartetes und beobachtetes Verhalten, Experiment, akzeptierter Patch, Regressionsprüfungen und verbleibende Unsicherheit.
Quellen
- Khronos: Vertex-Transformation: Koordinatenstufen.
- MDN: Matrix-Uniformen: WebGL-Upload-Anforderungen.


