【发布时间】:2015-10-23 16:59:26
【问题描述】:
我正在使用 OpenTK 用 C# 编写一个小型 OpenGL 平铺地图渲染器。
为了渲染图块,我首先创建了一个顶点数组,然后创建了一个顶点缓冲区。
接下来,我遍历所有图块并根据图块类型将两个三角形添加到具有相应顶点(纹理坐标、颜色、位置)的顶点缓冲区。
为了避免昂贵的纹理切换,我使用了一个带有所有平铺纹理的大纹理,名为纹理图集。
但是我在使用纹理图集时遇到了问题。
问题是,如果我缩小并四处移动相机,我会在某些图块的边缘看到一些伪影。
我在互联网上找到的解决方案是......
- ...用半像素校正计算纹理坐标。
- ...使用纹理数组
我尝试了第一个,但没有达到预期的效果(更多解释如下)。
第二个我不知道如何使用纹理数组,我在互联网上找不到太多关于纹理数组的信息。
我使用了以下纹理过滤器:
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
纹理坐标计算带有半像素校正:
text_coord_x = (0.5f + pixel_x) / texture_width;
text_coord_y = (0.5f + pixel_x) / texture_height;
纹理坐标计算没有半像素校正:
text_coord_x = pixel_x / texture_width;
text_coord_y = pixel_y / texture_height;
【问题讨论】:
标签: opengl tile artifacts texture-atlas