2010-12-29 3 views
1

En Direct3D 9, je suis en train de modifier une surface ainsi:assombrissement partie d'une surface en Direct3D 9

Compte tenu d'un rectangle, pour chacun des pixels dans la surface donnée dans les limites du rectangle, chacun des les canaux (R, G, B, A) seraient multipliés par une certaine valeur (flottante) pour l'atténuer ou l'éclairer.

Comment ferais-je cela? De préférence je veux éviter d'utiliser LockRect (d'autant plus qu'il ne semble pas fonctionner avec le pool par défaut).

+1

Pouvez-vous être plus précis? Quelle est l'origine de la surface? L'utilisez-vous comme une texture? Combien de fois cette modification est nécessaire? Chaque image? – Virne

Répondre

1

Si vous souhaitez mettre à jour un pixel Surfaces directement, vous pouvez utiliser "Device.UpdateTexture". Cela met à jour une texture créée dans Pool.SystemMemory à une texture créée dans Pool.Default.

Mais cela ne ressemble pas à ce que vous voulez faire. Utilisez un effet sur le matériel pour accélérer cela. Si tu veux savoir comment je peux te montrer.

+0

Merci, j'ai réussi à comprendre comment travailler avec un effet – Jamie