Einzelnen Beitrag anzeigen

grizzly

Registriert seit: 10. Dez 2004
150 Beiträge
 
Delphi XE4 Professional
 
#1

DirectX: Mehrere verzerrte Versionen eines Bildes aufsummieren

  Alt 4. Aug 2021, 15:06
Hallo!

Ich möchte ein und das selbe Bild mehrere tausend male aufsummieren, wobei aber das Bild jedesmal leicht verzerrt ist.
Für die Verzerrung unterteile ich das Bild in Dreiecke, und die male ich mit verschobenen Koordinaten in ein neues Bild. Mehrere dieser Bilder summiere ich dann auf und bilde am Schluss den Mittelwert. (Ich habe das Prinzip im angehängten Bild mal angedeutet. (Die Kanten der Dreiecke müsst ihr euch natürlich gerade vorstellen ))
Das rechnet leider stun-den-lang

Ich bin nun nicht der DirectX Guru, vermute aber, dass man damit mein Problem performant lösen können sollte.
Ich habe mir vorgestellt, dass ich einen Triangle-Strip definieren muss, welcher mein Bild als Textur verwendet.
Für die Verzerrung muss ich den Dreiecken die neuen Koordinaten zuweisen, bevor ich sie in den Zielspeicher schreibe (wie auch immer das geht). Wobei das Bild dann derart geschrieben werden muss, dass es die bereits vorhandenen Daten nicht überschreibt, sondern lediglich seine Farbkanäle draufaddiert.
Für das aufsummierte Bild wäre es toll, wenn man da so ein R32G32B32 Format verwenden könnte, weil ich dann das Bild tausende male reinpinseln kann, ohne dass mir ein Kanal überläuft. Erst am Schluss müsste ich dann den Mittelwert bilden.

Das Ganze soll auch im Hintergrund laufen (als nicht auf dem Bildschirm), und die Bildgrößen sind moderat: 512×512 Pixel.

Meine Fragen an die Gurus: Bin ich da mit DirectX auf dem Holzweg? Und nach welchen Stichwörten muss ich googeln, damit ich was passendes finde? Die meisten Tutorials erklären mir 3D Game-Engines, das ist ja für meine Zwecke der Overkill. Ich ersaufe in den Details

Ich muss vermutlich:
- DirectX initialisieren
- Mein Bild in eine Textur umwandeln
- Ein Triangle-Strip definieren, und dem die Textur zuweisen (Sind da irgendwelche Normalen zu beachten?).
- Einen R32G32B32A32 Zielspeicher definieren, welcher das aufsummierte Bild beinhaltet. (Hängt die Verfügbarkeit von sowas am Ende von der Grafikkarte und dem verfügbaren Speicher ab?)
- Zigtausendmal neue Dreickspositionen bestimmen und meinen Trianglestrip jedesmal aufs neue verzerrt in den Zielspeicher kopieren (unter Verwendung ominöser Parameter)
- Meinen Zielspeicher auslesen und die RGB Werte mitteln.

Die Tutorials, welche ich bislang gefunden habe, sind Jahrzehnte alt, ich habe beim durcharbeiten dauernd mit Inkompatibilitäten zu meinem Delphi X4 zu kämpfen.

Bin für jeden Hinweis dankbar.

Viele Grüße
Michael
Miniaturansicht angehängter Grafiken
bildersummieren01.jpg  
  Mit Zitat antworten Zitat