我正在绘制一个简单的纹理四边形(2个三角形),使用一维纹理,包含从0到1的512个值。我使用的是NVIDIA GeForce GT 750 m、GL_LINEAR插值和GL_CLAMP_TO_EDGE。
我使用以下着色器绘制四角图:
varying vec2 v_texcoord;
uniform sampler1D u_texture;
void main()
{
float x = v_texcoord.x;
float v = 512.0 * abs(texture1D(u_texture,x).r - x);
gl_FragColor = vec4(v,v,v,1);
}基本上,我是在显示纹理值和帧坐标之间的差异。我希望得到一个黑色的四角体(没什么区别),但我得到的却是:

我试图缩小问题的范围,尝试生成一个只有两个值(0和1)的一维纹理,并使用以下方法显示它:
varying vec2 v_texcoord;
uniform sampler1D u_texture;
void main()
{
float x = v_texcoord.x;
float v = texture1D(u_texture,x).r;
gl_FragColor = vec4(v,v,v,1);
}然后我得到:

显然,这不是从0到1的线性插值。结果似乎被分成三个区域:黑、内插和白。我尝试了不同的包装值,但没有成功(但结果不同)。你知道我在这里做错什么了吗?
发布于 2014-07-12 11:28:12
在搜索了更多之后,纹理似乎需要根据纹理大小进行小调整:
varying vec2 v_texcoord;
uniform sampler1D u_texture;
uniform float u_texture_shape;
void main()
{
float epsilon = 1.0/u_texture_shape;
float x = epsilon/2.0 +(1.0-epsilon)*v_texcoord.x;
float v = 512.0*abs(texture1D(u_texture,x).r -v_texcoord.x);
gl_FragColor = vec4(v,v,v,1);
}我想这与包装模式有关,但我没有找到关于如何在GPU级别执行包装的信息。
https://stackoverflow.com/questions/24711444
复制相似问题