Tex2D renvoie des valeurs interpolées lorsque la position centrale de pixel dans HLSL

voix
0

La fonction retourne tex2D valeurs interpolées lorsque décentré de pixel ((0,5, 0,5) par exemple), ce qui est vraiment un problème quand vous avez une grande texture comme 1920x1080.

J'ai un pixel shader HLSL que les premiers échantillons d'une petite image, puis calcule le pixel correspondant dans une grande table de consultation (1920x1080) et échantillonne. Le problème est que le point flottant des erreurs de précision, il est impossible de toucher un point mort de pixels, il retourne une couleur qui est interpolé avec les pixels voisins.

Comment puis-je résoudre ce problème? Puis-je demander à ne pas interpoler dans l'échantillonneur?

Modifier:

Apparemment, je peux utiliser la fonction intrinsèque tex2Dproj où je partage mon coordonnées x et y par 1,92 et 1,08 au préalable, puis passer 1000 comme argument tw pour éviter toute erreur de précision en virgule flottante importants. Mais il semble bizarre que je devrais le faire.

Créé 07/11/2018 à 20:06
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

La valeur par défaut pour un filtre d'échantillonnage est LINEAR rend interpoler. Pour un échantillon de texture sans vous interpoler devez faire ceci:

texture2D ColorMap;
sampler2D ColorMapSampler = sampler_state
{
    texture = <ShadowMap>;
    AddressU = clamp;
    AddressV = clamp;
    magfilter = POINT;
    minfilter = POINT;
    mipfilter = POINT;
};

Ce qui me trébuché était que je ne ai eu ce problème avec cette texture. J'utilise monogame et a été mise à l'SamplerState PointClamp en dehors du shader, mais seulement pour la première texture GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;. Si vous avez plusieurs textures , il est une meilleure idée de déclarer explicitement pour chaque texture dans le shader.

Créé 28/11/2018 à 08:47
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more