Frage

OpenGL. Lassen Sie uns sagen, dass ich ein Bild gezeichnet haben und dann die zweite mit XOR. Jetzt habe ich schwarz Puffer mit nicht-schwarzen Pixeln irgendwo bekam, ich habe gelesen, dass ich Shadern können schwarz [rgb (0,0,0)] Pixel auf GPU zählen?

Ich habe auch gelesen, dass es etwas mit OcclusionQuery zu tun hat. http://oss.sgi.com/projects/ogl- Probe / registry / ARB / occlusion_query.txt

Ist es möglich und wie? [Jeder Programmiersprache]

Wenn Sie andere Idee haben, wie Ähnlichkeit über OpenGL / GPU zu finden -. So groß sein, würde

War es hilfreich?

Lösung

Ich bin nicht sicher, wie Sie die XOR-Bit tun (zumindest sollte es langsam sein, ich glaube nicht, dass der aktuelle GPUs dass beschleunigen), aber hier ist meine Idee:

  1. haben zwei Eingangsbilder
  2. wiederum auf Okklusion Abfrage.
  3. die beiden Bilder auf den Bildschirm zeichnen (dh Vollbild-Quad mit zwei Texturen eingerichtet), mit einem Fragment-Shader, abs (texel1-texel2) berechnet, und tötet das Pixel ( Verwerfen in GLSL ), wenn die Pixel die gleiche (Differenz Null ist oder unter einem gewissen Schwellenwert). Der einfachste ist wahrscheinlich mit nur einem GLSL Fragment-Shader, und es nur zwei Texturen lesen, berechnen abs () die Differenz und das Pixel verwerfen. Sehr einfach GLSL Wissen genügt hier.
  4. erhalten Anzahl von Pixeln, die die Abfrage übergeben. Für Pixel, die die gleichen sind, die Abfrage sind nicht passieren (Pixel wird vom Shader verworfen werden), und für die Pixel, die unterschiedlich sind, wird die Abfrage übergeben.

Zuerst dachte ich, eines komplexeren Ansatz, der Tiefenpuffer beinhaltet, aber dann realisiert, dass nur das Töten Pixel genug sein sollte. Hier ist mein Original obwohl (aber die oben ist einfacher und effiziente):

  1. haben zwei Eingangsbilder
  2. klarer Bildschirm und Tiefenpuffer
  3. die beiden Bilder auf den Bildschirm zeichnen (dh Vollbild-Quad mit zwei Texturen eingerichtet), mit einem Fragment-Shader, abs (texel1-texel2) berechnet, und tötet das Pixel ( Verwerfen in GLSL ), wenn die Pixel unterschiedlich sind. Zeichnen Sie die Quad so dass es Tiefenpuffer Wert etwas in der Nähe in der Nähe von Ebene ist.
  4. nach diesem Schritt Tiefenpuffer werden kleine Tiefenwerte für die Pixel enthalten, die die gleiche ist, und große (far-Ebene) Tiefenwerte für Pixel sind, die unterschiedlich sind.
  5. schalten Sie Okklusion Abfrage, und ein weiteres Vollbild Quad ziehen mit der Tiefe näher als weit Ebene, aber größer als die vorherige Quad.
  6. erhalten Anzahl von Pixeln, die die Abfrage übergeben. Für Pixel, die gleich sind, wird die Abfrage nicht passieren (Tiefenpuffer bereits näher) und für die Pixel, die unterschiedlich sind, wird die Abfrage übergeben. Sie würden SAMPLES_PASSED_ARB verwenden, um dies zu erhalten. Es gibt eine Okklusion Abfrage Beispiel bei CodeSampler.com Ihren Start.

Natürlich alles erfordert diese GPU mit Okklusion Abfrage Unterstützung. Die meisten GPUs seit 2002 oder so, dass unterstützen, mit Ausnahme von einigen Low-End-one (insbesondere Intel 915 (auch bekannt als GMA 900) und Intel 945 (auch bekannt als GMA 950)).

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