我正在用OpenTK在C#中编写一个小的OpenGL tile map渲染器。
要渲染切片,我首先创建一个顶点数组,然后创建一个顶点缓冲区
接下来,我迭代所有切片并依赖切片类型我将两个三角形添加到顶点缓冲区,并带有相应的顶点(纹理坐标,颜色,位置)。
为了避免纹理昂贵的切换我使用一个大纹理与所有瓷砖纹理命名纹理图集。
但是在处理纹理图集时我遇到了问题
问题是,如果我缩小并移动相机,我会在某些瓷砖的边缘出现一些文物
我在互联网上找到的解决方案是......
我试过的第一个但它没有达到预期的效果(更多解释如下) 第二个我不知道如何使用纹理数组,我无法在互联网上找到很多纹理数组。
我使用了以下纹理过滤器:
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;