首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL纹理图谱出血

OpenGL纹理图谱出血
EN

Stack Overflow用户
提问于 2011-10-25 19:35:21
回答 4查看 6.6K关注 0票数 7

我试图从一个纹理地图集(注意1像素的透明边框)中绘制一个由较小的瓷砖组成的基本的2d地面网格:

我使用以下代码将瓷砖呈现为纹理四边形:

代码语言:javascript
复制
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_texture);

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

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glVertexPointer(2, GL_SHORT, 0, &m_coords[0]);
glTexCoordPointer(2, GL_FLOAT, 0, &m_uvs[0]);

glDrawArrays(GL_TRIANGLES, 0, m_coords.size() / 2);

glBindTexture(GL_TEXTURE_2D, 0);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);

这些位置显然是整数坐标。角点的UV坐标计算如下:

代码语言:javascript
复制
u0 = float(x) / float(texWidth);
v0 = float(y) / float(texHeight);
u1 = float(x+w) / float(texWidth);
v1 = float(y+h) / float(texHeight);

其中w和h是没有填充物的瓷砖的大小。

当模型视图转换被解压到整数位置(右)时,它看起来很棒,但是当它开始移动时,我在两块(左)之间得到了黑色的细化:

据我所知,我应该用半贴图来抵消UV坐标,但如果我将UV计算更改为:

代码语言:javascript
复制
u0 = float(x+0.5f) / float(texWidth);
v0 = float(y+0.5f) / float(texHeight);
u1 = float(x+w-0.5f) / float(texWidth);
v1 = float(y+h-0.5f) / float(texHeight);

还是不起作用。这样做对吗?我需要混合才能起作用吗?如果我抵消瓷砖,以确保它们被抓拍到像素网格,它可以工作,但这会使它在缓慢移动时折断。人们通常是如何解决这个问题的?

编辑

我应该说ofc是在iphone上。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-25 20:40:55

你的边框不应该是透明的,而应该是每一个子纹理的相反一侧的像素。例如,每个子纹理右侧的边框应该是最左边像素线的副本,即它将环绕到的像素。

这就是你如何“欺骗”包装纹理采样器的边框。

票数 6
EN

Stack Overflow用户

发布于 2012-02-12 18:47:49

我的纹理地图集也有类似的问题。我通过将图像插入1.0/织构_ATLAS_象素_PER_SIDE* 1/128.0来修正它。你需要通过实验找出128的数字。对我来说,好处是没有人能感觉到128像素的缺失。我做了这个修改,纹理坐标被发送到图形卡,而不是在着色器。我还没有试过像你一样在着色器里用纹理来做这件事。我读过关于如何处理纹理出血的不同信息,但是对于纹理地图集来说,这是最简单的解决方案。将边框添加到我的纹理中,这些纹理被紧密地压缩,并遵循两条规则的力量,这将使我拥有大量的空白。

这就是在iphone上对我有用的东西。

票数 2
EN

Stack Overflow用户

发布于 2011-10-25 20:09:29

您可以始终将GL_TEXTURE_MIN/MAG_FILTER切换到GL_NEAREST :)

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

https://stackoverflow.com/questions/7894802

复制
相关文章

相似问题

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