opengl-es-2.0 - 获取纹理像素时遇到问题不在边缘重复

标签 opengl-es-2.0

不熟悉OpenGL,似乎无法弄清楚这个小细节。我一直在寻找有关纹理重复而不是边框​​元素的信息。

放大纹理时,末端的边缘像素会重复到我正在处理的表面 View 的边缘。当纹理小于 View 时,我宁愿在这些像素后面看到清晰的背景。

我可以假设它与围绕这些代码行为我的纹理设置属性有关,但我只是无法充分遵循它来理解需要进行哪些更改才能获得所需的结果。

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

帮助(最有可能快速修改)主题以获得所需的结果将使我当前的问题得到解决。

Repeating edge pixels behind the texture

最佳答案

好的,我会尽力解释一下。

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

GL_TEXTURE_MIN_FILTER是当纹理的位图尺寸大于绘图表面的相应尺寸时应用的过滤器。 GL_TEXTURE_MAG_FILTER则相反。所以这不是问题。

GL_TEXTURE_WRAP_SGL_TEXTURE_WRAP_T但是,定义当纹理坐标超出 0.0 到 1.0 范围(对于两个轴)时要执行的操作。您将它们都设置为 GL_CLAMP_TO_EDGE ,这基本上意味着如果纹理坐标 < 0 则使用 0,如果 > 1 使用 1。这基本上就是您在图片中看到的情况。

但是,只能改为GL_REPEAT重复纹理或 GL_MIRRORED_REPEAT它重复并镜像。因此,您的问题无法通过更改这些设置来解决。没有“超出范围则丢弃”设置,我认为您需要该设置。 如果您愿意,您可以在文档中阅读有关此内容的更多信息:http://www.khronos.org/opengles/sdk/docs/man/

我不知 Prop 体如何缩放,但据我所知,它通常不涉及更改纹理坐标。如果你想保持这种方式,你可以尝试一些技巧 - 在片段着色器中,你可以在设置 gl_FragColor 之前添加。 :

   if (tc.x < 0.0 || tc.x > 1.0 || tc.y < 0.0 || tc.y > 1.0 ) 
     discard;

其中 tc 是纹理坐标。因此,如果纹理坐标超出 0 到 1 的范围,这将丢弃该片段。

这不是一个很好的解决方案,但它应该可以解决问题。

关于opengl-es-2.0 - 获取纹理像素时遇到问题不在边缘重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407063/

相关文章:

iphone - 如何使用 OpenGL ES 2.0 应用光源?

android - 使用 glMultMatrixf 进行翻译,以及何时规范化

opengl-es - 为什么 glBindFramebuffer(GL_FRAMEBUFFER, 0) 会导致 cocos2D-iphone 中出现黑屏?

objective-c - OpenGL ES 2.0 纹理映射,但显示为黑色

opengl-es - glGetShaderInfoLog 返回空字符串,但着色器程序未正确链接

ios - 立方体贴图未显示纹理 (OpenGL ES)

opengl-es-2.0 - 用于在 1.12.14 中测试 cairo-gles 后端的 cairo 应用程序示例

android - LibGDX SpriteBatch 多纹理可能吗?

java - OpenGL ES 2.0/3.0 中有很多对象时出现 alpha 混合问题

opengl-es - WebGL 着色器 : maximum number of varying variables