使用HLSL和XNA查找像素着色器

使用HLSL和XNA查找像素着色器,xna,hlsl,Xna,Hlsl,首先,我是XNA和HLSL的新手,所以我的知识非常有限 我正在编写一个小应用程序,通过对不同高度使用不同的颜色来显示由16位2D值组成的数字高程模型。 颜色映射由像素着色器通过查找纹理完成。 目前,我正在将这些值转换为纹理2d的红色和绿色分量,并将它们映射到256x256纹理中的颜色。 由于颜色是离散的/不是连续的,我将minfilter/magfilter设置为指向放大时导致块状外观的点。 有没有办法在查找后恢复线性过滤?或者有人知道一种更好的映射方法吗 着色器: sampler2D tex1

首先,我是XNA和HLSL的新手,所以我的知识非常有限

我正在编写一个小应用程序,通过对不同高度使用不同的颜色来显示由16位2D值组成的数字高程模型。 颜色映射由像素着色器通过查找纹理完成。 目前,我正在将这些值转换为纹理2d的红色和绿色分量,并将它们映射到256x256纹理中的颜色。 由于颜色是离散的/不是连续的,我将minfilter/magfilter设置为指向放大时导致块状外观的点。 有没有办法在查找后恢复线性过滤?或者有人知道一种更好的映射方法吗

着色器:

sampler2D tex1 : register(s0) = sampler_state
{
MinFilter = Point;
MagFilter = Point;
MipFilter = linear; 
}; 

texture2D lookupTex;
sampler2D lookup = sampler_state
{
Texture = <lookupTex>; 

MinFilter = Point;
MagFilter = Point;
MipFilter = Point; 
};

float4 PixelShaderLookup(float4 incol : COLOR, float2 UV : TEXCOORD0) : COLOR0
{
float4 inCol = tex2D(tex1, UV);

half3 scale = (256 - 1.0) / 256;
half3 offset = 1.0 / (2.0 * 256);

float4 outCol = tex2D(lookup, scale * inCol.gr + offset);

return outCol;
}
感谢您的帮助,祝您新年快乐: