Я использую OpenGL через LWJGL.
У меня 16x16 текстурированный квадрант рендеринга в 16x16. Когда я изменяю величину шкалы, квадратор растет, а затем становится более размытым.
Как я могу сделать его масштабируемым, не становясь размытым, как в Minecraft.
Вот код внутри моего объекта RenderableEntity:
public void render(){
Color.white.bind();
this.spriteSheet.bind();
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0,0);
GL11.glVertex2f(this.x, this.y);
GL11.glTexCoord2f(1,0);
GL11.glVertex2f(getDrawingWidth(), this.y);
GL11.glTexCoord2f(1,1);
GL11.glVertex2f(getDrawingWidth(), getDrawingHeight());
GL11.glTexCoord2f(0,1);
GL11.glVertex2f(this.x, getDrawingHeight());
GL11.glEnd();
}
А вот код из моего метода initGL в моем классе игры
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glClearColor(0.46f,0.46f,0.90f,1.0f);
GL11.glViewport(0,0,width,height);
GL11.glOrtho(0,width,height,0,1,-1);
А вот код, который делает фактический рисунок
public void start(){
initGL(800,600);
init();
while(true){
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
for(int i=0;i<entities.size();i++){
((RenderableEntity)entities.get(i)).render();
}
Display.update();
Display.sync(100);
if(Display.isCloseRequested()){
Display.destroy();
System.exit(0);
}
}
}
GL_TEXTURE_MIN
иGL_TEXTURE_MAG
для визуализации кода. Работает как я ожидал. Теперь я ухожу, чтобы узнать больше.Ты не можешь Природа любого вида цифровых данных заключается в том, что после удаления информации ее уже нельзя вернуть, и аналогичным образом вы не можете заполнить информацию, которой вообще никогда не было - лучшее, что вы можете сделать, это приблизительное приближение, что дает вам размытость.
Использование GL_NEAREST не будет размытым, но вместо этого оно станет пиксельным.
Решение состоит в том, чтобы использовать большую текстуру с мипмапами. Таким образом, вы получите хорошее качество независимо от размера текстурированной геометрии.
источник
Я столкнулся с этой проблемой на собственном опыте - создание блочной игры с текстурами низкого разрешения (8px * 8px). Независимо от того, насколько близко или как далеко была камера, текстуры по умолчанию смешивались с помощью настроек OpenGL - они выглядели размытыми.
Вам нужно включить «ближайшее» увеличение, чтобы отключить билинейную фильтрацию. То есть, когда камера приближается к текстуре; каждый пиксель определяется как цвет ближайшего текселя - без наложения.
Вы делаете это с этими двумя строками:
источник