OpenGL ES 2.0纹理夹紧

时间:2014-02-16 20:51:39

标签: objective-c opengl-es-2.0 texture-mapping

当纹理坐标超过1时,我试图让我的纹理平铺。

我试过这个:

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

然而,当设置这两行时,我看到的只是黑色,根本没有纹理!

这样可行,但不会产生我需要的重复效果:

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

帮助!我已经用了几个小时来调查没有结果!

2 个答案:

答案 0 :(得分:2)

GL_TEXTURE_WRAP_SGL_TEXTURE_WRAP_T设置为GL_REPEAT要求您的纹理尺寸为2的幂。

答案 1 :(得分:0)

通过丢弃小数部分,可以将大于1的纹理坐标值转换为0 ... 1范围内的值。假设纹理坐标在texture_coord中,可以在片段着色器中放入以下代码:

        texture_coord.x = mod(texture_coord.x,1.0);
        texture_coord.y = mod(texture_coord.y,1.0);
        gl_FragColor = texture2D(s_texture,texture_coord);

我已经在OpenGL ES 2.0中进行了测试,它可以按预期工作,可以使用任何大小的纹理,而不仅仅是2的幂。