Du bist nicht angemeldet.

Werbeanzeige

1

06.01.2011, 17:19

Direct3D 9 - Pixelfarbe

Hi,

Ich wollte mal fragen ob es bei Direct3D9 eine Funktion oder überhaupt einen Weg gibt einen einzelnen Pixel einer Textur rauszufinden?
Also ich würde das am Ende gerne so aussehen lassen:

C-/C++-Quelltext

1
Color farbe = meineTexture.GetPixel(x, y);


Bitte nicht schlagen wenn ich es doch in der Doku übersehen habe :D

CBenni::O

1x Contest-Sieger

Beiträge: 1 146

Wohnort: Stuttgart

  • Private Nachricht senden

2

06.01.2011, 17:57

Ich wüsste nur, dass man die Textur locken kann (IDirect3dTexture9::LockRect), aber ob dies für einen simplen Lesezugriff notwendig ist, weiß ich nicht.

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

06.01.2011, 18:12

Lesen aus dem Video-Ram (oder kopieren in den System-Ram oder die CPU) ist keine gute Idee, egal wie. Mach's anders, wenn du kannst. Z.B. durch Vorhalten der original Bild-Daten im Ram.
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]

Nexxtron

Alter Hase

Beiträge: 424

Wohnort: Heilbronn

Beruf: Student - Software Engineering

  • Private Nachricht senden

4

06.01.2011, 19:28

Lesen aus dem Video-Ram (oder kopieren in den System-Ram oder die CPU) ist keine gute Idee, egal wie. Mach's anders, wenn du kannst. Z.B. durch Vorhalten der original Bild-Daten im Ram.
Wieso ist das keine gute Idee? Wegen Performancegründen?
New Project: Operation CityRacer

GR-PA

Treue Seele

Beiträge: 326

Wohnort: Daheim

Beruf: Faulenzer

  • Private Nachricht senden

5

06.01.2011, 19:52

Dafür gibt's D3DPOOL_MANAGED

Zitat

Textures placed in the D3DPOOL_DEFAULT pool cannot be locked unless they are dynamic textures or they are private, FOURCC, driver formats. To access unlockable textures, you must use functions such as IDirect3DDevice9::UpdateSurface, IDirect3DDevice9::UpdateTexture, IDirect3DDevice9::GetFrontBufferData, and IDirect3DDevice9::GetRenderTargetData. D3DPOOL_MANAGED is probably a better choice than D3DPOOL_DEFAULT for most applications.
[...]

D3DPOOL_MANAGED:
Resources are copied automatically to device-accessible memory as needed. Managed resources are backed by system memory and do not need to be recreated when a device is lost. See Managing Resources (Direct3D 9) for more information. Managed resources can be locked. Only the system-memory copy is directly modified. Direct3D copies your changes to driver-accessible memory as needed.
Quelle
Signaturen werden überbewertet

dot

Supermoderator

Beiträge: 9 833

Wohnort: Graz

  • Private Nachricht senden

6

06.01.2011, 21:12

Wofür musst du einen Pixel aus deiner Textur lesen!?

7

06.01.2011, 21:33

@dot
Für Kollision (Pixel vergleichen).

Werde aber wohl einen anderen Weg finden müssen dies zu bewerkstelligen,
da ich jetzt nicht die Textur dafür locken wollte.
Ist ja dann doch was langsam ^^

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

06.01.2011, 21:41

Für Kollisionen ist das wirklich eine ganz schlechte Idee. Lesen aus Grafik-Ram ist sehr langsam.
Ich halte spezielle Kollisions-Bit-Masken im Ram für meine Sprite-Texturen. Funzt prima.

Kannst es natürlich auch irgendwie per Shader machen ;)
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]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (06.01.2011, 22:10)


9

06.01.2011, 22:15

Ähm GooseGogs verwendet es, glaub ich auch für die kolision und da funktioniert es wunderbar.
Metal ist keine Musik sondern eine Religion.

idontknow

unregistriert

10

07.01.2011, 00:40

Ähm GooseGogs verwendet es, glaub ich auch für die kolision und da funktioniert es wunderbar.

Nein, bei GooseGoogs wird bevor aus dem Levelbild (dem Schwarzweißen in dem die Kollisionsdaten stehen!) eine "Collisionmap" generiert anhand von der auf Kollision geprüft wird. Passiert zwar auch zur Laufzeit ist aber praktisch ein einmaliger Aufruf und da das ganze nichtmal während dem wirklichen Spielen pasiert duchaus verkraftbar!

Werbeanzeige