GLSL中的手动GL_REPEAT

时间:2010-11-19 03:57:59

标签: opengl glsl

目前我有一个2048 x 2048像素的纹理图集,其中存储了三个512 x 512纹理,我只将一个纹理应用于对象。所以我使用下面的代码将纹理坐标(从零到1)定位到纹理纹理图集上的正确位置:

color = texture2D(tex_0, vec2(0.0, 1024.0/2048.0) + mod(texture_coordinate*vec2(40.0), vec2(1.0))*vec2(512.0/2048.0));

问题在于,当我应用它时,纹理周围有一个黑色边框。我认为这是因为OpenGL无法在该边界的位置混合两个像素。

那么如何摆脱边界?

编辑* 我已经尝试将起点和终点边界移向纹理的中心,但是没有效果。

编辑* 我找到了问题的根源,自动mipmap生成将纹理图集中的纹理混合在一起。这意味着我必须编写自己的mipmapping函数。 (据我所知)

如果有人有任何更好的想法,请发帖。

1 个答案:

答案 0 :(得分:1)

我没有使用普通的2D纹理作为带有纹理网格的纹理图集,而是使用GL_2D_TEXTURE_ARRAY功能创建了一个正确映射并正确重复的3D纹理。这样,纹理在更高的mipmap级别没有混合在一起。