У моїй грі є місцевість, схожа на Minecraft, зроблену з кубів. Я генерую вершинний буфер з даних вокселів і використовую атлас текстури для вигляду різних блоків:
Проблема полягає в тому, що текстура віддалених кубів інтерполює з сусідніми плитками в текстурі атласу. Це призводить до неправильних кольорів між кубами (можливо, вам потрібно буде переглянути скріншот нижче в повному розмірі, щоб побачити графічні недоліки):
Наразі я використовую ці параметри інтерполяції, але я намагався будь-яку комбінацію і навіть GL_NEAREST
без міповідтворення не дає кращих результатів.
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
що так само призводить до смуг між блоками. Остання згадана опція зменшується, але не усуває недолік пікселя.