Saya menggunakan OpenGL melalui LWJGL.
Saya memiliki rendering quad 16x16 bertekstur pada 16x16. Ketika saya mengubah jumlah skalanya, quad tumbuh, lalu menjadi lebih blur karena semakin besar.
Bagaimana saya bisa membuatnya skala tanpa menjadi buram, seperti di Minecraft.
Berikut adalah kode di dalam objek RenderableEntity saya:
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();
}
Dan ini kode dari metode initGL saya di kelas game saya
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);
Dan di sini adalah kode yang melakukan gambar yang sebenarnya
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
danGL_TEXTURE_MAG
untuk membuat kode. Bekerja seperti yang saya harapkan. Sekarang saya akan belajar lebih banyak.Kamu tidak bisa Sifat segala jenis data digital adalah bahwa begitu informasi telah dihapus, maka tidak akan pernah dapat dikembalikan, dan Anda juga tidak dapat mengisi informasi yang tidak pernah ada di tempat pertama - yang terbaik yang dapat Anda lakukan adalah perkiraan kasar, yang memberi Anda kabur.
Menggunakan GL_NEAREST tidak akan buram tetapi itu akan menjadi pixeled sebagai gantinya.
Solusinya adalah menggunakan tekstur yang lebih besar dengan mipmaps. Dengan begitu Anda mendapatkan kualitas yang baik tidak peduli berapa ukuran geometri yang ditekstur.
sumber
Saya telah mengalami masalah ini secara langsung - membuat game berbasis blok dengan tekstur beresolusi rendah (8px * 8px). Tidak peduli seberapa dekat atau seberapa jauh kamera itu, teksturnya sedang "dicampur" oleh pengaturan default OpenGL - mereka tampak buram.
Anda harus mengaktifkan pembesaran "terdekat" untuk menonaktifkan pemfilteran bilinear. Yaitu, saat kamera diperbesar mendekati tekstur; setiap piksel didefinisikan sebagai warna texel yang terdekat - tidak ada campuran.
Anda melakukan ini dengan dua baris ini:
sumber