首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL纹理精度/纹理与属性

OpenGL纹理精度/纹理与属性
EN

Stack Overflow用户
提问于 2014-07-12 09:11:35
回答 1查看 903关注 0票数 0

我正在绘制一个简单的纹理四边形(2个三角形),使用一维纹理,包含从0到1的512个值。我使用的是NVIDIA GeForce GT 750 m、GL_LINEAR插值和GL_CLAMP_TO_EDGE。

我使用以下着色器绘制四角图:

代码语言:javascript
复制
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)的一维纹理,并使用以下方法显示它:

代码语言:javascript
复制
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的线性插值。结果似乎被分成三个区域:黑、内插和白。我尝试了不同的包装值,但没有成功(但结果不同)。你知道我在这里做错什么了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-12 11:28:12

在搜索了更多之后,纹理似乎需要根据纹理大小进行小调整:

代码语言:javascript
复制
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级别执行包装的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24711444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档