Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

1

31.07.2011, 10:30

2D Game - Pixelgenaue Kollisionserkennung mit Direct3D11 [solved]

Hallo zusammen,

ich bräuchte mal euren Rat und zwar muss ich eine Kollisionserkennung durchführen. Da eine Bounding Box gerade mal für eine Voruntersuchung gut ist muss ich im 2. Schritt eine Pixel genaue Untersuchung starten.

Ich benutze dafür 2 Monochrome Bilder, die ich im Falle einer Bounding Box Kollision dann in dessen Schnittpunkt Pixelweise überprüfe. Also wenn Schwarz und Schwarz sich schneiden, dann liegt eine Kollision vor. So die Theorie.

Im Netz habe ich dazu einige Beispiele gefunden, doch leider alle mit Direct3D9. Ich suche eine Möglichkeit um an die Pixel Daten zu gelangen, um die besagte Prüfung durchführen zu können.

Bei Direct3D9 war das noch ziemlich einfach, da konnte man einfach per LPDIRECT3DTEXTURE9 lpTexture; und D3DLOCKED_RECT LockedRect; an die Pixel gelangen.

Doch in Zeiten von Direct3D11 wo die Textur Daten per Shader Ressource übergeben werden stehe ich nun auf dem Schlauch.

Hat jemand einen Tipp für mich wie ich an die Sache rangehen könnte?


Mfg

Fb

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Fireball« (05.08.2011, 16:06) aus folgendem Grund: Erledigt.


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

31.07.2011, 11:26

Du brauchst diese monochromen Daten doch offenbar nur auf der CPU!? Speicher sie doch einfach in einem Array und fertig, wofür brauchst du da eine Textur!?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

31.07.2011, 19:39

Zudem ist LESEN aus einer Textur auf der GPU eine GANZ schlechte Idee. Du lädst die Bilder mit der CPU, jagst sie dann als Texturen an die GPU und willst sie danach wieder von der GPU in die CPU holen? Warum speicherst Du sie nicht gleich bevor Du sie an die GPU jagst?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

4

01.08.2011, 09:40

Hallo Dot,

ja genau ich brauche nur die monochromen Daten. Aber wie bekomme ich diese Textur als Array in den Speicher?
An die GPU wollte ich sie nicht senden. Ich habe derzeit nur keinen Plan mit welchen Direct3D11 Funktionen ich das machen kann.

Schönen Gruß

Fb

Du brauchst diese monochromen Daten doch offenbar nur auf der CPU!? Speicher sie doch einfach in einem Array und fertig, wofür brauchst du da eine Textur!?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

01.08.2011, 11:09

Du sendest sie in jedem Fall von der CPU an die GPU, wenn Du sie als D3D-Textur verwendest.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

marfi

Treue Seele

Beiträge: 100

Wohnort: Schwerte

  • Private Nachricht senden

6

01.08.2011, 11:14

Wie hast du denn die Monochrom Bilder erstellt? Du brauchst doch nur die Bilder einlesen, wenn es z.b. Bitmaps sind kannst du googeln, wie man bitmaps einliest. Wenn es ein anderes Format ist geht das natürlich auch, aber wahrscheinlich etwas komplizierter.

Wenn du die Pixel der Bilder eingelesen hast, kannst du sie einfach als array speichern. Oder du nutzt das vorhandene array der Bitmapdatei. Du kannst das ganze bei bedarf ja noch komprimieren.

Den ganzen DirectX kram kannst du außen vor lassen, der interessiert dabei NULL :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

01.08.2011, 11:52

ja genau ich brauche nur die monochromen Daten. Aber wie bekomme ich diese Textur als Array in den Speicher?

Naja, wo kommen die Daten denn her?

An die GPU wollte ich sie nicht senden. Ich habe derzeit nur keinen Plan mit welchen Direct3D11 Funktionen ich das machen kann.

Was willst du da überhaupt mit D3D tun wenn du doch eh nix mit der GPU machen willst!?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (01.08.2011, 12:19)


Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

8

01.08.2011, 12:32

Hallo Dot,

ja genau ich brauche nur die monochromen Daten. Aber wie bekomme ich diese Textur als Array in den Speicher?

Naja, wo kommen die Daten denn her?

Das Bild kommt aus einer BMP Datei, die nur aus den Farben Schwarz und Weiß bestehen.

An die GPU wollte ich sie nicht senden. Ich habe derzeit nur keinen Plan mit welchen Direct3D11 Funktionen ich das machen kann.

Was willst du da überhaupt mit D3D tun wenn du doch eh nix mit der GPU machen willst!?


Nun ja, da es sich um ein Bild handelt dachte ich, dass ich dafür dann auch die Funktionen von Direct3D benutzen sollte, um die Textur zu laden.

Ich habe dafür auch ein Tutorial gefunden, allerdings ist das nur für DirectX9.
http://www.virtual-maxim.de/pixelgenaue-kollisionserkennung/

Schönen Gruß

Fb

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

01.08.2011, 12:57

Nun ja, da es sich um ein Bild handelt dachte ich, dass ich dafür dann auch die Funktionen von Direct3D benutzen sollte, um die Textur zu laden.

Was willst du mit den Kollisionsdaten in einer Textur anfangen wenn du sie doch sowieso nicht als Textur benutzen willst!? Dass Direct3D Funktionen zum Laden von Bilddateien hätte wär mir auch neu. Du meinst wenn dann wohl D3DX. Aber wie gesagt macht dir das ja eine Textur und das willst du nicht. Lade die Daten doch einfach selbst!?

Fireball

Alter Hase

  • »Fireball« ist der Autor dieses Themas

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

10

01.08.2011, 13:06

Hallo Dot,

ok du hast mich überzeugt, ich werde mir da etwas eigenes schreiben - müssen. Wird aber wohl nicht so leicht, weil ich das BMP Format noch nicht kenne.

Vielleicht löst auch das schon mein Problem http://msdn.microsoft.com/en-us/library/…3(v=VS.85).aspx

Ich danke euch.

Wenn ich näheres weiß, dann poste ich es die Tage hier.

Gruß

Marcel

Werbeanzeige