J'utilise OpenGL via LWJGL.
J'ai un rendu quad texturé 16x16 à 16x16. Lorsque je modifie sa valeur d'échelle, le quad se développe, puis devient plus flou à mesure qu'il grandit.
Comment puis-je le faire évoluer sans devenir flou, comme dans Minecraft.
Voici le code à l'intérieur de mon objet 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();
}
Et voici le code de ma méthode initGL dans ma classe de jeu
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);
Et voici le code qui fait le dessin réel
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
etGL_TEXTURE_MAG
pour rendre le code. Fonctionne comme je m'y attendais. Maintenant je pars pour en savoir plus.Tu ne peux pas. La nature de tout type de données numériques est qu'une fois que les informations ont été supprimées, elles ne peuvent jamais être réintégrées, et de même, vous ne pouvez pas remplir des informations qui n'ont jamais été là en premier lieu - le mieux que vous puissiez faire est une approximation approximative, ce qui vous donne un flou.
L'utilisation de GL_NEAREST ne sera pas floue, mais elle deviendra pixellisée à la place.
La solution consiste à utiliser une texture plus grande avec des mipmaps. De cette façon, vous obtenez une bonne qualité quelle que soit la taille de la géométrie texturée.
la source
J'ai rencontré ce problème de première main - créer un jeu basé sur des blocs avec des textures basse résolution (8px * 8px). Peu importe la distance ou la distance de la caméra, les textures étaient «mélangées» croisées par les paramètres par défaut d'OpenGL - elles semblaient floues.
Vous devez activer le grossissement "le plus proche" pour désactiver le filtrage bilinéaire. Autrement dit, lorsque la caméra est zoomée près de la texture; chaque pixel est défini comme la couleur du texel la plus proche - pas de mélange.
Vous faites cela avec ces deux lignes:
la source