Ich versuche, DOF-Effekt in meinem Shader zu implementieren. Im Shader habe ich Farbtextur + Offset für Unschärfe. Ich muss Offset für RGB und meinen eigenen A-Kanal hinzufügen, den ich im Shader vorher mache. Wie kann ich den Alpha-Kanal in einem Schritt ersetzen? Ich kann unter GLSL-Funktionen nichts Passendes finden. Vielen Dank!Ersetzen Alpha für Textur in den Shader
Antwort
Ja, es ist möglich, Texturen (oder Bilder) als Eingabe und Ausgabe zu verwenden, aber Sie sollten es nicht tun.
Der OpenGL-Treiber muss wissen, was eine Eingabe und was eine Ausgabe ist, damit die Operationen ordnungsgemäß synchronisiert werden können (z. B. sollte ein Lesevorgang auf einer Textur auf die gleiche Textur warten ...)
OpenGL 4.2 stellt Bild Load/Store, eine Art des Lesens und Bilder zu schreiben, aber Sie haben die Synchronisation selbst verwalten (mit barrier()
und *Barrier()
Anrufe). Es ist für Daten gedacht, die sowohl gelesen als auch geschrieben werden müssen, z. Atomzähler, Transparenzwerte ...
In Ihrem Fall gibt es zwei Datensätze: Farben und Offsets. Der eine wird nur gelesen und der andere nur geschrieben. Es ist besser, die beiden einfach zu trennen und sie einfach als reguläre Ein-/Ausgaben zu behandeln (Texturbindung/FBO-Anhang). Wenn Sie für die zwei Mengen eine Textur verwenden, wird diese als eine zu synchronisierende Entität behandelt, was zu mehr Wartezeiten an anderer Stelle führt.
- 1. Wie in Textur-Shader
- 2. OpenGL Fragment Shader Return Festfarbe für Textur
- 3. Textur Lookup in Vertex Shader
- 4. Alpha zum Shader hinzufügen
- 5. Benutzerdefinierte Textur Shader in Three.js
- 6. WebGL: Textur Zugriff in einem Vertex-Shader?
- 7. Force Feld Shader unwrap Textur funktioniert nicht
- 8. Three.js benutzerdefinierte Shader mit Textur
- 9. Compute Shader schreibe auf Textur
- 10. GLSL-Shader, die Scroll-Textur
- 11. OpenGL Fragment Shader in einer Textur
- 12. Wie Nebel Textur in Shader (Three.js R76)
- 13. Langsam Textur in Fragment-Shader holt Vulkan
- 14. OpenGL projektive Textur-Mapping über Shader
- 15. OpenGL ES2 Farbe und Textur-Shader
- 16. iOS-Metall-Shader - Textur Lese- und Schreibzugriff?
- 17. Unity3d Shader nimmt keinen Alpha-Farbkanal in Wirkung
- 18. Textur-Mapping der cessna.osg über GLSL Shader
- 19. Compute Shader nicht 3D-Textur ändern
- 20. Schreiben in eine leere 3D-Textur in einem Compute Shader
- 21. Eine Textur auf einem Fragment-Shader in GLSL ES drehen
- 22. Wie erstellt man eine Textur mit Alpha in QOpenGLTexture?
- 23. Einschränkungen für Shader
- 24. Anstrich in Puffer. Problem mit Alpha-Kanal
- 25. three.js webgl benutzerdefinierte Shader Textur mit neuen Offset teilen
- 26. Textur-UVs werden nicht korrekt an Shader gesendet
- 27. iPhone - OpenGL ES 1.1 - Alpha Blend machen Textur falsche Farbe
- 28. Alpha-Maske/Textur Physik Körper fataler Fehler beim Start - swift
- 29. WebGL Textur über Textur
- 30. WebGL GLSL Shader: Zugriff auf Textur2D überschreibt andere Textur
Das ist nicht sehr klar, möchten Sie aus der Textur probieren und einen neuen Wert in seinem Alpha-Kanal speichern, alles in einem einzigen Shader? – pleluron
** pleluron ** Ja, das ist! Nicht schwierig für mich, dies außerhalb des Shaders zu implementieren, aber interessant, wie das gelöst werden kann. – OpenglNoob
Welche Version von OpenGL verwenden Sie? – pleluron