Fehler beim laden der Textur
-
IDirect3DTexture9* t = renderer->Textures[Filename]; D3DXCreateTexture(renderer->Device,100,100,1,0,D3DFMT_UNKNOWN,D3DPOOL_MANAGED,&t); D3DLOCKED_RECT pLockedRect; t->LockRect(0, &pLockedRect, 0, 0); for (int i = 0; i < 100; i++) { for (int j = 0; j < 100; j++) { ????????????????? } } t->UnlockRect(0);der code war nur zum testen.. ich hab statt den ? auch schon was stehen gehabt, aber das hab ich nicht ganz verstanden ^^
frage: wie kann ich jetzt die r,g,b,a werte der textur an einem bestimmten pixel setzen??
€: ich weiß, dass ich die textur einfach aus einem file laden könnte, aber das mach ich absichtlich nicht, weil ich bei manchen texturen kein file habe...
-
Das würde mich auch interessieren.. habe jetzt auch ein wenig gesucht und mit IDirect3DDevice9::UpdateSurface kann man wohl sowas anstellen. Muss mich aber mal näher damit auseinandersetzen.. mir ist noch nicht ganz klar, was es mit den "surfaces" auf sich hat...

Was hast Du denn schon dazu? Und hast Du es selbst gemacht oder irgendwo kopiert? Deine Aussage macht diesen Eindruck..spong3bob schrieb:
ich hab statt den ? auch schon was stehen gehabt, aber das hab ich nicht ganz verstanden ^^
..vielleicht können wir uns ja gegenseitig helfen?!
-
D3DXCreateTexture(renderer->Device,f.getWidth(),f.getHeight(),1,D3DUSAGE_DYNAMIC,D3DFMT_A8R8G8B8,D3DPOOL_DEFAULT,&renderer->Textures[Filename]); D3DLOCKED_RECT pLockedRect; renderer->Textures[Filename]->LockRect(0, &pLockedRect, NULL, 0); unsigned char *data = (unsigned char*)pLockedRect.pBits; for(uint z=0; z<f.getHeight(); z++) { for(uint s=0; s<f.getWidth(); s++) { PIXEL p = f.getPixel(z,s); *data++=p.b; *data++=p.g; *data++=p.r; *data++=p.a; } } renderer->Textures[Filename]->UnlockRect(0);so funktionierts...
f is bei mir eine klasse, die ein tga ausliest und in pixel sind rgba werte gespeichert...
-
Beachte "Pitch" von D3DLOCKED_RECT.