Frage

Ich habe einen YUV auf RGB-Umwandlung über ein Fragment-Shader geschrieben in Nvidias Shader-Sprache implementiert. (Y, U und V werden in getrennten Texturen gespeichert, die über mehr Texturierung in meinen Fragment-Shader kombiniert werden). Es funktioniert großartig unter OpenGL, aber unter Direct3D Ich kann einfach nicht das Ausgangsbild erhält rechts zu schauen. Ich fange an zu vermuten, dass Direct3D irgendwie Modifizierung der Y, U und V-Proben, bevor ich eine Chance bekommen, mein YUV-Konvertierung, was zu tun. Hat jemand wissen, ob Direct3D irgendwelche Änderungen an den gespeicherten Werten in Texturen macht, bevor das Fragment-Shader ausgeführt wird und wie sie deaktivieren>?

War es hilfreich?

Lösung

Wir dachten, es heraus. :) Im Grunde war das Problem, dass, während unsere YUV auf RGB Gleichungen korrekt waren, waren wir nicht richtig die V-Daten Abtasten! Also keine Menge mit den Gleichungen des futzing hätte geholfen!

Am Ende würde ich die folgende Strategie für jedermann empfehlen versuchen, dies zu tun:

1) Satz-R, G und B auf den Wert von Y. Ihnen ein Graustufenbild erhalten sollen (wie Y nur Luminanz) enthält. 2) Als nächstes stellen R, G und B zu U. Sie sollten lustige Farben erhalten! 3) Schließlich setzen R, G und B zu V. Auch hier sollten Sie lustige Farben.

Auch richtig, die Werte zu normalisieren, ist kritisch. Schauen Sie sich unsere fourcc.org für eine Diskussion über die richtige YUV Normalisierung.

Andere Tipps

Der einzige Vorschlag, den Sinn kommt, ist, dass die Texturen in einem ungeeigneten Format (niedriger Genauigkeit oder komprimiert) sind.

Können Sie beschreiben, auf welche Weise die Ausgabe falsch aussieht? Jede Chance, ein Recht vs falsch Screenshot?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top