Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   DirectX: Mehrere verzerrte Versionen eines Bildes aufsummieren (https://www.delphipraxis.net/208487-directx-mehrere-verzerrte-versionen-eines-bildes-aufsummieren.html)

grizzly 4. Aug 2021 14:06

DirectX: Mehrere verzerrte Versionen eines Bildes aufsummieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
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 :wink:))
Das rechnet leider stun-den-lang :cry:

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 :oops:

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

TiGü 5. Aug 2021 07:50

AW: DirectX: Mehrere verzerrte Versionen eines Bildes aufsummieren
 
Ich vermute, es ist zielführender und weniger frustrierend, wenn du das Ganze gleich mit Visual Studio mit C++ beginnst.
Die Delphi-Übersetzungen der DirectX-Header (egal ob jetzt 9, 10, 11 oder 12) sind teilweise fehlerhaft und dann sucht man sich einen Wolf, um gewisse Sachen aus C++-Tutorials irgendwie in Delphi zu quetschen.
Das ist ja verlorene Zeit.

Als ich mich zuletzt damit beschäftigt hatte war es so, dass die kostenlose Community-Edition auch schon fertige Projekt-Vorlagen für UWP-DirectX-11/12 Projekte mitbrachte, so dass du zumindest die Schritte 1 und 2 und ggf. auch 3 schon fertig zur Anschauung hast.
https://docs.microsoft.com/en-us/win...tx-programming
https://docs.microsoft.com/en-us/win...user-interface

Diese Beispiele kannst du dir dann soweit runterstrippen, bis es für deine Belange passt.

Auch ein Blick auf verschiedene Repositories auf GitHub bringt dich vielleicht weiter:
Speziell diese Beispiele hier:
https://github.com/microsoft/DirectX...3D12HelloWorld
welche Bestandteil eines größeren Repository ist:
https://github.com/microsoft/DirectX-Graphics-Samples

grizzly 5. Aug 2021 08:33

AW: DirectX: Mehrere verzerrte Versionen eines Bildes aufsummieren
 
Ah, das hatte ich befürchtet :(
Aber man hofft ja bis zuletzt :oops:

Vielen Dank für die Links, ich werde mir das mal ansehen.

Viele Grüße
Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf