目前我有一个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函数。 (据我所知)
如果有人有任何更好的想法,请发帖。
答案 0 :(得分:1)
我没有使用普通的2D纹理作为带有纹理网格的纹理图集,而是使用GL_2D_TEXTURE_ARRAY
功能创建了一个正确映射并正确重复的3D纹理。这样,纹理在更高的mipmap级别没有混合在一起。