В моей игре есть Minecraft-подобная местность из кубов. Я генерирую буфер вершин из данных вокселей и использую атлас текстуры для внешнего вида различных блоков:
Проблема в том, что текстура удаленных кубов интерполируется с соседними плитками в текстурном атласе. Это приводит к появлению линий неправильных цветов между кубами (вам может понадобиться просмотреть скриншот ниже в полном размере, чтобы увидеть графические недостатки):
Пока я использую эти настройки интерполяции, но я пробовал каждую комбинацию и даже GL_NEAREST
без mipmapping не дает лучших результатов.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Я также попытался добавить смещение в координатах текстуры, чтобы выбрать немного меньшую площадь плитки, но поскольку нежелательный эффект зависит от расстояния до камеры, это не может полностью решить проблему. На дальних расстояниях полосы все равно встречаются.
Как я могу решить эту текстуру кровотечение? Поскольку использование текстурного атласа является популярной техникой, может быть общий подход. К сожалению, по некоторым причинам, объясненным в комментариях, я не могу перейти на другие текстуры или массивы текстур.
GL_LINEAR
что даст аналогичный результат, либо выберет ближайший пиксель, GL_NEAREST
что в любом случае также приведет к полосам между блоками. Последняя упомянутая опция уменьшается, но не устраняет дефект пикселей.